[A-Z][a-z]+\s+\d{1,2}\s+\d{4})$/' => 'F j Y',
+ ];
+
+ foreach ($rules as $regex => $dateTimeFormat) {
+ $matches = [];
+
+ preg_match($regex, $date, $matches);
+
+ if (preg_match($regex, $date, $matches)) {
+ if (!empty($matches['microseconds']) && PHP_VERSION_ID <= 80200) {
+ // For PHP <= 8.2, skip milliseconds
+ $date = $matches['datetime'];
+
+ continue;
+ }
+
+ $parsedDate = \DateTime::createFromFormat($dateTimeFormat, $date, $UTC);
+ if ($parsedDate instanceof \DateTime) {
+ return $parsedDate;
+ }
+
+ $parsedDate = \DateTime::createFromFormat($dateTimeFormat, $matches['datetime'] ?? $matches[0], $UTC);
+ if ($parsedDate instanceof \DateTime) {
+ return $parsedDate;
+ }
+
+ if (!empty($matches[1])) {
+ // Fallback, try ignoring the TimeZone
+ $parsedDate = \DateTime::createFromFormat('Y-m-d H:i:s', $matches[1], $UTC);
+ if ($parsedDate instanceof \DateTime) {
+ return $parsedDate;
+ }
+ }
+ }
+ }
+
+ if (defined('DEBUG_MODE') && DEBUG_MODE) {
+ throw new \UnexpectedValueException("DateTime not parsable, value: \"{$date}\" ");
+ }
+
+ return false;
+ }
+
+ /**
+ * @param string[] $lines
+ * @return string[]
+ */
+ protected function removeBlankLines(array $lines): array
+ {
+ return array_filter($lines);
+ }
+
+ protected function parseRegistryInfo(array $rawData): array
+ {
+ $registryItems = [
+ 'Registrar URL:' => 'referrer',
+ 'Registrar Name:' => 'registrar',
+ 'Registrar:' => 'registrar',
+ 'Registrar Abuse Contact Email:' => 'abuse.email',
+ 'Registrar Abuse Contact Phone:' => 'abuse.phone',
+ 'Registrar WHOIS Server:' => 'whois',
+ ];
+
+ $registryInfo = static::generic_parser_b($rawData, $registryItems);
+ unset($registryInfo['registered']);
+
+ return $registryInfo;
+ }
+
+ /**
+ * @param array $array The array to populate
+ * @param string[] $parts
+ * @param mixed $value The value to be assigned to the $vDef key
+ * @return array The updated array
+ * @see https://github.com/sparc/phpWhois.org/compare/18849d1a98b992190612cdb2561e7b4492c505f5...8c6a18686775b25f05592dd67d7706e47167a498#diff-b8adbe1292f8abca1f943aa844db52aa Original fix by David Saez PAdros sparc
+ * @see https://github.com/kevinoo/phpWhois/commit/42b278d47858a06a0c074c24cf2bf5b0fb5742d7
+ */
+ protected static function assignRecursive(array $array, array $parts, $value): array
+ {
+ $key = array_shift($parts);
+
+ if (count($parts) === 0) {
+ if (!$key) {
+ $array[] = $value;
+ } else {
+ $array[$key] = $value;
+ }
+ } else {
+ if (!isset($array[$key])) {
+ $array[$key] = [];
+ }
+
+ if (is_array($array[$key])) {
+ $array[$key] = static::assignRecursive($array[$key], $parts, $value);
+ }
+ // maybe non-array
+ }
+
+ return $array;
+ }
+
+ /**
+ * @param array $array The array to populate
+ * @param string $vDef A period-separated string of nested array keys
+ * @param mixed $value The value to be assigned to the $vDef key
+ * @return array The updated array
+ * @see https://github.com/sparc/phpWhois.org/compare/18849d1a98b992190612cdb2561e7b4492c505f5...8c6a18686775b25f05592dd67d7706e47167a498#diff-b8adbe1292f8abca1f943aa844db52aa Original fix by David Saez PAdros sparc
+ */
+ protected static function assign(array $array, string $vDef, $value): array
+ {
+ return static::assignRecursive($array, explode('.', $vDef), $value);
+ }
+}
diff --git a/src/Handlers/HandlerInterface.php b/src/Handlers/HandlerInterface.php
new file mode 100644
index 00000000..c7ec8258
--- /dev/null
+++ b/src/Handlers/HandlerInterface.php
@@ -0,0 +1,16 @@
+ 'fax',
'e-mail' => 'email',
'nic-hdl' => 'handle',
@@ -38,34 +40,36 @@ function parse($data_str, $query) {
'netname' => 'name',
'organisation' => 'handle',
'org-name' => 'organization',
- 'org-type' => 'type'
- );
+ 'org-type' => 'type',
+ ];
- $contacts = array(
+ $contacts = [
'admin-c' => 'admin',
'tech-c' => 'tech',
- 'org' => 'owner'
- );
+ 'org' => 'owner',
+ ];
- $r = generic_parser_a($data_str, $translate, $contacts, 'network', 'Ymd');
+ $r = static::generic_parser_a($data_str, $translate, $contacts, 'network', 'Ymd');
if (isset($r['network']['descr'])) {
$r['owner']['organization'] = $r['network']['descr'];
unset($r['network']['descr']);
}
- if (isset($r['owner']['remarks']) && is_array($r['owner']['remarks']))
- while (list($key, $val) = each($r['owner']['remarks'])) {
+ if (isset($r['owner']['remarks']) && is_array($r['owner']['remarks'])) {
+ foreach ($r['owner']['remarks'] as $val) {
$pos = strpos($val, 'rwhois://');
- if ($pos !== false)
+ if ($pos !== false) {
$r['rwhois'] = strtok(substr($val, $pos), ' ');
+ }
}
+ }
- $r = array('regrinfo' => $r);
+ $r = ['regrinfo' => $r];
$r['regyinfo']['type'] = 'ip';
$r['regyinfo']['registrar'] = 'African Network Information Center';
+
return $r;
}
-
}
diff --git a/src/whois.ip.apnic.php b/src/Handlers/IP/ApnicHandler.php
similarity index 72%
rename from src/whois.ip.apnic.php
rename to src/Handlers/IP/ApnicHandler.php
index 6106f2b4..7ef98e60 100644
--- a/src/whois.ip.apnic.php
+++ b/src/Handlers/IP/ApnicHandler.php
@@ -1,4 +1,5 @@
'fax',
'e-mail' => 'email',
'nic-hdl' => 'handle',
'person' => 'name',
- 'country' => 'address',
'netname' => 'name',
'descr' => 'desc',
'aut-num' => 'handle',
- 'country' => 'country'
- );
+ 'country' => 'country',
+ ];
- $contacts = array(
+ $contacts = [
'admin-c' => 'admin',
- 'tech-c' => 'tech'
- );
+ 'tech-c' => 'tech',
+ ];
- $blocks = generic_parser_a_blocks($data_str, $translate, $disclaimer);
+ $disclaimer = [];
+ $blocks = static::generic_parser_a_blocks($data_str, $translate, $disclaimer);
- $r = array();
+ $r = [];
- if (isset($disclaimer) && is_array($disclaimer))
+ if (isset($disclaimer) && is_array($disclaimer)) {
$r['disclaimer'] = $disclaimer;
+ }
if (empty($blocks) || !is_array($blocks['main'])) {
$r['registered'] = 'no';
} else {
if (isset($blocks[$query])) {
- $as = true;
$rb = $blocks[$query];
} else {
$rb = $blocks['main'];
- $as = false;
}
$r['registered'] = 'yes';
- while (list($key, $val) = each($contacts))
+ foreach ($contacts as $key => $val) {
if (isset($rb[$key])) {
- if (is_array($rb[$key]))
+ if (is_array($rb[$key])) {
$blk = $rb[$key][count($rb[$key]) - 1];
- else
+ } else {
$blk = $rb[$key];
+ }
- //$blk = strtoupper(strtok($blk,' '));
- if (isset($blocks[$blk]))
+ if (isset($blocks[$blk])) {
$r[$val] = $blocks[$blk];
+ }
unset($rb[$key]);
}
+ }
$r['network'] = $rb;
- format_dates($r, 'Ymd');
+ static::formatDates($r, 'Ymd');
if (isset($r['network']['desc'])) {
if (is_array($r['network']['desc'])) {
$r['owner']['organization'] = array_shift($r['network']['desc']);
$r['owner']['address'] = $r['network']['desc'];
- } else
+ } else {
$r['owner']['organization'] = $r['network']['desc'];
+ }
unset($r['network']['desc']);
}
if (isset($r['network']['address'])) {
- if (isset($r['owner']['address']))
+ if (isset($r['owner']['address'])) {
$r['owner']['address'][] = $r['network']['address'];
- else
+ } else {
$r['owner']['address'] = $r['network']['address'];
+ }
unset($r['network']['address']);
}
}
- $r = array('regrinfo' => $r);
+ $r = ['regrinfo' => $r];
$r['regyinfo']['type'] = 'ip';
$r['regyinfo']['registrar'] = 'Asia Pacific Network Information Centre';
+
return $r;
}
-
}
diff --git a/src/whois.ip.arin.php b/src/Handlers/IP/ArinHandler.php
similarity index 81%
rename from src/whois.ip.arin.php
rename to src/Handlers/IP/ArinHandler.php
index b0cf8320..b486c5a4 100644
--- a/src/whois.ip.arin.php
+++ b/src/Handlers/IP/ArinHandler.php
@@ -1,4 +1,5 @@
'owner.organization',
'CustName:' => 'owner.organization',
'OrgId:' => 'owner.handle',
@@ -50,8 +52,6 @@ function parse($data_str, $query) {
'Updated:' => 'network.changed',
'ASHandle:' => 'network.handle',
'ASName:' => 'network.name',
- 'NetHandle:' => 'network.handle',
- 'NetName:' => 'network.name',
'TechHandle:' => 'tech.handle',
'TechName:' => 'tech.name',
'TechPhone:' => 'tech.phone',
@@ -60,15 +60,15 @@ function parse($data_str, $query) {
'OrgAbuseHandle:' => 'abuse.handle',
'OrgAbusePhone:' => 'abuse.phone',
'OrgAbuseEmail:' => 'abuse.email.',
- 'ReferralServer:' => 'rwhois'
- );
+ 'ReferralServer:' => 'rwhois',
+ ];
- $r = generic_parser_b($data_str, $items, 'ymd', false, true);
+ $r = static::generic_parser_b($data_str, $items, 'ymd', false, true);
- if (@isset($r['abuse']['email']))
+ if (@isset($r['abuse']['email'])) {
$r['abuse']['email'] = implode(',', $r['abuse']['email']);
+ }
- return array('regrinfo' => $r);
+ return ['regrinfo' => $r];
}
-
}
diff --git a/src/whois.ip.krnic.php b/src/Handlers/IP/KrnicHandler.php
similarity index 70%
rename from src/whois.ip.krnic.php
rename to src/Handlers/IP/KrnicHandler.php
index 5c437b5f..472bae4a 100644
--- a/src/whois.ip.krnic.php
+++ b/src/Handlers/IP/KrnicHandler.php
@@ -1,4 +1,5 @@
'[ Organization Information ]',
'tech1' => '[ Technical Contact Information ]',
'owner2' => '[ ISP Organization Information ]',
@@ -42,10 +44,10 @@ function parse($data_str, $query) {
'network.inetnum' => 'IPv4 Address :',
'network.name' => 'Network Name :',
'network.mnt-by' => 'Connect ISP Name :',
- 'network.created' => 'Registration Date :'
- );
+ 'network.created' => 'Registration Date :',
+ ];
- $items = array(
+ $items = [
'Orgnization ID :' => 'handle',
'Org Name :' => 'organization',
'Org Name :' => 'organization',
@@ -60,46 +62,45 @@ function parse($data_str, $query) {
'Phone :' => 'phone',
'Fax :' => 'fax',
'E-Mail :' => 'email',
- 'E-Mail :' => 'email'
- );
+ 'E-Mail :' => 'email',
+ ];
- $b = get_blocks($data_str, $blocks);
+ $b = static::getBlocks($data_str, $blocks);
- $r = array();
+ $r = [];
if (isset($b['network'])) {
$r['network'] = $b['network'];
}
if (isset($b['owner1'])) {
- $r['owner'] = generic_parser_b($b['owner1'], $items, 'Ymd', false);
+ $r['owner'] = static::generic_parser_b($b['owner1'], $items, 'Ymd', false);
} elseif (isset($b['owner2'])) {
- $r['owner'] = generic_parser_b($b['owner2'], $items, 'Ymd', false);
+ $r['owner'] = static::generic_parser_b($b['owner2'], $items, 'Ymd', false);
}
if (isset($b['admin2'])) {
- $r['admin'] = generic_parser_b($b['admin2'], $items, 'Ymd', false);
+ $r['admin'] = static::generic_parser_b($b['admin2'], $items, 'Ymd', false);
} elseif (isset($b['admin3'])) {
- $r['admin'] = generic_parser_b($b['admin3'], $items, 'Ymd', false);
+ $r['admin'] = static::generic_parser_b($b['admin3'], $items, 'Ymd', false);
}
if (isset($b['tech1'])) {
- $r['tech'] = generic_parser_b($b['tech1'], $items, 'Ymd', false);
+ $r['tech'] = static::generic_parser_b($b['tech1'], $items, 'Ymd', false);
} elseif (isset($b['tech2'])) {
- $r['tech'] = generic_parser_b($b['tech2'], $items, 'Ymd', false);
+ $r['tech'] = static::generic_parser_b($b['tech2'], $items, 'Ymd', false);
} elseif (isset($b['tech3'])) {
- $r['tech'] = generic_parser_b($b['tech3'], $items, 'Ymd', false);
+ $r['tech'] = static::generic_parser_b($b['tech3'], $items, 'Ymd', false);
}
if (isset($b['abuse'])) {
- $r['abuse'] = generic_parser_b($b['abuse'], $items, 'Ymd', false);
+ $r['abuse'] = static::generic_parser_b($b['abuse'], $items, 'Ymd', false);
}
- $r = format_dates($r, 'Ymd');
+ $r = static::formatDates($r, 'Ymd');
- $r = array('regrinfo' => $r);
+ $r = ['regrinfo' => $r];
$r['regyinfo']['type'] = 'ip';
$r['regyinfo']['registrar'] = 'Korean Network Information Centre';
return $r;
}
-
}
diff --git a/src/whois.ip.lacnic.php b/src/Handlers/IP/LacnicHandler.php
similarity index 55%
rename from src/whois.ip.lacnic.php
rename to src/Handlers/IP/LacnicHandler.php
index 6f1e34d5..00602b92 100644
--- a/src/whois.ip.lacnic.php
+++ b/src/Handlers/IP/LacnicHandler.php
@@ -1,4 +1,5 @@
'fax',
'e-mail' => 'email',
'nic-hdl-br' => 'handle',
@@ -38,38 +40,37 @@ function parse($data_str, $query) {
'person' => 'name',
'netname' => 'name',
'descr' => 'desc',
- 'country' => 'address.country'
- );
+ 'country' => 'address.country',
+ ];
- $contacts = array(
+ $contacts = [
'owner-c' => 'owner',
'tech-c' => 'tech',
'abuse-c' => 'abuse',
- 'admin-c' => 'admin'
- );
+ 'admin-c' => 'admin',
+ ];
- $r = generic_parser_a($data_str, $translate, $contacts, 'network');
+ $r = static::generic_parser_a($data_str, $translate, $contacts, 'network');
- unset($r['network']['owner']);
- unset($r['network']['ownerid']);
- unset($r['network']['responsible']);
- unset($r['network']['address']);
- unset($r['network']['phone']);
- unset($r['network']['aut-num']);
- unset($r['network']['nsstat']);
- unset($r['network']['nslastaa']);
- unset($r['network']['inetrev']);
+ unset($r['network']['owner'], $r['network']['ownerid'], $r['network']['responsible'], $r['network']['address'], $r['network']['phone'], $r['network']['nsstat'], $r['network']['nslastaa'], $r['network']['inetrev']);
- if (!empty($r['network']['aut-num']))
+ if (!empty($r['network']['aut-num'])) {
$r['network']['handle'] = $r['network']['aut-num'];
+ }
- if (isset($r['network']['nserver']))
+ if (isset($r['network']['nserver'])) {
+ if (is_string($r['network']['nserver'])) {
+ $r['network']['nserver'] = [$r['network']['nserver']];
+ }
$r['network']['nserver'] = array_unique($r['network']['nserver']);
+ }
- $r = array('regrinfo' => $r);
- $r['regyinfo']['type'] = 'ip';
- $r['regyinfo']['registrar'] = 'Latin American and Caribbean IP address Regional Registry';
- return $r;
+ return [
+ 'regrinfo' => $r,
+ 'regyinfo' => [
+ 'type' => 'ip',
+ 'registrar' => 'Latin American and Caribbean IP address Regional Registry',
+ ],
+ ];
}
-
}
diff --git a/src/whois.ip.ripe.php b/src/Handlers/IP/RipeHandler.php
similarity index 73%
rename from src/whois.ip.ripe.php
rename to src/Handlers/IP/RipeHandler.php
index 88d1e3a9..bad3e006 100644
--- a/src/whois.ip.ripe.php
+++ b/src/Handlers/IP/RipeHandler.php
@@ -1,4 +1,5 @@
'fax',
'e-mail' => 'email',
'nic-hdl' => 'handle',
'person' => 'name',
'netname' => 'name',
- 'descr' => 'desc'
- );
+ 'descr' => 'desc',
+ ];
- $contacts = array(
+ $contacts = [
'admin-c' => 'admin',
- 'tech-c' => 'tech'
- );
+ 'tech-c' => 'tech',
+ ];
- if (!empty($data_str['rawdata']))
+ if (!empty($data_str['rawdata'])) {
$data_str = $data_str['rawdata'];
+ }
- $r = generic_parser_a($data_str, $translate, $contacts, 'network');
+ $r = static::generic_parser_a($data_str, $translate, $contacts, 'network');
if (isset($r['network']['desc'])) {
$r['owner']['organization'] = $r['network']['desc'];
@@ -65,19 +68,23 @@ function parse($data_str, $query) {
}
// Clean mess
- if (isset($r['tech']['tech-c']))
+ if (isset($r['tech']['tech-c'])) {
unset($r['tech']['tech-c']);
- if (isset($r['tech']['admin-c']))
+ }
+ if (isset($r['tech']['admin-c'])) {
unset($r['tech']['admin-c']);
- if (isset($r['admin']['tech-c']))
+ }
+ if (isset($r['admin']['tech-c'])) {
unset($r['admin']['tech-c']);
- if (isset($r['admin']['admin-c']))
+ }
+ if (isset($r['admin']['admin-c'])) {
unset($r['admin']['admin-c']);
+ }
- $r = array('regrinfo' => $r);
+ $r = ['regrinfo' => $r];
$r['regyinfo']['type'] = 'ip';
$r['regyinfo']['registrar'] = 'RIPE Network Coordination Centre';
+
return $r;
}
-
}
diff --git a/src/Handlers/TLD/AeHandler.php b/src/Handlers/TLD/AeHandler.php
new file mode 100644
index 00000000..dae7fff7
--- /dev/null
+++ b/src/Handlers/TLD/AeHandler.php
@@ -0,0 +1,41 @@
+ 'domain.name',
+ 'Registrar Name:' => 'domain.sponsor',
+ 'Status:' => 'domain.status',
+ 'Registrant Contact ID:' => 'owner.handle',
+ 'Registrant Contact Name:' => 'owner.name',
+ 'Registrant Contact Organisation:' => 'owner.organization',
+ 'Tech Contact Name:' => 'tech.name',
+ 'Tech Contact ID:' => 'tech.handle',
+ 'Tech Contact Organisation:' => 'tech.organization',
+ 'Name Server:' => 'domain.nserver.',
+ ];
+
+ return [
+ 'regrinfo' => static::generic_parser_b($data_str['rawdata'], $items, 'ymd'),
+ 'regyinfo' => [
+ 'referrer' => 'http://www.nic.ae',
+ 'registrar' => 'UAENIC',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/AeroHandler.php b/src/Handlers/TLD/AeroHandler.php
new file mode 100644
index 00000000..8100db2e
--- /dev/null
+++ b/src/Handlers/TLD/AeroHandler.php
@@ -0,0 +1,30 @@
+ static::generic_parser_b($data_str['rawdata'], [], 'ymd'),
+ 'regyinfo' => [
+ 'referrer' => 'http://www.nic.aero',
+ 'registrar' => 'Societe Internationale de Telecommunications Aeronautiques SC',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/AgHandler.php b/src/Handlers/TLD/AgHandler.php
new file mode 100644
index 00000000..4b1c4f12
--- /dev/null
+++ b/src/Handlers/TLD/AgHandler.php
@@ -0,0 +1,28 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => [
+ 'referrer' => 'https://www.nic.ag',
+ 'registrar' => 'Nic AG',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/AmHandler.php b/src/Handlers/TLD/AmHandler.php
new file mode 100644
index 00000000..d439a1c5
--- /dev/null
+++ b/src/Handlers/TLD/AmHandler.php
@@ -0,0 +1,51 @@
+ 'Registrant:',
+ 'domain.name' => 'Domain name:',
+ 'domain.created' => 'Registered:',
+ 'domain.changed' => 'Last modified:',
+ 'domain.nserver' => 'DNS servers:',
+ 'domain.status' => 'Status:',
+ 'tech' => 'Technical contact:',
+ 'admin' => 'Administrative contact:',
+ ];
+
+ $rawData = $this->removeBlankLines($data_str['rawdata']);
+ $r = [
+ 'regrinfo' => $this->getBlocks($rawData, $items),
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (!empty($r['regrinfo']['domain']['name'])) {
+ $r['regrinfo'] = $this->getContacts($r['regrinfo']);
+ $r['regrinfo']['registered'] = 'yes';
+ } else {
+ $r = [];
+ $r['regrinfo']['registered'] = 'no';
+ }
+
+ $r['regyinfo'] = [
+ 'referrer' => 'http://www.isoc.am',
+ 'registrar' => 'ISOCAM',
+ ];
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/AppHandler.php b/src/Handlers/TLD/AppHandler.php
new file mode 100644
index 00000000..d49997f0
--- /dev/null
+++ b/src/Handlers/TLD/AppHandler.php
@@ -0,0 +1,21 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/AsiaHandler.php b/src/Handlers/TLD/AsiaHandler.php
new file mode 100644
index 00000000..34070a6f
--- /dev/null
+++ b/src/Handlers/TLD/AsiaHandler.php
@@ -0,0 +1,30 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => [
+ 'referrer' => 'http://www.dotasia.org/',
+ 'registrar' => 'DotAsia',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/AtHandler.php b/src/Handlers/TLD/AtHandler.php
new file mode 100644
index 00000000..34ffa6cb
--- /dev/null
+++ b/src/Handlers/TLD/AtHandler.php
@@ -0,0 +1,85 @@
+ 'fax',
+ 'e-mail' => 'email',
+ 'nic-hdl' => 'handle',
+ 'person' => 'name',
+ 'personname' => 'name',
+ 'street address' => 'address.street',
+ 'city' => 'address.city',
+ 'postal code' => 'address.pcode',
+ 'country' => 'address.country',
+ // 'domain' => 'domain.name',
+ ];
+
+ $contacts = [
+ 'registrant' => 'owner',
+ 'admin-c' => 'admin',
+ 'tech-c' => 'tech',
+ 'billing-c' => 'billing',
+ 'zone-c' => 'zone',
+ ];
+
+ $reg = $this->generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
+
+ if (isset($reg['domain']['remarks'])) {
+ unset($reg['domain']['remarks']);
+ }
+
+ if (isset($reg['domain']['descr'])) {
+ foreach ($reg['domain']['descr'] as $key => $val) {
+ $v = trim(substr(strstr($val, ':'), 1));
+ if (strstr($val, '[organization]:')) {
+ $reg['owner']['organization'] = $v;
+
+ continue;
+ }
+ if (strstr($val, '[phone]:')) {
+ $reg['owner']['phone'] = $v;
+
+ continue;
+ }
+ if (strstr($val, '[fax-no]:')) {
+ $reg['owner']['fax'] = $v;
+
+ continue;
+ }
+ if (strstr($val, '[e-mail]:')) {
+ $reg['owner']['email'] = $v;
+
+ continue;
+ }
+
+ $reg['owner']['address'][$key] = $v;
+ }
+
+ unset($reg['domain']['descr']);
+ }
+
+ return [
+ 'regrinfo' => $reg,
+ 'regyinfo' => [
+ 'referrer' => 'http://www.nic.at',
+ 'registrar' => 'NIC-AT',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/AuHandler.php b/src/Handlers/TLD/AuHandler.php
new file mode 100644
index 00000000..2a1887d2
--- /dev/null
+++ b/src/Handlers/TLD/AuHandler.php
@@ -0,0 +1,46 @@
+ 'domain.name',
+ 'Last Modified:' => 'domain.changed',
+ 'Registrar Name:' => 'domain.sponsor',
+ 'Status:' => 'domain.status',
+ 'Domain ROID:' => 'domain.handle',
+ 'Registrant:' => 'owner.organization',
+ 'Registrant Contact ID:' => 'owner.handle',
+ 'Registrant Contact Email:' => 'owner.email',
+ 'Registrant Contact Name:' => 'owner.name',
+ 'Tech Contact Name:' => 'tech.name',
+ 'Tech Contact Email:' => 'tech.email',
+ 'Tech Contact ID:' => 'tech.handle',
+ 'Name Server:' => 'domain.nserver.',
+ ];
+
+ $r = [
+ 'regrinfo' => static::generic_parser_b($data_str['rawdata'], $items),
+ 'regyinfo' => [
+ 'referrer' => 'http://www.aunic.net',
+ 'registrar' => 'AU-NIC',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/BeHandler.php b/src/Handlers/TLD/BeHandler.php
new file mode 100644
index 00000000..56e5c5a3
--- /dev/null
+++ b/src/Handlers/TLD/BeHandler.php
@@ -0,0 +1,65 @@
+ 'Domain:',
+ 'domain.status' => 'Status:',
+ 'domain.nserver' => 'Nameservers:',
+ 'domain.created' => 'Registered:',
+ 'owner' => 'Licensee:',
+ 'admin' => 'Onsite Contacts:',
+ 'tech' => 'Registrar Technical Contacts:',
+ 'agent' => 'Registrar:',
+ 'agent.uri' => 'Website:',
+ ];
+
+ $trans = [
+ 'company name2:' => '',
+ ];
+
+ $rawData = $this->removeBlankLines($data_str['rawdata']);
+
+ $r = [
+ 'regrinfo' => static::getBlocks($rawData, $items),
+ 'regyinfo' => $this->parseRegistryInfo($rawData) ?? [
+ 'referrer' => 'https://www.domain-registry.nl',
+ 'registrar' => 'DNS Belgium',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ $domainStatus = $r['regrinfo']['domain']['status'];
+ if ('REGISTERED' === $domainStatus || 'NOT AVAILABLE' === $domainStatus) {
+ $r['regrinfo']['registered'] = 'yes';
+
+ $r['regrinfo'] = static::getContacts($r['regrinfo'], $trans);
+
+ if (isset($r['regrinfo']['agent'])) {
+ $sponsor = $this->getContact($r['regrinfo']['agent'], $trans);
+ unset($r['regrinfo']['agent']);
+ $r['regrinfo']['domain']['sponsor'] = $sponsor;
+ }
+
+ $r = static::formatDates($r, '-mdy');
+ } else {
+ $r['regrinfo']['registered'] = 'no';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/BhHandler.php b/src/Handlers/TLD/BhHandler.php
new file mode 100644
index 00000000..bb23b516
--- /dev/null
+++ b/src/Handlers/TLD/BhHandler.php
@@ -0,0 +1,37 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (empty($r['regrinfo']['domain']['created'])) {
+ $r['regrinfo']['registered'] = 'no';
+ } else {
+ $r['regrinfo']['registered'] = 'yes';
+ }
+
+ $r['regyinfo'] = $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'http://www.nic.bh/',
+ 'registrar' => 'NIC-BH',
+ ];
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/BizHandler.php b/src/Handlers/TLD/BizHandler.php
new file mode 100644
index 00000000..3d5ece5d
--- /dev/null
+++ b/src/Handlers/TLD/BizHandler.php
@@ -0,0 +1,30 @@
+ static::generic_parser_b($data_str['rawdata'], [], 'mdy'),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.neulevel.biz',
+ 'registrar' => 'NEULEVEL',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/BrHandler.php b/src/Handlers/TLD/BrHandler.php
new file mode 100644
index 00000000..63cb57a7
--- /dev/null
+++ b/src/Handlers/TLD/BrHandler.php
@@ -0,0 +1,77 @@
+ 'fax',
+ 'e-mail' => 'email',
+ 'nic-hdl-br' => 'handle',
+ 'person' => 'name',
+ 'netname' => 'name',
+ 'domain' => 'name',
+ 'updated' => '',
+ ];
+
+ $contacts = [
+ 'owner-c' => 'owner',
+ 'tech-c' => 'tech',
+ 'admin-c' => 'admin',
+ 'billing-c' => 'billing',
+ ];
+
+ $r = static::generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
+
+ if (in_array('Permission denied.', $r['disclaimer'])) {
+ $r['registered'] = 'unknown';
+
+ return $r;
+ }
+
+ if (isset($r['domain']['nsstat'])) {
+ unset($r['domain']['nsstat']);
+ }
+ if (isset($r['domain']['nslastaa'])) {
+ unset($r['domain']['nslastaa']);
+ }
+
+ if (isset($r['domain']['owner'])) {
+ $r['owner']['organization'] = $r['domain']['owner'];
+ unset($r['domain']['owner']);
+ }
+
+ if (isset($r['domain']['responsible'])) {
+ unset($r['domain']['responsible']);
+ }
+ if (isset($r['domain']['address'])) {
+ unset($r['domain']['address']);
+ }
+ if (isset($r['domain']['phone'])) {
+ unset($r['domain']['phone']);
+ }
+
+ $a = [
+ 'regrinfo' => $r,
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'registrar' => 'BR-NIC',
+ 'referrer' => 'https://www.nic.br',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ return $a;
+ }
+}
diff --git a/src/Handlers/TLD/CaHandler.php b/src/Handlers/TLD/CaHandler.php
new file mode 100644
index 00000000..4cfed849
--- /dev/null
+++ b/src/Handlers/TLD/CaHandler.php
@@ -0,0 +1,28 @@
+ static::generic_parser_b($data_str['rawdata'], [], 'ymd'),
+ 'regyinfo' => [
+ 'registrar' => 'CIRA',
+ 'referrer' => 'https://www.cira.ca/',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/CatHandler.php b/src/Handlers/TLD/CatHandler.php
new file mode 100644
index 00000000..eb4b5f2b
--- /dev/null
+++ b/src/Handlers/TLD/CatHandler.php
@@ -0,0 +1,34 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => [
+ 'registrar' => 'Domini punt CAT',
+ 'referrer' => 'https://domini.cat/',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (!isset($r['regrinfo']['domain']['name'])) {
+ $r['regrinfo']['registered'] = 'no';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/ChHandler.php b/src/Handlers/TLD/ChHandler.php
new file mode 100644
index 00000000..a4aced78
--- /dev/null
+++ b/src/Handlers/TLD/ChHandler.php
@@ -0,0 +1,62 @@
+ 'Holder of domain name:',
+ 'domain.name' => 'Domain name:',
+ 'domain.created' => 'Date of last registration:',
+ 'domain.changed' => 'Date of last modification:',
+ 'tech' => 'Technical contact:',
+ 'domain.nserver' => 'Name servers:',
+ 'domain.dnssec' => 'DNSSEC:',
+ ];
+
+ $trans = [
+ 'contractual language:' => 'language',
+ ];
+
+ $r = [];
+ $r['regrinfo'] = static::getBlocks($data_str['rawdata'], $items);
+
+ if (!empty($r['regrinfo']['domain']['name'])) {
+ $r['regrinfo'] = static::getContacts($r['regrinfo'], $trans);
+
+ $r['regrinfo']['domain']['name'] = $r['regrinfo']['domain']['name'][0];
+
+ if (isset($r['regrinfo']['domain']['changed'][0])) {
+ $r['regrinfo']['domain']['changed'] = static::getDate($r['regrinfo']['domain']['changed'][0], 'dmy');
+ }
+
+ if (isset($r['regrinfo']['domain']['created'][0])) {
+ $r['regrinfo']['domain']['created'] = static::getDate($r['regrinfo']['domain']['created'][0], 'dmy');
+ }
+
+ $r['regrinfo']['registered'] = 'yes';
+ } else {
+ $r = [];
+ $r['regrinfo']['registered'] = 'no';
+ }
+
+ $r['regyinfo'] = [
+ 'referrer' => 'https://www.nic.ch/',
+ 'registrar' => 'SWITCH Domain Name Registration',
+ ];
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/ClHandler.php b/src/Handlers/TLD/ClHandler.php
new file mode 100644
index 00000000..68fb8bdc
--- /dev/null
+++ b/src/Handlers/TLD/ClHandler.php
@@ -0,0 +1,51 @@
+ '(Administrative Contact)',
+ 'tech' => 'Contacto Técnico (Technical Contact):',
+ // 'domain.nserver' => 'Servidores de nombre (Domain servers):',
+ 'domain.nserver' => 'Name server:',
+ 'domain.changed' => '(Database last updated on):',
+ 'domain.created' => 'Creation date:',
+ 'domain.expires' => 'Expiration date:',
+ ];
+
+ $trans = [
+ 'organización:' => 'organization',
+ 'nombre :' => 'name',
+ ];
+
+ $rawData = $this->removeBlankLines($data_str['rawdata']);
+ $r = [
+ 'rawdata' => $data_str['rawdata'],
+ 'regrinfo' => $this->easyParser($rawData, $items, 'd-m-y', $trans),
+ ];
+
+ if (!isset($r['regrinfo']['domain']['name'])) {
+ $r['regrinfo']['domain']['name'] = $query;
+ }
+
+ $r['regyinfo'] = [
+ 'referrer' => 'http://www.nic.cl',
+ 'registrar' => 'NIC Chile',
+ ];
+
+ return $r;
+ }
+}
diff --git a/src/whois.cn.php b/src/Handlers/TLD/CnHandler.php
similarity index 65%
rename from src/whois.cn.php
rename to src/Handlers/TLD/CnHandler.php
index c322cd7a..f712a826 100644
--- a/src/whois.cn.php
+++ b/src/Handlers/TLD/CnHandler.php
@@ -1,42 +1,30 @@
'domain.name',
'Domain Status:' => 'domain.status.',
'ROID:' => 'domain.handle',
'Name Server:' => 'domain.nserver.',
'Registration Date:' => 'domain.created',
+ 'Registration Time:' => 'domain.created',
'Expiration Date:' => 'domain.expires',
+ 'Expiration Time:' => 'domain.expires',
'Sponsoring Registrar:' => 'domain.sponsor',
'Registrant Name:' => 'owner.name',
'Registrant Organization:' => 'owner.organization',
@@ -73,16 +61,16 @@ function parse($data_str, $query) {
'Billing Country Code:' => 'billing.address.country',
'Billing Email:' => 'billing.email',
'Billing Phone Number:' => 'billing.phone',
- 'Billing Fax:' => 'billing.fax'
- );
+ 'Billing Fax:' => 'billing.fax',
+ ];
- $r = array();
- $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'ymd');
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.cnnic.net.cn',
- 'registrar' => 'China NIC'
- );
- return $r;
+ return [
+ 'regrinfo' => static::generic_parser_b($data_str['rawdata'], $items, 'ymd'),
+ 'regyinfo' => [
+ 'referrer' => 'http://www.cnnic.net.cn',
+ 'registrar' => 'China NIC',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
}
-
}
diff --git a/src/Handlers/TLD/CoHandler.php b/src/Handlers/TLD/CoHandler.php
new file mode 100644
index 00000000..6f93bcaf
--- /dev/null
+++ b/src/Handlers/TLD/CoHandler.php
@@ -0,0 +1,29 @@
+ $data_str['rawdata'],
+ ];
+
+ $r['regrinfo'] = static::generic_parser_b($data_str['rawdata'], [], 'mdy');
+ $r['regyinfo']['referrer'] = 'http://www.cointernet.com.co/';
+ $r['regyinfo']['registrar'] = '.CO Internet, S.A.S.';
+
+ return $r;
+ }
+}
diff --git a/src/whois.co.za.php b/src/Handlers/TLD/CoZaHandler.php
similarity index 80%
rename from src/whois.co.za.php
rename to src/Handlers/TLD/CoZaHandler.php
index 921bbc8a..2b1a9fa4 100644
--- a/src/whois.co.za.php
+++ b/src/Handlers/TLD/CoZaHandler.php
@@ -1,4 +1,5 @@
'domain.changed',
'1a. domain :' => 'domain.name',
'2b. registrantpostaladdress:' => 'owner.address.address.0',
@@ -40,6 +42,7 @@ function parse($data_str, $query) {
'2j. registrantphone :' => 'owner.phone',
'2k. registrantfax :' => 'owner.fax',
'2l. registrantemail :' => 'owner.email',
+ '3e. creationdate :' => 'domain.created',
'4a. admin :' => 'admin.name',
'4c. admincompany :' => 'admin.organization',
'4d. adminpostaladdr :' => 'admin.address',
@@ -56,15 +59,16 @@ function parse($data_str, $query) {
'6e. secns1fqdn :' => 'domain.nserver.1',
'6i. secns2fqdn :' => 'domain.nserver.2',
'6m. secns3fqdn :' => 'domain.nserver.3',
- '6q. secns4fqdn :' => 'domain.nserver.4'
- );
-
- $r = array();
- $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items);
+ '6q. secns4fqdn :' => 'domain.nserver.4',
+ ];
- $r['regyinfo']['referrer'] = 'http://www.co.za';
- $r['regyinfo']['registrar'] = 'UniForum Association';
- return $r;
+ return [
+ 'regrinfo' => AbstractHandler::generic_parser_a($data_str['rawdata'], $items, []),
+ 'regyinfo' => [
+ 'referrer' => 'https://www.co.za',
+ 'registrar' => 'UniForum Association',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
}
-
}
diff --git a/src/Handlers/TLD/CoopHandler.php b/src/Handlers/TLD/CoopHandler.php
new file mode 100644
index 00000000..189f8ecf
--- /dev/null
+++ b/src/Handlers/TLD/CoopHandler.php
@@ -0,0 +1,88 @@
+ 'Contact Type: registrant',
+ 'admin' => 'Contact Type: admin',
+ 'tech' => 'Contact Type: tech',
+ 'billing' => 'Contact Type: billing',
+ 'domain.name' => 'Domain Name:',
+ 'domain.handle' => 'Domain ID:',
+ 'domain.expires' => 'Expiry Date:',
+ 'domain.created' => 'Creation Date:',
+ 'domain.changed' => 'Updated Date:',
+ 'domain.status' => 'Domain Status:',
+ 'domain.sponsor' => 'Sponsoring registrar:',
+ 'domain.nserver.' => 'Host Name:',
+ ];
+
+ $translate = [
+ 'Contact ID:' => 'handle',
+ 'Name:' => 'name',
+ 'Organisation:' => 'organization',
+ 'Street 1:' => 'address.street.0',
+ 'Street 2:' => 'address.street.1',
+ 'Street 3:' => 'address.street.2',
+ 'City:' => 'address.city',
+ 'State/Province:' => 'address.state',
+ 'Postal code:' => 'address.pcode',
+ 'Country:' => 'address.country',
+ 'Voice:' => 'phone',
+ 'Fax:' => 'fax',
+ 'Email:' => 'email',
+ ];
+
+ $blocks = AbstractHandler::getBlocks($data_str['rawdata'], $items);
+
+ $r = [
+ 'regrinfo' => [],
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.nic.coop',
+ 'registrar' => '.coop registry',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (isset($blocks['domain'])) {
+ $r['regrinfo']['domain'] = AbstractHandler::formatDates($blocks['domain'], 'dmy');
+ $r['regrinfo']['registered'] = 'yes';
+
+ if (isset($blocks['owner'])) {
+ $r['regrinfo']['owner'] = AbstractHandler::generic_parser_b($blocks['owner'], $translate, 'dmy', false);
+
+ if (isset($blocks['tech'])) {
+ $r['regrinfo']['tech'] = AbstractHandler::generic_parser_b($blocks['tech'], $translate, 'dmy', false);
+ }
+
+ if (isset($blocks['admin'])) {
+ $r['regrinfo']['admin'] = AbstractHandler::generic_parser_b($blocks['admin'], $translate, 'dmy', false);
+ }
+
+ if (isset($blocks['billing'])) {
+ $r['regrinfo']['billing'] = AbstractHandler::generic_parser_b($blocks['billing'], $translate, 'dmy', false);
+ }
+ } else {
+ $r['regrinfo']['owner'] = AbstractHandler::generic_parser_b($data_str['rawdata'], $translate, 'dmy', false);
+ }
+ } else {
+ $r['regrinfo']['registered'] = 'no';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/CzHandler.php b/src/Handlers/TLD/CzHandler.php
new file mode 100644
index 00000000..3514d038
--- /dev/null
+++ b/src/Handlers/TLD/CzHandler.php
@@ -0,0 +1,55 @@
+ 'expires',
+ 'registered' => 'created',
+ 'nserver' => 'nserver',
+ 'domain' => 'name',
+ 'contact' => 'handle',
+ 'reg-c' => '',
+ 'descr' => 'desc',
+ 'e-mail' => 'email',
+ 'person' => 'name',
+ 'org' => 'organization',
+ 'fax-no' => 'fax',
+ ];
+
+ $contacts = [
+ 'admin-c' => 'admin',
+ 'tech-c' => 'tech',
+ 'bill-c' => 'billing',
+ 'registrant' => 'owner',
+ ];
+
+ $r = [
+ 'regrinfo' => static::generic_parser_a($data_str['rawdata'], $translate, $contacts),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.nic.cz',
+ 'registrar' => 'CZ-NIC',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if ('Your connection limit exceeded. Please slow down and try again later.' === $data_str['rawdata'][0]) {
+ $r['regrinfo']['registered'] = 'unknown';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/DeHandler.php b/src/Handlers/TLD/DeHandler.php
new file mode 100644
index 00000000..7915cd31
--- /dev/null
+++ b/src/Handlers/TLD/DeHandler.php
@@ -0,0 +1,63 @@
+ 'Domain:',
+ 'domain.nserver.' => 'Nserver:',
+ 'domain.nserver.#' => 'Nsentry:',
+ 'domain.status' => 'Status:',
+ 'domain.changed' => 'Changed:',
+ 'domain.desc.' => 'Descr:',
+ 'owner' => '[Holder]',
+ 'admin' => '[Admin-C]',
+ 'tech' => '[Tech-C]',
+ 'zone' => '[Zone-C]',
+ ];
+
+ $extra = [
+ 'city:' => 'address.city',
+ 'postalcode:' => 'address.pcode',
+ 'countrycode:' => 'address.country',
+ 'remarks:' => '',
+ 'sip:' => 'sip',
+ 'type:' => '',
+ ];
+
+ $rawData = $this->removeBlankLines($data_str['rawdata']);
+
+ $r = [
+ 'rawdata' => $data_str['rawdata'],
+ 'regrinfo' => static::easyParser($rawData, $items, 'ymd', $extra),
+ 'regyinfo' => $this->parseRegistryInfo($rawData) ?? [
+ 'registrar' => 'DENIC eG',
+ 'referrer' => 'https://www.denic.de/',
+ ],
+ ];
+
+ if (!isset($r['regrinfo']['domain']['status']) || 'free' === $r['regrinfo']['domain']['status']) {
+ $r['regrinfo']['registered'] = 'no';
+ } else {
+ if (isset($r['regrinfo']['domain']['changed'])) {
+ $r['regrinfo']['domain']['changed'] = substr($r['regrinfo']['domain']['changed'], 0, 10);
+ }
+ $r['regrinfo']['registered'] = 'yes';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/DevHandler.php b/src/Handlers/TLD/DevHandler.php
new file mode 100644
index 00000000..911cbebe
--- /dev/null
+++ b/src/Handlers/TLD/DevHandler.php
@@ -0,0 +1,25 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']),
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/DkHandler.php b/src/Handlers/TLD/DkHandler.php
new file mode 100644
index 00000000..7b88aae6
--- /dev/null
+++ b/src/Handlers/TLD/DkHandler.php
@@ -0,0 +1,73 @@
+ 'name',
+ 'Address' => 'address.street',
+ 'City' => 'address.city',
+ 'Postalcode' => 'address.pcode',
+ 'Country' => 'address.country',
+ ];
+
+ $disclaimer = [];
+ $blocks = AbstractHandler::generic_parser_a_blocks($data_str['rawdata'], $translate, $disclaimer);
+
+ $reg = [];
+ if (isset($disclaimer) && is_array($disclaimer)) {
+ $reg['disclaimer'] = $disclaimer;
+ }
+
+ if (empty($blocks) || !is_array($blocks['main'])) {
+ $reg['registered'] = 'no';
+ } else {
+ $r = $blocks['main'];
+ $reg['registered'] = 'yes';
+
+ $ownerHandlePos = array_search('Registrant', $data_str['rawdata'], true) + 1;
+ $ownerHandle = trim(substr(strstr($data_str['rawdata'][$ownerHandlePos], ':'), 1));
+
+ $adminHandlePos = array_search('Administrator', $data_str['rawdata'], true) + 1;
+ $adminHandle = trim(substr(strstr($data_str['rawdata'][$adminHandlePos], ':'), 1));
+
+ $contacts = [
+ 'owner' => $ownerHandle,
+ 'admin' => $adminHandle,
+ ];
+
+ foreach ($contacts as $key => $val) {
+ $blk = strtoupper(strtok($val, ' '));
+ if (isset($blocks[$blk])) {
+ $reg[$key] = $blocks[$blk];
+ }
+ }
+
+ $reg['domain'] = $r;
+
+ static::formatDates($reg, 'Ymd');
+ }
+
+ return [
+ 'regrinfo' => $reg,
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.dk-hostmaster.dk/',
+ 'registrar' => 'DK Hostmaster',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/EduHandler.php b/src/Handlers/TLD/EduHandler.php
new file mode 100644
index 00000000..2c55d678
--- /dev/null
+++ b/src/Handlers/TLD/EduHandler.php
@@ -0,0 +1,48 @@
+ 'Domain name:',
+ 'domain.sponsor' => 'Registrar:',
+ 'domain.nserver' => 'Name Servers:',
+ 'domain.changed' => 'Domain record last updated:',
+ 'domain.created' => 'Domain record activated:',
+ 'domain.expires' => 'Domain expires:',
+ 'owner' => 'Registrant:',
+ 'admin' => 'Administrative Contact:',
+ 'tech' => 'Technical Contact:',
+ 'billing' => 'Billing Contact:',
+ ];
+
+ $rawData = $this->removeBlankLines($data_str['rawdata']);
+ $r = [
+ 'regrinfo' => static::easyParser($rawData, $items, 'dmy'),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://whois.educause.net',
+ 'registrar' => 'EDUCASE',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (!isset($r['regrinfo']['domain']['name'])) {
+ $r['regrinfo']['domain']['name'] = $query;
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/EuHandler.php b/src/Handlers/TLD/EuHandler.php
new file mode 100644
index 00000000..14093ef8
--- /dev/null
+++ b/src/Handlers/TLD/EuHandler.php
@@ -0,0 +1,74 @@
+ 'Domain:',
+ 'domain.status' => 'Status:',
+ 'domain.nserver' => 'Name servers:',
+ 'domain.created' => 'Registered:',
+ 'domain.registrar' => 'Registrar:',
+ 'tech' => 'Registrar Technical Contacts:',
+ 'owner' => 'Registrant:',
+ '' => 'Please visit',
+ ];
+
+ $extra = [
+ 'organisation:' => 'organization',
+ 'website:' => 'url',
+ ];
+
+ $r = [
+ 'regrinfo' => static::getBlocks($data_str['rawdata'], $items),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.eurid.eu',
+ 'registrar' => 'EURID',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (!empty($r['regrinfo']['domain']['status'])) {
+ switch ($r['regrinfo']['domain']['status']) {
+ case 'FREE':
+ case 'AVAILABLE':
+ $r['regrinfo']['registered'] = 'no';
+
+ break;
+
+ case 'APPLICATION PENDING':
+ $r['regrinfo']['registered'] = 'pending';
+
+ break;
+
+ default:
+ $r['regrinfo']['registered'] = 'unknown';
+ }
+ } else {
+ $r['regrinfo']['registered'] = 'yes';
+ }
+
+ if (isset($r['regrinfo']['tech'])) {
+ $r['regrinfo']['tech'] = static::getContact($r['regrinfo']['tech'], $extra);
+ }
+
+ if (isset($r['regrinfo']['domain']['registrar'])) {
+ $r['regrinfo']['domain']['registrar'] = static::getContact($r['regrinfo']['domain']['registrar'], $extra);
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/FiHandler.php b/src/Handlers/TLD/FiHandler.php
new file mode 100644
index 00000000..b3e43d69
--- /dev/null
+++ b/src/Handlers/TLD/FiHandler.php
@@ -0,0 +1,41 @@
+ 'domain.name',
+ 'created............:' => 'domain.created',
+ 'modified...........:' => 'domain.changed',
+ 'expires............:' => 'domain.expires',
+ 'status.............:' => 'domain.status',
+ 'nserver............:' => 'domain.nserver.',
+ 'name...............:' => 'owner.name.',
+ 'address............:' => 'owner.address.',
+ 'country............:' => 'owner.country',
+ 'phone..............:' => 'owner.phone',
+ ];
+
+ return [
+ 'regrinfo' => static::generic_parser_b($data_str['rawdata'], $items, 'dmy'),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://domain.ficora.fi/',
+ 'registrar' => 'Finnish Communications Regulatory Authority',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/FjHandler.php b/src/Handlers/TLD/FjHandler.php
new file mode 100644
index 00000000..f9a73215
--- /dev/null
+++ b/src/Handlers/TLD/FjHandler.php
@@ -0,0 +1,55 @@
+ 'Registrant:',
+ 'domain.name' => 'Domain name:',
+ 'domain.status' => 'Status:',
+ 'domain.expires' => 'Expires:',
+ 'domain.nserver' => 'Domain servers:',
+ ];
+
+ $r = [
+ 'regrinfo' => static::getBlocks($data_str['rawdata'], $items),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.domains.fj',
+ 'registrar' => 'FJ Domain Name Registry',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (!empty($r['regrinfo']['domain']['status'])) {
+ $r['regrinfo'] = static::getContacts($r['regrinfo']);
+
+ date_default_timezone_set('Pacific/Fiji');
+
+ if (isset($r['regrinfo']['domain']['expires'])) {
+ $r['regrinfo']['domain']['expires'] = strftime(
+ '%Y-%m-%d',
+ strtotime($r['regrinfo']['domain']['expires'])
+ );
+ }
+
+ $r['regrinfo']['registered'] = 'yes';
+ } else {
+ $r['regrinfo']['registered'] = 'no';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/FmHandler.php b/src/Handlers/TLD/FmHandler.php
new file mode 100644
index 00000000..aada3c57
--- /dev/null
+++ b/src/Handlers/TLD/FmHandler.php
@@ -0,0 +1,34 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'registrar' => 'dotFM',
+ 'referrer' => 'https://www.dot.dm',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (!isset($r['regrinfo']['domain']['name'])) {
+ $r['regrinfo']['registered'] = 'no';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/FrHandler.php b/src/Handlers/TLD/FrHandler.php
new file mode 100644
index 00000000..aa10c6ff
--- /dev/null
+++ b/src/Handlers/TLD/FrHandler.php
@@ -0,0 +1,72 @@
+ 'fax',
+ 'e-mail' => 'email',
+ 'nic-hdl' => 'handle',
+ 'ns-list' => 'handle',
+ 'person' => 'name',
+ 'address' => 'address.',
+ 'descr' => 'desc',
+ 'anniversary' => '',
+ 'domain' => 'name',
+ 'last-update' => 'changed',
+ 'registered' => 'created',
+ 'Expiry Date' => 'expires',
+ 'country' => 'address.country',
+ 'registrar' => 'sponsor',
+ 'role' => 'organization',
+ ];
+
+ $contacts = [
+ 'admin-c' => 'admin',
+ 'tech-c' => 'tech',
+ 'zone-c' => 'zone',
+ 'holder-c' => 'owner',
+ 'nsl-id' => 'nserver',
+ ];
+
+ $reg = static::generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'dmY');
+
+ if (isset($reg['nserver'])) {
+ $reg['domain'] = array_merge($reg['domain'], $reg['nserver']);
+ unset($reg['nserver']);
+ }
+
+ return [
+ 'regrinfo' => $reg,
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.nic.fr',
+ 'registrar' => 'AFNIC',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+
+ public static function generic_parser_a_blocks(array $rawdata, array $translate, array &$disclaimer = []): array
+ {
+ $blocks = parent::generic_parser_a_blocks($rawdata, $translate, $disclaimer);
+
+ array_walk_recursive($blocks, static function (&$v, $key) {
+ if (!in_array($key, ['expires', 'created', 'changed'])) {
+ return;
+ }
+
+ $matches = [];
+ $pattern = '/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z/';
+ if (preg_match($pattern, $v, $matches)) {
+ $v = $matches[0];
+ }
+ });
+
+ return $blocks;
+ }
+}
diff --git a/src/Handlers/TLD/HuHandler.php b/src/Handlers/TLD/HuHandler.php
new file mode 100644
index 00000000..c76c5108
--- /dev/null
+++ b/src/Handlers/TLD/HuHandler.php
@@ -0,0 +1,43 @@
+ 'domain.name',
+ 'record created:' => 'domain.created',
+ ];
+
+ $r = [
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ $r['regrinfo'] = static::generic_parser_b($data_str['rawdata'], $items, 'ymd');
+
+ if (isset($r['regrinfo']['domain'])) {
+ $r['regrinfo']['registered'] = 'yes';
+ } else {
+ $r['regrinfo']['registered'] = 'no';
+ }
+
+ $r['regyinfo'] = [
+ 'referrer' => 'http://www.nic.hu',
+ 'registrar' => 'HUNIC',
+ ];
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/IeHandler.php b/src/Handlers/TLD/IeHandler.php
new file mode 100644
index 00000000..22f36fce
--- /dev/null
+++ b/src/Handlers/TLD/IeHandler.php
@@ -0,0 +1,48 @@
+ 'domain.name',
+ 'Registration Date:' => 'domain.created',
+ 'Renewal Date:' => 'domain.expires',
+ 'Nserver:' => 'domain.nserver.',
+ 'Admin-c:' => 'admin.handle',
+ 'Tech-c:' => 'tech.handle',
+ 'Domain Holder:' => 'owner.name',
+ ];
+
+ $reg = static::generic_parser_b($data_str['rawdata'], $items);
+
+ if (isset($reg['domain']['descr'])) {
+ $reg['owner']['organization'] = $reg['domain']['descr'][0];
+ unset($reg['domain']['descr']);
+ }
+
+ $r = [
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ $r['regrinfo'] = $reg;
+ $r['regyinfo'] = [
+ 'referrer' => 'http://www.domainregistry.ie',
+ 'registrar' => 'IE Domain Registry',
+ ];
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/IlHandler.php b/src/Handlers/TLD/IlHandler.php
new file mode 100644
index 00000000..6cf7adf5
--- /dev/null
+++ b/src/Handlers/TLD/IlHandler.php
@@ -0,0 +1,92 @@
+ [],
+ 'regyinfo' => [
+ 'referrer' => 'https://www.isoc.org.il/',
+ 'registrar' => 'ISOC-IL',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ $translate = [
+ 'fax-no' => 'fax',
+ 'e-mail' => 'email',
+ 'nic-hdl' => 'handle',
+ 'person' => 'name',
+ 'personname' => 'name',
+ 'address' => 'address',
+ ];
+
+ $contacts = [
+ 'registrant' => 'owner',
+ 'admin-c' => 'admin',
+ 'tech-c' => 'tech',
+ 'billing-c' => 'billing',
+ 'zone-c' => 'zone',
+ ];
+
+ array_splice($data_str['rawdata'], 16, 1);
+ array_splice($data_str['rawdata'], 18, 1);
+
+ $reg = static::generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
+
+ if ($reg['disclaimer']) {
+ unset($reg['disclaimer']);
+ }
+
+ if (isset($reg['domain']['remarks'])) {
+ unset($reg['domain']['remarks']);
+ }
+
+ if (isset($reg['domain']['descr:'])) {
+ foreach ($reg['domain']['descr:'] as $key => $val) {
+ $v = trim(substr(strstr($val, ':'), 1));
+ if (strpos($val, '[organization]:') !== false) {
+ $reg['owner']['organization'] = $v;
+
+ continue;
+ }
+ if (strpos($val, '[phone]:') !== false) {
+ $reg['owner']['phone'] = $v;
+
+ continue;
+ }
+ if (strpos($val, '[fax-no]:') !== false) {
+ $reg['owner']['fax'] = $v;
+
+ continue;
+ }
+ if (strpos($val, '[e-mail]:') !== false) {
+ $reg['owner']['email'] = $v;
+
+ continue;
+ }
+
+ $reg['owner']['address'][$key] = $v;
+ }
+
+ unset($reg['domain']['descr:']);
+ }
+
+ $r['regrinfo'] = $reg;
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/InHandler.php b/src/Handlers/TLD/InHandler.php
new file mode 100644
index 00000000..e371cf9f
--- /dev/null
+++ b/src/Handlers/TLD/InHandler.php
@@ -0,0 +1,28 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://whois.registry.in',
+ 'registrar' => 'INRegistry',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/InfoHandler.php b/src/Handlers/TLD/InfoHandler.php
new file mode 100644
index 00000000..3f651ff8
--- /dev/null
+++ b/src/Handlers/TLD/InfoHandler.php
@@ -0,0 +1,27 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => [
+ 'referrer' => 'https://whois.afilias.info',
+ 'registrar' => 'Afilias Global Registry Services',
+ ],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/IntHandler.php b/src/Handlers/TLD/IntHandler.php
new file mode 100644
index 00000000..c423996e
--- /dev/null
+++ b/src/Handlers/TLD/IntHandler.php
@@ -0,0 +1,27 @@
+parse($data_str['rawdata'], $query);
+ $r['regyinfo']['referrer'] = 'http://www.iana.org/int-dom/int.htm';
+ $r['regyinfo']['registrar'] = 'Internet Assigned Numbers Authority';
+
+ return $r;
+ }
+}
diff --git a/src/whois.ip.php b/src/Handlers/TLD/IpHandler.php
similarity index 57%
rename from src/whois.ip.php
rename to src/Handlers/TLD/IpHandler.php
index 125f2e0f..d06cc41b 100644
--- a/src/whois.ip.php
+++ b/src/Handlers/TLD/IpHandler.php
@@ -1,121 +1,119 @@
'whois.ripe.net',
'RIPE Network Coordination Centre' => 'whois.ripe.net',
'Asia Pacific Network Information Center' => 'whois.apnic.net',
'Asia Pacific Network Information Centre' => 'whois.apnic.net',
'Latin American and Caribbean IP address Regional Registry' => 'whois.lacnic.net',
- 'African Network Information Center' => 'whois.afrinic.net'
- );
- public $HANDLERS = array(
- 'whois.krnic.net' => 'krnic',
- 'whois.apnic.net' => 'apnic',
- 'whois.ripe.net' => 'ripe',
- 'whois.arin.net' => 'arin',
- 'whois.lacnic.net' => 'lacnic',
- 'whois.afrinic.net' => 'afrinic'
- );
- public $more_data = array(); // More queries to get more accurated data
- public $done = array();
-
- public function parse($data, $query) {
- $result = array(
- 'regrinfo' => array(),
- 'regyinfo' => array(),
- 'rawdata' => array(),
- );
+ 'African Network Information Center' => 'whois.afrinic.net',
+ ];
+ public $HANDLERS = [
+ 'whois.krnic.net' => KrnicHandler::class,
+ 'whois.apnic.net' => ApnicHandler::class,
+ 'whois.ripe.net' => RipeHandler::class,
+ 'whois.arin.net' => ArinHandler::class,
+ 'whois.lacnic.net' => LacnicHandler::class,
+ 'whois.afrinic.net' => AfrinicHandler::class,
+ ];
+ public $more_data = []; // More queries to get more accurated data
+ public $done = [];
+
+ public function parse($data, $query)
+ {
+ $result = [
+ 'regrinfo' => [],
+ 'regyinfo' => [],
+ 'rawdata' => [],
+ ];
$result['regyinfo']['registrar'] = 'American Registry for Internet Numbers (ARIN)';
- if (strpos($query, '.') === false)
+ if (strpos($query, '.') === false) {
$result['regyinfo']['type'] = 'AS';
- else
+ } else {
$result['regyinfo']['type'] = 'ip';
+ }
- if (!$this->deepWhois)
+ if (!$this->deepWhois) {
return null;
+ }
- $this->query = array();
+ $this->query = [];
$this->query['server'] = 'whois.arin.net';
$this->query['query'] = $query;
$rawdata = $data['rawdata'];
- if (empty($rawdata))
+ if (empty($rawdata)) {
return $result;
+ }
- $presults = array();
+ $presults = [];
$presults[] = $rawdata;
$ip = ip2long($query);
- $done = array();
+ $done = [];
while (count($presults) > 0) {
$rwdata = array_shift($presults);
$found = false;
foreach ($rwdata as $line) {
- if (!strncmp($line, 'American Registry for Internet Numbers', 38))
+ if (!strncmp($line, 'American Registry for Internet Numbers', 38)) {
continue;
+ }
$p = strpos($line, '(NETBLK-');
- if ($p === false)
+ if ($p === false) {
$p = strpos($line, '(NET-');
+ }
if ($p !== false) {
$net = strtok(substr($line, $p + 1), ') ');
- list($low, $high) = explode('-', str_replace(' ', '', substr($line, $p + strlen($net) + 3)));
+ $clearedLine = str_replace(' ', '', substr($line, $p + strlen($net) + 3));
+ if ('' !== $clearedLine) {
+ [$low, $high] = explode('-', str_replace(' ', '', substr($line, $p + strlen($net) + 3)));
- if (!isset($done[$net]) && $ip >= ip2long($low) && $ip <= ip2long($high)) {
- $owner = substr($line, 0, $p - 1);
+ if (!isset($done[$net]) && $ip >= ip2long($low) && $ip <= ip2long($high)) {
+ if (!empty($this->REGISTRARS['owner'])) {
+ $this->handle_rwhois($this->REGISTRARS['owner'], $query);
- if (!empty($this->REGISTRARS['owner'])) {
- $this->handle_rwhois($this->REGISTRARS['owner'], $query);
- break 2;
- } else {
- $this->query['args'] = 'n ' . $net;
+ break 2;
+ }
+
+ $this->query['args'] = 'n '.$net;
$presults[] = $this->getRawData($net);
$done[$net] = 1;
}
+ $found = true;
}
- $found = true;
}
}
if (!$found) {
- $this->query['file'] = 'whois.ip.arin.php';
- $this->query['handler'] = 'arin';
+ $this->query['handler'] = ArinHandler::class;
$result = $this->parse_results($result, $rwdata, $query, true);
}
}
@@ -132,38 +130,33 @@ public function parse($data, $query) {
if (!empty($rwdata)) {
if (!empty($srv_data['handler'])) {
$this->query['handler'] = $srv_data['handler'];
-
- if (!empty($srv_data['file']))
- $this->query['file'] = $srv_data['file'];
- else
- $this->query['file'] = 'whois.' . $this->query['handler'] . '.php';
}
$result = $this->parse_results($result, $rwdata, $query, $srv_data['reset']);
$result = $this->setWhoisInfo($result);
- $reset = false;
}
}
-
// Normalize nameserver fields
if (isset($result['regrinfo']['network']['nserver'])) {
if (!is_array($result['regrinfo']['network']['nserver'])) {
unset($result['regrinfo']['network']['nserver']);
- } else
+ } else {
$result['regrinfo']['network']['nserver'] = $this->fixNameServer($result['regrinfo']['network']['nserver']);
+ }
}
return $result;
}
- //-----------------------------------------------------------------
+ // -----------------------------------------------------------------
- public function parse_results($result, $rwdata, $query, $reset) {
+ public function parse_results($result, $rwdata, $query, $reset)
+ {
$rwres = $this->process($rwdata);
- if ($result['regyinfo']['type'] == 'AS' && !empty($rwres['regrinfo']['network'])) {
+ if ('AS' === $result['regyinfo']['type'] && !empty($rwres['regrinfo']['network'])) {
$rwres['regrinfo']['AS'] = $rwres['regrinfo']['network'];
unset($rwres['regrinfo']['network']);
}
@@ -174,10 +167,11 @@ public function parse_results($result, $rwdata, $query, $reset) {
} else {
$result['rawdata'][] = '';
- foreach ($rwdata as $line)
+ foreach ($rwdata as $line) {
$result['rawdata'][] = $line;
+ }
- foreach ($rwres['regrinfo'] as $key => $data) {
+ foreach ($rwres['regrinfo'] as $key => $_) {
$result = $this->join_result($result, $key, $rwres);
}
}
@@ -186,69 +180,74 @@ public function parse_results($result, $rwdata, $query, $reset) {
if (isset($rwres['regrinfo']['rwhois'])) {
$this->handle_rwhois($rwres['regrinfo']['rwhois'], $query);
unset($result['regrinfo']['rwhois']);
- } else
- if (!@empty($rwres['regrinfo']['owner']['organization']))
+ } elseif (!@empty($rwres['regrinfo']['owner']['organization'])) {
switch ($rwres['regrinfo']['owner']['organization']) {
case 'KRNIC':
$this->handle_rwhois('whois.krnic.net', $query);
+
break;
case 'African Network Information Center':
$this->handle_rwhois('whois.afrinic.net', $query);
+
break;
}
+ }
}
- if (!empty($rwres['regyinfo']))
+ if (!empty($rwres['regyinfo'])) {
$result['regyinfo'] = array_merge($result['regyinfo'], $rwres['regyinfo']);
+ }
return $result;
}
- //-----------------------------------------------------------------
+ // -----------------------------------------------------------------
- public function handle_rwhois($server, $query) {
+ public function handle_rwhois($server, $query)
+ {
// Avoid querying the same server twice
$parts = parse_url($server);
- if (empty($parts['host']))
+ if (empty($parts['host'])) {
$host = $parts['path'];
- else
+ } else {
$host = $parts['host'];
+ }
- if (array_key_exists($host, $this->done))
+ if (array_key_exists($host, $this->done)) {
return;
+ }
- $q = array(
+ $q = [
'query' => $query,
- 'server' => $server
- );
+ 'server' => $server,
+ ];
if (isset($this->HANDLERS[$host])) {
$q['handler'] = $this->HANDLERS[$host];
- $q['file'] = sprintf('whois.ip.%s.php', $q['handler']);
$q['reset'] = true;
} else {
$q['handler'] = 'rwhois';
$q['reset'] = false;
- unset($q['file']);
}
$this->more_data[] = $q;
$this->done[$host] = 1;
}
- //-----------------------------------------------------------------
+ // -----------------------------------------------------------------
- public function join_result($result, $key, $newres) {
+ public function join_result($result, $key, $newres)
+ {
if (isset($result['regrinfo'][$key]) && !array_key_exists(0, $result['regrinfo'][$key])) {
$r = $result['regrinfo'][$key];
- $result['regrinfo'][$key] = array($r);
+ $result['regrinfo'][$key] = [$r];
}
$result['regrinfo'][$key][] = $newres['regrinfo'][$key];
+
return $result;
}
-
}
diff --git a/src/Handlers/TLD/IrHandler.php b/src/Handlers/TLD/IrHandler.php
new file mode 100644
index 00000000..175334b3
--- /dev/null
+++ b/src/Handlers/TLD/IrHandler.php
@@ -0,0 +1,43 @@
+ 'handle',
+ 'org' => 'organization',
+ 'e-mail' => 'email',
+ 'person' => 'name',
+ 'fax-no' => 'fax',
+ 'domain' => 'name',
+ ];
+
+ $contacts = [
+ 'admin-c' => 'admin',
+ 'tech-c' => 'tech',
+ 'holder-c' => 'owner',
+ ];
+
+ return [
+ 'regrinfo' => static::generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd'),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'http://whois.nic.ir/',
+ 'registrar' => 'NIC-IR',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/IsHandler.php b/src/Handlers/TLD/IsHandler.php
new file mode 100644
index 00000000..23944304
--- /dev/null
+++ b/src/Handlers/TLD/IsHandler.php
@@ -0,0 +1,50 @@
+ 'fax',
+ 'e-mail' => 'email',
+ 'nic-hdl' => 'handle',
+ 'person' => 'name',
+ ];
+
+ $contacts = [
+ 'owner-c' => 'owner',
+ 'admin-c' => 'admin',
+ 'tech-c' => 'tech',
+ 'billing-c' => 'billing',
+ 'zone-c' => 'zone',
+ ];
+
+ $reg = static::generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'mdy');
+
+ if (isset($reg['domain']['descr'])) {
+ $reg['owner']['name'] = array_shift($reg['domain']['descr']);
+ $reg['owner']['address'] = $reg['domain']['descr'];
+ unset($reg['domain']['descr']);
+ }
+
+ return [
+ 'regrinfo' => $reg,
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.isnic.is',
+ 'registrar' => 'ISNIC',
+ ],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/ItHandler.php b/src/Handlers/TLD/ItHandler.php
new file mode 100644
index 00000000..ee7db6d8
--- /dev/null
+++ b/src/Handlers/TLD/ItHandler.php
@@ -0,0 +1,60 @@
+ array
+ * - ContactID in address
+ */
+class ItHandler extends AbstractHandler
+{
+ public function parse(array $data_str, string $query): array
+ {
+ $items = [
+ 'domain.name' => 'Domain:',
+ 'domain.nserver' => 'Nameservers',
+ 'domain.status' => 'Status:',
+ 'domain.expires' => 'Expire Date:',
+ 'owner' => 'Registrant',
+ 'admin' => 'Admin Contact',
+ 'tech' => 'Technical Contacts',
+ 'registrar' => 'Registrar',
+ ];
+
+ $extra = [
+ 'address:' => 'address.',
+ 'contactid:' => 'handle',
+ 'organization:' => 'organization',
+ 'created:' => 'created',
+ 'last update:' => 'changed',
+ 'web:' => 'web',
+ ];
+
+ $r = [
+ 'regrinfo' => static::easyParser($data_str['rawdata'], $items, 'ymd', $extra),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'registrar' => 'IT-Nic',
+ 'referrer' => 'https://www.nic.it/',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (isset($r['regrinfo']['registrar'])) {
+ $r['regrinfo']['domain']['registrar'] = $r['regrinfo']['registrar'];
+ unset($r['regrinfo']['registrar']);
+ }
+
+ return $r;
+ }
+}
diff --git a/src/whois.jp.php b/src/Handlers/TLD/JpHandler.php
similarity index 51%
rename from src/whois.jp.php
rename to src/Handlers/TLD/JpHandler.php
index 13cc2434..3cd2661f 100644
--- a/src/whois.jp.php
+++ b/src/Handlers/TLD/JpHandler.php
@@ -1,38 +1,23 @@
'domain.status',
'[Status]' => 'domain.status',
'[Registered Date]' => 'domain.created',
@@ -49,58 +34,60 @@ function parse($data_str, $query) {
'[Fax]' => 'owner.fax',
'[Administrative Contact]' => 'admin.handle',
'[Technical Contact]' => 'tech.handle',
- '[Name Server]' => 'domain.nserver.'
- );
+ '[Name Server]' => 'domain.nserver.',
+ ];
- $r = array();
- $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'ymd');
+ $r = [];
+ $r['regrinfo'] = AbstractHandler::generic_parser_b($data_str['rawdata'], $items, 'ymd');
- $r['regyinfo'] = array(
+ $r['regyinfo'] = [
'referrer' => 'http://www.jprs.jp',
- 'registrar' => 'Japan Registry Services'
- );
+ 'registrar' => 'Japan Registry Services',
+ ];
- if (!$this->deepWhois)
+ if (!$this->deepWhois) {
return $r;
+ }
$r['rawdata'] = $data_str['rawdata'];
- $items = array(
+ $items = [
'a. [JPNIC Handle]' => 'handle',
'c. [Last, First]' => 'name',
'd. [E-Mail]' => 'email',
'g. [Organization]' => 'organization',
'o. [TEL]' => 'phone',
'p. [FAX]' => 'fax',
- '[Last Update]' => 'changed'
- );
+ '[Last Update]' => 'changed',
+ ];
$this->query['server'] = 'jp.whois-servers.net';
if (!empty($r['regrinfo']['admin']['handle'])) {
- $rwdata = $this->getRawData('CONTACT ' . $r['regrinfo']['admin']['handle'] . '/e');
+ $rwdata = $this->getRawData('CONTACT '.$r['regrinfo']['admin']['handle'].'/e');
$r['rawdata'][] = '';
$r['rawdata'] = array_merge($r['rawdata'], $rwdata);
- $r['regrinfo']['admin'] = generic_parser_b($rwdata, $items, 'ymd', false);
+ $r['regrinfo']['admin'] = AbstractHandler::generic_parser_b($rwdata, $items, 'ymd', false);
$r = $this->setWhoisInfo($r);
}
if (!empty($r['regrinfo']['tech']['handle'])) {
- if (!empty($r['regrinfo']['admin']['handle']) &&
- $r['regrinfo']['admin']['handle'] == $r['regrinfo']['tech']['handle']) {
+ if (
+ !empty($r['regrinfo']['admin']['handle'])
+ && $r['regrinfo']['admin']['handle'] == $r['regrinfo']['tech']['handle']
+ ) {
$r['regrinfo']['tech'] = $r['regrinfo']['admin'];
} else {
unset($this->query);
$this->query['server'] = 'jp.whois-servers.net';
- $rwdata = $this->getRawData('CONTACT ' . $r['regrinfo']['tech']['handle'] . '/e');
+ $rwdata = $this->getRawData('CONTACT '.$r['regrinfo']['tech']['handle'].'/e');
$r['rawdata'][] = '';
$r['rawdata'] = array_merge($r['rawdata'], $rwdata);
- $r['regrinfo']['tech'] = generic_parser_b($rwdata, $items, 'ymd', false);
+ $r['regrinfo']['tech'] = AbstractHandler::generic_parser_b($rwdata, $items, 'ymd', false);
$r = $this->setWhoisInfo($r);
}
}
return $r;
}
-
}
diff --git a/src/Handlers/TLD/KiwiHandler.php b/src/Handlers/TLD/KiwiHandler.php
new file mode 100644
index 00000000..fa3a6fbc
--- /dev/null
+++ b/src/Handlers/TLD/KiwiHandler.php
@@ -0,0 +1,21 @@
+parseRegistryInfo($data_str['rawdata']);
+
+ return $data_str;
+ }
+}
diff --git a/src/Handlers/TLD/LondonHandler.php b/src/Handlers/TLD/LondonHandler.php
new file mode 100644
index 00000000..a30c4c92
--- /dev/null
+++ b/src/Handlers/TLD/LondonHandler.php
@@ -0,0 +1,31 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (!isset($r['regrinfo']['domain']['name'])) {
+ $r['regrinfo']['domain']['name'] = $query;
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/LtHandler.php b/src/Handlers/TLD/LtHandler.php
new file mode 100644
index 00000000..bfc265c8
--- /dev/null
+++ b/src/Handlers/TLD/LtHandler.php
@@ -0,0 +1,45 @@
+ 'handle',
+ 'contact name:' => 'name',
+ ];
+
+ $items = [
+ 'admin' => 'Contact type: Admin',
+ 'tech' => 'Contact type: Tech',
+ 'zone' => 'Contact type: Zone',
+ 'owner.name' => 'Registrar:',
+ 'owner.email' => 'Registrar email:',
+ 'domain.status' => 'Status:',
+ 'domain.created' => 'Registered:',
+ 'domain.changed' => 'Last updated:',
+ 'domain.nserver.' => 'NS:',
+ '' => '%',
+ ];
+
+ return [
+ 'regrinfo' => static::easyParser($data_str['rawdata'], $items, 'ymd', $translate),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'registrar' => 'DOMREG.LT',
+ 'referrer' => 'https://www.domreg.lt',
+ ],
+ ];
+ }
+}
diff --git a/src/whois.lu.php b/src/Handlers/TLD/LuHandler.php
similarity index 53%
rename from src/whois.lu.php
rename to src/Handlers/TLD/LuHandler.php
index 5caa03e2..cff5e91e 100644
--- a/src/whois.lu.php
+++ b/src/Handlers/TLD/LuHandler.php
@@ -1,36 +1,22 @@
'domain.name',
'domaintype:' => 'domain.status',
'nserver:' => 'domain.nserver.',
@@ -59,17 +45,16 @@ function parse($data_str, $query) {
'bil-zipcode:' => 'billing.address.pcode',
'bil-city:' => 'billing.address.city',
'bil-country:' => 'billing.address.country',
- 'bil-email:' => 'billing.email'
- );
+ 'bil-email:' => 'billing.email',
+ ];
- $r = array();
- $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'dmy');
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.dns.lu',
- 'registrar' => 'DNS-LU'
- );
- return $r;
+ return [
+ 'regrinfo' => static::generic_parser_b($data_str['rawdata'], $items, 'dmy'),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.dns.lu',
+ 'registrar' => 'DNS-LU',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
}
-
}
diff --git a/src/Handlers/TLD/LyHandler.php b/src/Handlers/TLD/LyHandler.php
new file mode 100644
index 00000000..171a823c
--- /dev/null
+++ b/src/Handlers/TLD/LyHandler.php
@@ -0,0 +1,52 @@
+ 'Registrant:',
+ 'admin' => 'Administrative Contact:',
+ 'tech' => 'Technical Contact:',
+ 'domain.name' => 'Domain Name:',
+ 'domain.status' => 'Domain Status:',
+ 'domain.created' => 'Created:',
+ 'domain.changed' => 'Updated:',
+ 'domain.expires' => 'Expired:',
+ 'domain.nserver' => 'Domain servers in listed order:',
+ ];
+
+ $extra = ['zip/postal code:' => 'address.pcode'];
+
+ $r = [
+ 'regrinfo' => static::getBlocks($data_str['rawdata'], $items),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.nic.ly',
+ 'registrar' => 'Libya ccTLD',
+ ],
+ ];
+
+ if (!empty($r['regrinfo']['domain']['name'])) {
+ $r['regrinfo'] = static::getContacts($r['regrinfo'], $extra);
+ $r['regrinfo']['domain']['name'] = $r['regrinfo']['domain']['name'][0];
+ $r['regrinfo']['registered'] = 'yes';
+ } else {
+ $r = ['regrinfo' => []];
+ $r['regrinfo']['registered'] = 'no';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/MeHandler.php b/src/Handlers/TLD/MeHandler.php
new file mode 100644
index 00000000..f47e30b1
--- /dev/null
+++ b/src/Handlers/TLD/MeHandler.php
@@ -0,0 +1,28 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://domain.me',
+ 'registrar' => 'doMEn',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/MobiHandler.php b/src/Handlers/TLD/MobiHandler.php
new file mode 100644
index 00000000..ea51832d
--- /dev/null
+++ b/src/Handlers/TLD/MobiHandler.php
@@ -0,0 +1,34 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.mtld.mobi/',
+ 'registrar' => 'Dot Mobi Registry',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (!strncmp($data_str['rawdata'][0], 'WHOIS LIMIT EXCEEDED', 20)) {
+ $r['regrinfo']['registered'] = 'unknown';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/MuseumHandler.php b/src/Handlers/TLD/MuseumHandler.php
new file mode 100644
index 00000000..243c64d1
--- /dev/null
+++ b/src/Handlers/TLD/MuseumHandler.php
@@ -0,0 +1,28 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://musedoma.museum',
+ 'registrar' => 'Museum Domain Management Association',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/MxHandler.php b/src/Handlers/TLD/MxHandler.php
new file mode 100644
index 00000000..109d379f
--- /dev/null
+++ b/src/Handlers/TLD/MxHandler.php
@@ -0,0 +1,54 @@
+ 'Registrant:',
+ 'admin' => 'Administrative Contact:',
+ 'tech' => 'Technical Contact:',
+ 'billing' => 'Billing Contact:',
+ 'domain.nserver' => 'Name Servers:',
+ 'domain.created' => 'Created On:',
+ 'domain.expires' => 'Expiration Date:',
+ 'domain.changed' => 'Last Updated On:',
+ 'domain.sponsor' => 'Registrar:',
+ ];
+
+ $extra = [
+ 'city:' => 'address.city',
+ 'state:' => 'address.state',
+ 'dns:' => '0',
+ ];
+
+ $r = [
+ 'regrinfo' => static::easyParser($data_str['rawdata'], $items, 'dmy', $extra),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'registrar' => 'NIC Mexico',
+ 'referrer' => 'https://www.nic.mx/',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (empty($r['regrinfo']['domain']['created'])) {
+ $r['regrinfo']['registered'] = 'no';
+ } else {
+ $r['regrinfo']['registered'] = 'yes';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/NameHandler.php b/src/Handlers/TLD/NameHandler.php
new file mode 100644
index 00000000..bee67a3b
--- /dev/null
+++ b/src/Handlers/TLD/NameHandler.php
@@ -0,0 +1,27 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => [
+ 'referrer' => 'https://www.nic.name/',
+ 'registrar' => 'Global Name Registry',
+ ],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/NlHandler.php b/src/Handlers/TLD/NlHandler.php
new file mode 100644
index 00000000..a8e7d95a
--- /dev/null
+++ b/src/Handlers/TLD/NlHandler.php
@@ -0,0 +1,79 @@
+ 'Domain name:',
+ 'domain.status' => 'Status:',
+ 'domain.nserver' => 'Domain nameservers:',
+ 'domain.created' => 'Date registered:',
+ 'domain.changed' => 'Record last updated:',
+ 'domain.sponsor' => 'Registrar:',
+ 'admin' => 'Administrative contact:',
+ 'tech' => 'Technical contact(s):',
+ ];
+
+ $r = [
+ 'regrinfo' => static::getBlocks($data_str['rawdata'], $items),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.domain-registry.nl',
+ 'registrar' => 'Stichting Internet Domeinregistratie NL',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (!isset($r['regrinfo']['domain']['status'])) {
+ $r['regrinfo']['registered'] = 'no';
+
+ return $r;
+ }
+
+ if (isset($r['regrinfo']['tech'])) {
+ $r['regrinfo']['tech'] = static::getContact($r['regrinfo']['tech']);
+ }
+
+ if (isset($r['regrinfo']['zone'])) {
+ $r['regrinfo']['zone'] = static::getContact($r['regrinfo']['zone']);
+ }
+
+ if (isset($r['regrinfo']['admin'])) {
+ $r['regrinfo']['admin'] = static::getContact($r['regrinfo']['admin']);
+ }
+
+ if (isset($r['regrinfo']['owner'])) {
+ $r['regrinfo']['owner'] = static::getContact($r['regrinfo']['owner']);
+ }
+
+ $r['regrinfo']['registered'] = 'yes';
+
+ static::formatDates($r, 'dmy');
+
+ return $r;
+ }
+
+ public static function getContact($array, $extra_items = [], $has_org = false): array
+ {
+ $r = parent::getContact($array, $extra_items, $has_org);
+
+ if (isset($r['name']) && preg_match('/^[A-Z0-9]+-[A-Z0-9]+$/', $r['name'])) {
+ $r['handle'] = $r['name'];
+ $r['name'] = array_shift($r['address']);
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/NoHandler.php b/src/Handlers/TLD/NoHandler.php
new file mode 100644
index 00000000..5cffa4c6
--- /dev/null
+++ b/src/Handlers/TLD/NoHandler.php
@@ -0,0 +1,39 @@
+ 'domain.name',
+ 'Created:' => 'domain.created',
+ 'Last updated:' => 'domain.changed',
+ 'NORID Handle...............:' => 'domain.handle',
+ ];
+
+ $r = [
+ 'regrinfo' => static::generic_parser_b($data_str['rawdata'], $items, 'ymd', false),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.norid.no/en/',
+ 'registrar' => 'Norid',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ $r['regrinfo']['registered'] = isset($r['regrinfo']['domain']['name']) ? 'yes' : 'no';
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/NuHandler.php b/src/Handlers/TLD/NuHandler.php
new file mode 100644
index 00000000..2b2344ee
--- /dev/null
+++ b/src/Handlers/TLD/NuHandler.php
@@ -0,0 +1,74 @@
+ 'Domain Name (UTF-8):',
+ 'created' => 'Record created on',
+ 'expires' => 'Record expires on',
+ 'changed' => 'Record last updated on',
+ 'status' => 'Record status:',
+ 'handle' => 'Record ID:',
+ ];
+
+ $r = [
+ 'regrinfo' => [],
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'whois' => 'whois.nic.nu',
+ 'referrer' => 'http://www.nunames.nu',
+ 'registrar' => '.NU Domain, Ltd',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ foreach ($data_str['rawdata'] as $val) {
+ $val = trim($val);
+
+ if ('' !== $val) {
+ if ('Domain servers in listed order:' === $val) {
+ foreach ($data_str['rawdata'] as $val2) {
+ $val2 = trim($val2);
+ if ('' === $val2) {
+ break;
+ }
+ $r['regrinfo']['domain']['nserver'][] = $val2;
+ }
+
+ break;
+ }
+
+ foreach ($items as $field => $match) {
+ if (strpos($val, $match) !== false) {
+ $r['regrinfo']['domain'][$field] = trim(substr($val, strlen($match)));
+
+ break;
+ }
+ }
+ }
+ }
+
+ if (isset($r['regrinfo']['domain'])) {
+ $r['regrinfo']['registered'] = 'yes';
+ } else {
+ $r['regrinfo']['registered'] = 'no';
+ }
+
+ static::formatDates($r, 'dmy');
+
+ return $r;
+ }
+}
diff --git a/src/whois.nz.php b/src/Handlers/TLD/NzHandler.php
similarity index 58%
rename from src/whois.nz.php
rename to src/Handlers/TLD/NzHandler.php
index 3f200a37..37fc17da 100644
--- a/src/whois.nz.php
+++ b/src/Handlers/TLD/NzHandler.php
@@ -1,36 +1,14 @@
'domain.name',
'query_status:' => 'domain.status',
'ns_name_01:' => 'domain.nserver.0',
@@ -62,38 +40,63 @@ function parse($data_str, $query) {
'admin_contact_fax:' => 'admin.fax',
'admin_contact_email:' => 'admin.email',
'technical_contact_name:' => 'tech.name',
- 'technical_contact_address1:' => 'tech.address.address.0',
+ 'technical_contact_address0:' => 'tech.address.address.0',
'technical_contact_address1:' => 'tech.address.address.1',
- 'technical_contact_address1:' => 'tech.address.address.2',
+ 'technical_contact_address2:' => 'tech.address.address.2',
'technical_contact_postalcode:' => 'tech.address.pcode',
'technical_contact_city:' => 'tech.address.city',
'technical_contact_country:' => 'tech.address.country',
'technical_contact_phone:' => 'tech.phone',
'technical_contact_fax:' => 'tech.fax',
- 'technical_contact_email:' => 'tech.email'
- );
+ 'technical_contact_email:' => 'tech.email',
+ ];
- $r = array();
- $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items);
+ $r = [];
+ $r['regrinfo'] = static::generic_parser_b($data_str['rawdata'], $items);
- if (!empty($r['regrinfo']['domain']['status']))
+ $domain_status = '';
+ if (!empty($r['regrinfo']['domain']['status'])) {
$domain_status = substr($r['regrinfo']['domain']['status'], 0, 3);
- else
- $domain_status = '';
+ }
- if ($domain_status == '200')
+ if ('200' === $domain_status) {
$r['regrinfo']['registered'] = 'yes';
- elseif ($domain_status == '220')
+ } elseif ('220' === $domain_status) {
$r['regrinfo']['registered'] = 'no';
- else
+ } else {
$r['regrinfo']['registered'] = 'unknown';
+ }
- if (!strncmp($data_str['rawdata'][0], 'WHOIS LIMIT EXCEEDED', 20))
+ if (!strncmp($data_str['rawdata'][0], 'WHOIS LIMIT EXCEEDED', 20)) {
$r['regrinfo']['registered'] = 'unknown';
+ }
+
+ $r['regyinfo'] = $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.dnc.org.nz',
+ 'registrar' => 'New Zealand Domain Name Registry Limited',
+ ];
- $r['regyinfo']['referrer'] = 'http://www.dnc.org.nz';
- $r['regyinfo']['registrar'] = 'New Zealand Domain Name Registry Limited';
return $r;
}
+ public static function generic_parser_a_blocks(array $rawdata, array $translate, array &$disclaimer = []): array
+ {
+ $blocks = parent::generic_parser_a_blocks($rawdata, $translate, $disclaimer);
+
+ array_walk_recursive($blocks, static function (&$v, $key) {
+ if (!in_array($key, ['expires', 'created', 'changed'])) {
+ return;
+ }
+
+ $matches = [];
+ $pattern = '/(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[-+])(\d{2}):(\d{2})/';
+ preg_match($pattern, $v, $matches);
+
+ if (!empty($matches)) {
+ $v = $matches[1].$matches[2].$matches[3];
+ }
+ });
+
+ return $blocks;
+ }
}
diff --git a/src/Handlers/TLD/OrgHandler.php b/src/Handlers/TLD/OrgHandler.php
new file mode 100644
index 00000000..87e9af78
--- /dev/null
+++ b/src/Handlers/TLD/OrgHandler.php
@@ -0,0 +1,34 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://thenew.org/org-people/',
+ 'registrar' => 'Public Interest Registry',
+ ],
+ 'rawdata' => $data_str['rawdata'] ?? null,
+ ];
+
+ if (!strncmp($data_str['rawdata'][0], 'WHOIS LIMIT EXCEEDED', 20)) {
+ $r['regrinfo']['registered'] = 'unknown';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/whois.org.za.php b/src/Handlers/TLD/OrgZaHandler.php
similarity index 78%
rename from src/whois.org.za.php
rename to src/Handlers/TLD/OrgZaHandler.php
index 33db0923..2ec5a276 100644
--- a/src/whois.org.za.php
+++ b/src/Handlers/TLD/OrgZaHandler.php
@@ -1,4 +1,5 @@
'Status:',
'domain.nserver' => 'Domain name servers in listed order:',
'domain.changed' => 'Record last updated on',
@@ -38,22 +40,23 @@ function parse($data, $query) {
'admin' => 'Administrative Contact:',
'tech' => 'Technical Contact:',
'billing' => 'Billing Contact:',
- '#' => 'Search Again'
- );
+ '#' => 'Search Again',
+ ];
- $r = array();
- $r['regrinfo'] = get_blocks($data['rawdata'], $items);
+ $r = [];
+ $r['regrinfo'] = static::getBlocks($data_str['rawdata'], $items);
if (isset($r['regrinfo']['domain']['status'])) {
$r['regrinfo']['registered'] = 'yes';
$r['regrinfo']['domain']['handler'] = strtok(array_shift($r['regrinfo']['owner']), ' ');
- $r['regrinfo'] = get_contacts($r['regrinfo']);
- } else
+ $r['regrinfo'] = static::getContacts($r['regrinfo']);
+ } else {
$r['regrinfo']['registered'] = 'no';
+ }
$r['regyinfo']['referrer'] = 'http://www.org.za';
$r['regyinfo']['registrar'] = 'The ORG.ZA Domain';
+
return $r;
}
-
}
diff --git a/src/Handlers/TLD/PhHandler.php b/src/Handlers/TLD/PhHandler.php
new file mode 100644
index 00000000..078e11d4
--- /dev/null
+++ b/src/Handlers/TLD/PhHandler.php
@@ -0,0 +1,38 @@
+ 'domain.created',
+ 'changed:' => 'domain.changed',
+ 'status:' => 'domain.status',
+ 'nserver:' => 'domain.nserver.',
+ ];
+
+ $r = [
+ 'regrinfo' => static::generic_parser_b($data_str['rawdata'], $items),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']),
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (!isset($r['regrinfo']['domain']['name'])) {
+ $r['regrinfo']['domain']['name'] = $query;
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/PlHandler.php b/src/Handlers/TLD/PlHandler.php
new file mode 100644
index 00000000..449fbeb4
--- /dev/null
+++ b/src/Handlers/TLD/PlHandler.php
@@ -0,0 +1,35 @@
+ 'created:',
+ 'domain.changed' => 'last modified:',
+ 'domain.sponsor' => 'REGISTRAR:',
+ '#' => 'WHOIS displays data with a delay not exceeding 15 minutes in relation to the .pl Registry system',
+ ];
+
+ return [
+ 'regrinfo' => static::easyParser($data_str['rawdata'], $items, 'ymd'),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.dns.pl/english/index.html',
+ 'registrar' => 'NASK',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/ProHandler.php b/src/Handlers/TLD/ProHandler.php
new file mode 100644
index 00000000..4733bc7e
--- /dev/null
+++ b/src/Handlers/TLD/ProHandler.php
@@ -0,0 +1,28 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.registrypro.pro',
+ 'registrar' => 'RegistryPRO',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/PtHandler.php b/src/Handlers/TLD/PtHandler.php
new file mode 100644
index 00000000..f5d8b58a
--- /dev/null
+++ b/src/Handlers/TLD/PtHandler.php
@@ -0,0 +1,64 @@
+ ' / Domain Name:',
+ 'domain.created' => 'Data de registo / Creation Date (dd/mm/yyyy):',
+ 'domain.nserver.' => 'Nameserver:',
+ 'domain.status' => 'Estado / Status:',
+ 'owner' => 'Titular / Registrant',
+ 'billing' => 'Entidade Gestora / Billing Contact',
+ 'admin' => 'Responsável Administrativo / Admin Contact',
+ 'tech' => 'Responsável Técnico / Tech Contact',
+ '#' => 'Nameserver Information',
+ ];
+
+ $r = [
+ 'regrinfo' => static::getBlocks($data_str['rawdata'], $items),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'registrar' => 'FCCN',
+ 'referrer' => 'https://www.fccn.pt',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (empty($r['regrinfo']['domain']['name'])) {
+ print_r($r['regrinfo']);
+ $r['regrinfo']['registered'] = 'no';
+
+ return $r;
+ }
+
+ $r['regrinfo']['domain']['created'] = static::getDate($r['regrinfo']['domain']['created'], 'dmy');
+
+ if ('ACTIVE' === $r['regrinfo']['domain']['status']) {
+ $r['regrinfo'] = static::getContacts($r['regrinfo']);
+ $r['regrinfo']['registered'] = 'yes';
+ } else {
+ $r['regrinfo']['registered'] = 'no';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/RoHandler.php b/src/Handlers/TLD/RoHandler.php
new file mode 100644
index 00000000..e0524be3
--- /dev/null
+++ b/src/Handlers/TLD/RoHandler.php
@@ -0,0 +1,77 @@
+ 'fax',
+ 'e-mail' => 'email',
+ 'nic-hdl' => 'handle',
+ 'person' => 'name',
+ 'address' => 'address.',
+ 'domain-name' => '',
+ 'updated' => 'changed',
+ 'registration-date' => 'created',
+ 'domain-status' => 'status',
+ 'nameserver' => 'nserver',
+ ];
+
+ $contacts = [
+ 'admin-contact' => 'admin',
+ 'technical-contact' => 'tech',
+ 'zone-contact' => 'zone',
+ 'billing-contact' => 'billing',
+ ];
+
+ $extra = [
+ 'postal code:' => 'address.pcode',
+ ];
+
+ $reg = static::generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
+
+ if (isset($reg['domain']['description'])) {
+ $reg['owner'] = static::getContact($reg['domain']['description'], $extra);
+ unset($reg['domain']['description']);
+
+ foreach ($reg as $key => $item) {
+ if (isset($item['address'])) {
+ $data = $item['address'];
+ unset($reg[$key]['address']);
+ $reg[$key] = array_merge($reg[$key], static::getContact($data, $extra));
+ }
+ }
+
+ $reg['registered'] = 'yes';
+ } else {
+ $reg['registered'] = 'no';
+ }
+
+ return [
+ 'regrinfo' => $reg,
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.nic.ro',
+ 'registrar' => 'nic.ro',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/RuHandler.php b/src/Handlers/TLD/RuHandler.php
new file mode 100644
index 00000000..314c4546
--- /dev/null
+++ b/src/Handlers/TLD/RuHandler.php
@@ -0,0 +1,49 @@
+ 'domain.name',
+ 'registrar:' => 'domain.sponsor',
+ 'state:' => 'domain.status',
+ 'nserver:' => 'domain.nserver.',
+ 'source:' => 'domain.source',
+ 'created:' => 'domain.created',
+ 'paid-till:' => 'domain.expires',
+ 'type:' => 'owner.type',
+ 'org:' => 'owner.organization',
+ 'phone:' => 'owner.phone',
+ 'fax-no:' => 'owner.fax',
+ 'e-mail:' => 'owner.email',
+ ];
+
+ $r = [
+ 'regrinfo' => static::generic_parser_b($data_str['rawdata'], $items, 'dmy'),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'http://www.ripn.net',
+ 'registrar' => 'RU-CENTER-REG-RIPN',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (empty($r['regrinfo']['domain']['status'])) {
+ $r['regrinfo']['registered'] = 'no';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/RwhoisHandler.php b/src/Handlers/TLD/RwhoisHandler.php
new file mode 100644
index 00000000..3cdc4869
--- /dev/null
+++ b/src/Handlers/TLD/RwhoisHandler.php
@@ -0,0 +1,46 @@
+ 'owner.name',
+ 'network:Organization;I:' => 'owner.organization',
+ 'network:Organization-City:' => 'owner.address.city',
+ 'network:Organization-Zip:' => 'owner.address.pcode',
+ 'network:Organization-Country:' => 'owner.address.country',
+ 'network:IP-Network-Block:' => 'network.inetnum',
+ 'network:IP-Network:' => 'network.inetnum',
+ 'network:Network-Name:' => 'network.name',
+ 'network:ID:' => 'network.handle',
+ 'network:Created:' => 'network.created',
+ 'network:Updated:' => 'network.changed',
+ 'network:Tech-Contact;I:' => 'tech.email',
+ 'network:Admin-Contact;I:' => 'admin.email',
+ ];
+
+ $res = static::generic_parser_b($data_str, $items, 'Ymd', false);
+
+ if (isset($res['disclaimer'])) {
+ unset($res['disclaimer']);
+ }
+
+ return [
+ 'regrinfo' => $res,
+ 'rawdata' => $data_str['rawdata'] ?? [],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/ScHandler.php b/src/Handlers/TLD/ScHandler.php
new file mode 100644
index 00000000..bd635f12
--- /dev/null
+++ b/src/Handlers/TLD/ScHandler.php
@@ -0,0 +1,28 @@
+ static::generic_parser_b($data_str['rawdata'], [], 'dmy'),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.nic.sc',
+ 'registrar' => 'VCS (Pty) Limited',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/SeHandler.php b/src/Handlers/TLD/SeHandler.php
new file mode 100644
index 00000000..0679f87e
--- /dev/null
+++ b/src/Handlers/TLD/SeHandler.php
@@ -0,0 +1,44 @@
+ 'domain.name',
+ 'state:' => 'domain.status.',
+ 'status:' => 'domain.status.',
+ 'expires:' => 'domain.expires',
+ 'created:' => 'domain.created',
+ 'modified:' => 'domain.changed',
+ 'nserver:' => 'domain.nserver.',
+ 'registrar:' => 'domain.sponsor',
+ 'holder:' => 'owner.handle',
+ ];
+
+ $r = [
+ 'regrinfo' => static::generic_parser_b($data_str['rawdata'], $items, 'ymd', false),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.nic-se.se',
+ 'registrar' => 'NIC-SE',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ $r['regrinfo']['registered'] = isset($r['regrinfo']['domain']['name']) ? 'yes' : 'no';
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/SiHandler.php b/src/Handlers/TLD/SiHandler.php
new file mode 100644
index 00000000..6df72a95
--- /dev/null
+++ b/src/Handlers/TLD/SiHandler.php
@@ -0,0 +1,38 @@
+ 'handle',
+ 'nameserver' => 'nserver',
+ ];
+
+ $contacts = [
+ 'registrant' => 'owner',
+ 'tech-c' => 'tech',
+ ];
+
+ return [
+ 'regrinfo' => static::generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd'),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.arnes.si',
+ 'registrar' => 'ARNES',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/SuHandler.php b/src/Handlers/TLD/SuHandler.php
new file mode 100644
index 00000000..b2c57e46
--- /dev/null
+++ b/src/Handlers/TLD/SuHandler.php
@@ -0,0 +1,39 @@
+ 'domain.name',
+ 'registrar:' => 'domain.sponsor',
+ 'state:' => 'domain.status',
+ 'person:' => 'owner.name',
+ 'phone:' => 'owner.phone',
+ 'e-mail:' => 'owner.email',
+ 'created:' => 'domain.created',
+ 'paid-till:' => 'domain.expires',
+ ];
+
+ return [
+ 'regrinfo' => static::generic_parser_b($data_str['rawdata'], $items, 'dmy'),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.ripn.net',
+ 'registrar' => 'RUCENTER-REG-RIPN',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/TelHandler.php b/src/Handlers/TLD/TelHandler.php
new file mode 100644
index 00000000..6c3607df
--- /dev/null
+++ b/src/Handlers/TLD/TelHandler.php
@@ -0,0 +1,28 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.telnic.org',
+ 'registrar' => 'Telnic',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/TodayHandler.php b/src/Handlers/TLD/TodayHandler.php
new file mode 100644
index 00000000..ebbfc835
--- /dev/null
+++ b/src/Handlers/TLD/TodayHandler.php
@@ -0,0 +1,31 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (!isset($r['regrinfo']['domain']['name'])) {
+ $r['regrinfo']['domain']['name'] = $query;
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/TravelHandler.php b/src/Handlers/TLD/TravelHandler.php
new file mode 100644
index 00000000..fc44a4af
--- /dev/null
+++ b/src/Handlers/TLD/TravelHandler.php
@@ -0,0 +1,28 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'registrar' => 'Tralliance Corporation',
+ 'referrer' => 'https://www.nic.travel/',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/UkHandler.php b/src/Handlers/TLD/UkHandler.php
new file mode 100644
index 00000000..1998899d
--- /dev/null
+++ b/src/Handlers/TLD/UkHandler.php
@@ -0,0 +1,62 @@
+ 'Registrant:',
+ 'owner.address' => "Registrant's address:",
+ 'owner.type' => 'Registrant type:',
+ 'domain.created' => 'Registered on:',
+ 'domain.changed' => 'Last updated:',
+ 'domain.expires' => 'Expiry date:',
+ 'domain.nserver' => 'Name servers:',
+ 'domain.sponsor' => 'Registrar:',
+ 'domain.status' => 'Registration status:',
+ 'domain.dnssec' => 'DNSSEC:',
+ '' => 'WHOIS lookup made at',
+ 'disclaimer' => '--',
+ ];
+
+ public function parse(array $data_str, string $query): array
+ {
+ $rawData = $this->removeBlankLines($data_str['rawdata']);
+
+ $r = [
+ 'regrinfo' => static::getBlocks($rawData, static::ITEMS),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.nominet.org.uk',
+ 'registrar' => 'Nominet UK',
+ ],
+ 'rawdata' => $data_str['rawdata'] ?? null,
+ ];
+
+ if (isset($r['regrinfo']['owner'])) {
+ $r['regrinfo']['owner']['organization'] = $r['regrinfo']['owner']['organization'][0];
+ $r['regrinfo']['domain']['sponsor'] = $r['regrinfo']['domain']['sponsor'][0];
+ $r['regrinfo']['registered'] = 'yes';
+ } elseif (strpos($query, '.co.uk') && isset($r['regrinfo']['domain']['status'][0])) {
+ if ('Registered until expiry date.' === $r['regrinfo']['domain']['status'][0]) {
+ $r['regrinfo']['registered'] = 'yes';
+ }
+ } elseif (strpos($data_str['rawdata'][1], 'Error for ')) {
+ $r['regrinfo']['registered'] = 'yes';
+ $r['regrinfo']['domain']['status'] = 'invalid';
+ } else {
+ $r['regrinfo']['registered'] = 'no';
+ }
+
+ return static::formatDates($r, 'dmy');
+ }
+}
diff --git a/src/Handlers/TLD/UsHandler.php b/src/Handlers/TLD/UsHandler.php
new file mode 100644
index 00000000..92dddca5
--- /dev/null
+++ b/src/Handlers/TLD/UsHandler.php
@@ -0,0 +1,28 @@
+ static::generic_parser_b($data_str['rawdata'], [], 'ymd'),
+ 'regyinfo' => [
+ 'referrer' => 'https://www.neustar.us',
+ 'registrar' => 'NEUSTAR INC.',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+ }
+}
diff --git a/src/Handlers/TLD/VeHandler.php b/src/Handlers/TLD/VeHandler.php
new file mode 100644
index 00000000..3503eaa3
--- /dev/null
+++ b/src/Handlers/TLD/VeHandler.php
@@ -0,0 +1,59 @@
+ 'Titular:',
+ 'domain.name' => 'Nombre de Dominio:',
+ 'admin' => 'Contacto Administrativo',
+ 'tech' => 'Contacto Tecnico',
+ 'billing' => 'Contacto de Cobranza:',
+ 'domain.created' => 'Fecha de Creacion:',
+ 'domain.changed' => 'Ultima Actualizacion:',
+ 'domain.expires' => 'Fecha de Vencimiento:',
+ 'domain.status' => 'Estatus del dominio:',
+ 'domain.nserver' => 'Servidor(es) de Nombres de Dominio',
+ ];
+
+ $r = [
+ 'regrinfo' => static::getBlocks($data_str['rawdata'], $items),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://registro.nic.ve',
+ 'registrar' => 'NIC-Venezuela - CNTI',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (!isset($r['regrinfo']['domain']['created']) || is_array($r['regrinfo']['domain']['created'])) {
+ $r['regrinfo'] = ['registered' => 'no'];
+
+ return $r;
+ }
+
+ $dns = [];
+ foreach ($r['regrinfo']['domain']['nserver'] as $nserv) {
+ if ('-' === $nserv[0]) {
+ $dns[] = $nserv;
+ }
+ }
+ $r['regrinfo']['domain']['nserver'] = $dns;
+
+ $r['regrinfo'] = static::getContacts($r['regrinfo']);
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/WsHandler.php b/src/Handlers/TLD/WsHandler.php
new file mode 100644
index 00000000..6b3a3471
--- /dev/null
+++ b/src/Handlers/TLD/WsHandler.php
@@ -0,0 +1,96 @@
+ 'domain.name',
+ 'Creation Date:' => 'domain.created',
+ 'Updated Date:' => 'domain.changed',
+ 'Registrar Registration Expiration Date:' => 'domain.expires',
+ 'Registrar:' => 'domain.sponsor',
+ 'WHOIS Server:' => 'rwhois',
+ 'Domain Status:' => 'domain.status.',
+ 'Registrant Name:' => 'owner.name',
+ 'Registrant Organization:' => 'owner.organization',
+ 'Registrant Street:' => 'owner.address.address.0',
+ 'Registrant City:' => 'owner.address.city',
+ 'Registrant State/Province:' => 'owner.address.state',
+ 'Registrant Postal Code:' => 'owner.address.pcode',
+ 'Registrant Country:' => 'owner.address.country',
+ 'Registrant Phone:' => 'owner.phone',
+ 'Registrant Fax:' => 'owner.fax',
+ 'Registrant Email:' => 'owner.email',
+ 'Domain Created:' => 'domain.created',
+ 'Admin Name:' => 'admin.name',
+ 'Domain Last Updated:' => 'domain.changed',
+ 'Admin Organization:' => 'admin.organization',
+ 'Registrar Name:' => 'domain.sponsor',
+ 'Admin Street:' => 'admin.address.address.0',
+ 'Current Nameservers:' => 'domain.nserver.',
+ 'Admin City:' => 'admin.address.city',
+ 'Administrative Contact Email:' => 'admin.email',
+ 'Admin State/Province:' => 'admin.address.state',
+ 'Administrative Contact Telephone:' => 'admin.phone',
+ 'Admin Postal Code:' => 'admin.address.pcode',
+ 'Registrar Whois:' => 'rwhois',
+ 'Admin Country:' => 'admin.address.country',
+ 'Admin Phone:' => 'admin.phone',
+ 'Admin Fax:' => 'admin.fax',
+ 'Admin Email:' => 'admin.email',
+ 'Tech Name:' => 'tech.name',
+ 'Tech Organization:' => 'tech.organization',
+ 'Tech Street:' => 'tech.address.address.0',
+ 'Tech City:' => 'tech.address.city',
+ 'Tech State/Province:' => 'tech.address.state',
+ 'Tech Postal Code:' => 'tech.address.pcode',
+ 'Tech Country:' => 'tech.address.country',
+ 'Tech Phone:' => 'tech.phone',
+ 'Tech Fax:' => 'tech.fax',
+ 'Tech Email:' => 'tech.email',
+ 'Name Server:' => 'domain.nserver.',
+ ];
+
+ $r = [
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ $r['regrinfo'] = AbstractHandler::generic_parser_b($data_str['rawdata'], $items, 'ymd');
+
+ $r['regyinfo']['referrer'] = 'https://www.samoanic.ws';
+ $r['regyinfo']['registrar'] = 'Samoa Nic';
+
+ if (!empty($r['regrinfo']['domain']['name'])) {
+ $r['regrinfo']['registered'] = 'yes';
+
+ if (isset($r['regrinfo']['rwhois'])) {
+ // if ($this->deepWhois) {
+ // $r['regyinfo']['whois'] = $r['regrinfo']['rwhois'];
+ // $r = $this->deepWhois($query, $r);
+ // }
+ unset($r['regrinfo']['rwhois']);
+ }
+ } else {
+ $r['regrinfo']['registered'] = 'no';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/XxxHandler.php b/src/Handlers/TLD/XxxHandler.php
new file mode 100644
index 00000000..460e5c60
--- /dev/null
+++ b/src/Handlers/TLD/XxxHandler.php
@@ -0,0 +1,34 @@
+ static::generic_parser_b($data_str['rawdata']),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ 'referrer' => 'https://www.pir.org/',
+ 'registrar' => 'Public Interest Registry',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (!strncmp($data_str['rawdata'][0], 'WHOIS LIMIT EXCEEDED', 20)) {
+ $r['regrinfo']['registered'] = 'unknown';
+ }
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/TLD/ZanetHandler.php b/src/Handlers/TLD/ZanetHandler.php
new file mode 100644
index 00000000..59b8248c
--- /dev/null
+++ b/src/Handlers/TLD/ZanetHandler.php
@@ -0,0 +1,74 @@
+ 'Domain Name : ',
+ 'domain.created' => 'Record Created :',
+ 'domain.changed' => 'Record Last Updated :',
+ 'owner.name' => 'Registered for :',
+ 'admin' => 'Administrative Contact :',
+ 'tech' => 'Technical Contact :',
+ 'domain.nserver' => 'Domain Name Servers listed in order:',
+ 'registered' => 'No such domain: ',
+ '' => 'The ZA NiC whois',
+ ];
+
+ // Arrange contacts ...
+
+ $rawdata = [];
+ foreach ($data_str['rawdata'] as $line) {
+ if (strpos($line, ' Contact ') !== false) {
+ $pos = strpos($line, ':');
+
+ if ($pos !== false) {
+ $rawdata[] = substr($line, 0, $pos + 1);
+ $rawdata[] = trim(substr($line, $pos + 1));
+
+ continue;
+ }
+ }
+ $rawdata[] = $line;
+ }
+
+ $r = [
+ 'regrinfo' => static::getBlocks($rawdata, $items),
+ 'regyinfo' => $this->parseRegistryInfo($data_str['rawdata']) ?? [
+ // Or try http://www.za.org
+ 'referrer' => 'https://www.za.net/',
+ 'registrar' => 'ZA NiC',
+ ],
+ 'rawdata' => $data_str['rawdata'],
+ ];
+
+ if (isset($r['regrinfo']['registered'])) {
+ $r['regrinfo']['registered'] = 'no';
+ } else {
+ if (isset($r['regrinfo']['admin'])) {
+ $r['regrinfo']['admin'] = static::getContact($r['regrinfo']['admin']);
+ }
+
+ if (isset($r['regrinfo']['tech'])) {
+ $r['regrinfo']['tech'] = static::getContact($r['regrinfo']['tech']);
+ }
+ }
+
+ static::formatDates($r, 'xmdxxy');
+
+ return $r;
+ }
+}
diff --git a/src/Handlers/gTLD/AfternicHandler.php b/src/Handlers/gTLD/AfternicHandler.php
new file mode 100644
index 00000000..ebe4f15c
--- /dev/null
+++ b/src/Handlers/gTLD/AfternicHandler.php
@@ -0,0 +1,33 @@
+ 'Registrant:',
+ 'admin' => 'Administrative Contact',
+ 'tech' => 'Technical Contact',
+ 'zone' => 'Zone Contact',
+ 'domain.name' => 'Domain Name:',
+ 'domain.changed' => 'Updated Date:',
+ 'domain.created' => 'Creation Date:',
+ 'domain.expires' => 'Registry Expiry Date:',
+ 'name_server' => 'Name Server:',
+ ];
+
+ return static::easyParser($data_str['rawdata'], $items, 'dmy', [], false, true);
+ }
+}
diff --git a/src/whois.gtld.alldomains.php b/src/Handlers/gTLD/AllDomainsHandler.php
similarity index 78%
rename from src/whois.gtld.alldomains.php
rename to src/Handlers/gTLD/AllDomainsHandler.php
index f010029b..149bede1 100644
--- a/src/whois.gtld.alldomains.php
+++ b/src/Handlers/gTLD/AllDomainsHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative',
'tech' => 'Technical',
'domain.name' => 'Domain name:',
'domain.sponsor' => 'Registrar:',
- 'domain.nserver.' => 'Domain servers in listed order:'
- );
+ 'domain.nserver.' => 'Domain servers in listed order:',
+ ];
- return easy_parser($data_str, $items, 'ymd');
+ return static::easyParser($data_str, $items, 'ymd');
}
-
}
diff --git a/src/whois.gtld.ascio.php b/src/Handlers/gTLD/AscioHandler.php
similarity index 76%
rename from src/whois.gtld.ascio.php
rename to src/Handlers/gTLD/AscioHandler.php
index 2d0efff8..a9f3d486 100644
--- a/src/whois.gtld.ascio.php
+++ b/src/Handlers/gTLD/AscioHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative ',
'tech' => 'Technical ',
@@ -38,10 +40,9 @@ function parse($data_str, $query) {
'domain.nserver.' => 'Domain servers in listed order:',
'domain.created' => 'Record created:',
'domain.expires' => 'Record expires:',
- 'domain.changed' => 'Record last updated:'
- );
+ 'domain.changed' => 'Record last updated:',
+ ];
- return easy_parser($data_str, $items, 'ymd', array(), false, true);
+ return static::easyParser($data_str, $items, 'ymd', [], false, true);
}
-
}
diff --git a/src/whois.gtld.assorted.php b/src/Handlers/gTLD/AssortedHandler.php
similarity index 76%
rename from src/whois.gtld.assorted.php
rename to src/Handlers/gTLD/AssortedHandler.php
index 81c409a0..5de18b58 100644
--- a/src/whois.gtld.assorted.php
+++ b/src/Handlers/gTLD/AssortedHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative Contact:',
'tech' => 'Technical Contact:',
@@ -38,10 +40,9 @@ function parse($data_str, $query) {
'domain.nserver.' => 'Domain servers in listed order:',
'domain.created' => 'Record created on',
'domain.expires' => 'Record expires on',
- 'domain.changed' => 'Record last updated'
- );
+ 'domain.changed' => 'Record last updated',
+ ];
- return easy_parser($data_str, $items, 'ymd', array(), false, true);
+ return AbstractHandler::easyParser($data_str, $items, 'ymd', [], false, true);
}
-
}
diff --git a/src/whois.gtld.corporatedomains.php b/src/Handlers/gTLD/CorporatedomainsHandler.php
similarity index 77%
rename from src/whois.gtld.corporatedomains.php
rename to src/Handlers/gTLD/CorporatedomainsHandler.php
index 02a37ac8..09b56f25 100644
--- a/src/whois.gtld.corporatedomains.php
+++ b/src/Handlers/gTLD/CorporatedomainsHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative Contact',
'tech' => 'Technical Contact',
@@ -40,10 +42,9 @@ function parse($data_str, $query) {
'domain.created' => 'Domain created on',
'domain.expires' => 'Domain expires on',
'domain.sponsor' => 'Registrar Name....:',
- 'domain.nserver' => 'DNS Servers:'
- );
+ 'domain.nserver' => 'DNS Servers:',
+ ];
- return easy_parser($data_str, $items, 'dmy', array(), false, true);
+ return static::easyParser($data_str, $items, 'dmy', [], false, true);
}
-
}
diff --git a/src/whois.gtld.directnic.php b/src/Handlers/gTLD/DirectnicHandler.php
similarity index 78%
rename from src/whois.gtld.directnic.php
rename to src/Handlers/gTLD/DirectnicHandler.php
index 4dcbf481..b91a6a52 100644
--- a/src/whois.gtld.directnic.php
+++ b/src/Handlers/gTLD/DirectnicHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative Contact',
'tech' => 'Technical Contact',
@@ -40,10 +42,9 @@ function parse($data_str, $query) {
'domain.changed' => 'Record last updated ',
'domain.created' => 'Record created on ',
'domain.expires' => 'Record expires on ',
- '' => 'By submitting a WHOIS query'
- );
+ '' => 'By submitting a WHOIS query',
+ ];
- return easy_parser($data_str, $items, 'mdy', array(), false, true);
+ return static::easyParser($data_str, $items, 'mdy', [], false, true);
}
-
}
diff --git a/src/whois.gtld.domaindiscover.php b/src/Handlers/gTLD/DomaindiscoverHandler.php
similarity index 76%
rename from src/whois.gtld.domaindiscover.php
rename to src/Handlers/gTLD/DomaindiscoverHandler.php
index a6dd90f1..8b8aa7cf 100644
--- a/src/whois.gtld.domaindiscover.php
+++ b/src/Handlers/gTLD/DomaindiscoverHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative Contact',
'tech' => 'Technical Contact',
@@ -38,10 +40,9 @@ function parse($data_str, $query) {
'domain.name' => 'Domain Name:',
'domain.changed' => 'Last updated on',
'domain.created' => 'Domain created on',
- 'domain.expires' => 'Domain expires on'
- );
+ 'domain.expires' => 'Domain expires on',
+ ];
- return easy_parser($data_str, $items, 'dmy', array(), false, true);
+ return static::easyParser($data_str, $items, 'dmy', [], false, true);
}
-
}
diff --git a/src/whois.gtld.domainpeople.php b/src/Handlers/gTLD/DomainpeopleHandler.php
similarity index 76%
rename from src/whois.gtld.domainpeople.php
rename to src/Handlers/gTLD/DomainpeopleHandler.php
index 8cdbe6f3..288a4720 100644
--- a/src/whois.gtld.domainpeople.php
+++ b/src/Handlers/gTLD/DomainpeopleHandler.php
@@ -1,4 +1,5 @@
'Registrant Contact:',
'admin' => 'Administrative Contact:',
'tech' => 'Technical Contact:',
@@ -41,14 +42,15 @@ function parse($data_str, $query) {
'domain.nserver.' => 'Name Servers:',
'domain.created' => 'Creation date:',
'domain.expires' => 'Expiration date:',
-// 'domain.changed' => 'Record last updated on',
- 'domain.status' => 'Status:'
- );
+ // 'domain.changed' => 'Record last updated on',
+ 'domain.status' => 'Status:',
+ ];
- $r = easy_parser($data_str, $items, 'dmy', array(), false, true);
- if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor']))
+ $r = static::easyParser($data_str, $items, 'dmy', [], false, true);
+ if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor'])) {
$r['domain']['sponsor'] = $r['domain']['sponsor'][0];
+ }
+
return $r;
}
-
}
diff --git a/src/whois.gtld.dotster.php b/src/Handlers/gTLD/DotsterHandler.php
similarity index 74%
rename from src/whois.gtld.dotster.php
rename to src/Handlers/gTLD/DotsterHandler.php
index aa32198c..e9c5ac9d 100644
--- a/src/whois.gtld.dotster.php
+++ b/src/Handlers/gTLD/DotsterHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative',
'tech' => 'Technical',
- 'domain.nserver' =>
- 'Domain servers in listed order:',
+ 'domain.nserver' => 'Domain servers in listed order:',
'domain.name' => 'Domain name:',
'domain.created' => 'Created on:',
'domain.expires' => 'Expires on:',
'domain.changed' => 'Last Updated on:',
- 'domain.sponsor' => 'Registrar:'
- );
+ 'domain.sponsor' => 'Registrar:',
+ ];
- return easy_parser($data_str, $items, 'dmy');
+ return static::easyParser($data_str, $items, 'dmy');
}
-
}
diff --git a/src/whois.gtld.dreamhost.php b/src/Handlers/gTLD/DreamhostHandler.php
similarity index 77%
rename from src/whois.gtld.dreamhost.php
rename to src/Handlers/gTLD/DreamhostHandler.php
index c6d2bd6d..4cd1661f 100644
--- a/src/whois.gtld.dreamhost.php
+++ b/src/Handlers/gTLD/DreamhostHandler.php
@@ -1,4 +1,5 @@
'Registrant Contact:',
'admin' => 'Administrative Contact:',
'tech' => 'Technical Contact:',
@@ -38,13 +40,14 @@ function parse($data_str, $query) {
'domain.name' => 'Domain Name:',
'domain.nserver' => 'Domain servers in listed order:',
'domain.created' => 'Record created on',
- 'domain.expires' => 'Record expires on'
- );
+ 'domain.expires' => 'Record expires on',
+ ];
- $r = easy_parser($data_str, $items, 'dmy', array(), false, true);
- if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor']))
+ $r = static::easyParser($data_str, $items, 'dmy', [], false, true);
+ if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor'])) {
$r['domain']['sponsor'] = $r['domain']['sponsor'][0];
+ }
+
return $r;
}
-
}
diff --git a/src/whois.gtld.enom.php b/src/Handlers/gTLD/EnomHandler.php
similarity index 82%
rename from src/whois.gtld.enom.php
rename to src/Handlers/gTLD/EnomHandler.php
index acbdc510..f236ba42 100644
--- a/src/whois.gtld.enom.php
+++ b/src/Handlers/gTLD/EnomHandler.php
@@ -1,4 +1,5 @@
'Registrant Contact',
'owner#1' => 'REGISTRANT Contact:',
'admin#0' => 'Administrative Contact',
@@ -49,10 +51,9 @@ function parse($data_str, $query) {
'domain.created#1' => 'Created:',
'domain.expires#1' => 'Expires:',
'domain.created#2' => 'Start of registration-',
- 'domain.expires#2' => 'Registered through-'
- );
+ 'domain.expires#2' => 'Registered through-',
+ ];
- return easy_parser($data_str, $items, 'dmy', array(), false, true);
+ return static::easyParser($data_str, $items, 'dmy', [], false, true);
}
-
}
diff --git a/src/whois.gtld.fabulous.php b/src/Handlers/gTLD/FabulousHandler.php
similarity index 70%
rename from src/whois.gtld.fabulous.php
rename to src/Handlers/gTLD/FabulousHandler.php
index 7fa3d64e..cb87d7d1 100644
--- a/src/whois.gtld.fabulous.php
+++ b/src/Handlers/gTLD/FabulousHandler.php
@@ -1,4 +1,5 @@
'Domain ' . $query . ':',
+ public function parse($data_str, $query): array
+ {
+ $items = [
+ 'owner' => 'Domain '.$query.':',
'admin' => 'Administrative contact:',
'tech' => 'Technical contact:',
'billing' => 'Billing contact:',
- '' => 'Record dates:'
- );
+ '' => 'Record dates:',
+ ];
- $r = easy_parser($data_str, $items, 'mdy', array(), false, true);
+ $r = static::easyParser($data_str, $items, 'mdy', [], false, true);
- if (!isset($r['tech']))
+ if (!isset($r['tech'])) {
$r['tech'] = $r['billing'];
+ }
- if (!isset($r['admin']))
+ if (!isset($r['admin'])) {
$r['admin'] = $r['tech'];
+ }
return $r;
}
-
}
diff --git a/src/whois.gtld.fastdomain.php b/src/Handlers/gTLD/FastdomainHandler.php
similarity index 75%
rename from src/whois.gtld.fastdomain.php
rename to src/Handlers/gTLD/FastdomainHandler.php
index 5ea9c77a..385d04e2 100644
--- a/src/whois.gtld.fastdomain.php
+++ b/src/Handlers/gTLD/FastdomainHandler.php
@@ -1,4 +1,5 @@
'Registrant Info:',
'admin' => 'Administrative Info:',
'tech' => 'Technical Info:',
@@ -41,30 +43,30 @@ function parse($data_str, $query) {
'domain.created' => 'Created on..............:',
'domain.expires' => 'Expires on..............:',
'domain.changed' => 'Last modified on........:',
- 'domain.status' => 'Status:'
- );
+ 'domain.status' => 'Status:',
+ ];
- while (list($key, $val) = each($data_str)) {
+ foreach ($data_str as $key => $val) {
$faststr = strpos($val, ' (FAST-');
- if ($faststr)
+ if ($faststr) {
$data_str[$key] = substr($val, 0, $faststr);
+ }
}
- $r = easy_parser($data_str, $items, 'dmy', array(), false, true);
+ $r = static::easyParser($data_str, $items, 'dmy', [], false, true);
- if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor']))
+ if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor'])) {
$r['domain']['sponsor'] = $r['domain']['sponsor'][0];
+ }
if (isset($r['domain']['nserver'])) {
- reset($r['domain']['nserver']);
-
- while (list($key, $val) = each($r['domain']['nserver'])) {
- if ($val == '=-=-=-=')
+ foreach (${$r['domain']['nserver']} as $key => $val) {
+ if ('=-=-=-=' === $val) {
unset($r['domain']['nserver'][$key]);
+ }
}
}
return $r;
}
-
}
diff --git a/src/whois.gtld.gandi.php b/src/Handlers/gTLD/GandiHandler.php
similarity index 74%
rename from src/whois.gtld.gandi.php
rename to src/Handlers/gTLD/GandiHandler.php
index 34df5002..55086ed3 100644
--- a/src/whois.gtld.gandi.php
+++ b/src/Handlers/gTLD/GandiHandler.php
@@ -1,4 +1,5 @@
'owner-c',
'admin' => 'admin-c',
'tech' => 'tech-c',
- 'billing' => 'bill-c'
- );
+ 'billing' => 'bill-c',
+ ];
- $trans = array(
+ $trans = [
'nic-hdl:' => 'handle',
'person:' => 'name',
'zipcode:' => 'address.pcode',
'city:' => 'address.city',
'lastupdated:' => 'changed',
- 'owner-name:' => ''
- );
+ 'owner-name:' => '',
+ ];
- return easy_parser($data_str, $items, 'dmy', $trans);
+ return static::easyParser($data_str, $items, 'dmy', $trans);
}
-
}
diff --git a/src/whois.gtld.genericb.php b/src/Handlers/gTLD/GenericbHandler.php
similarity index 77%
rename from src/whois.gtld.genericb.php
rename to src/Handlers/gTLD/GenericbHandler.php
index 59b8433c..b9cee535 100644
--- a/src/whois.gtld.genericb.php
+++ b/src/Handlers/gTLD/GenericbHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative Contact',
'tech' => 'Technical Contact',
@@ -39,14 +41,14 @@ function parse($data_str, $query) {
'domain.created' => 'Created on:',
'domain.expires' => 'Expires on:',
'domain.changed' => 'Last Updated on:',
- 'domain.sponsor' => 'Registered through:'
- );
+ 'domain.sponsor' => 'Registered through:',
+ ];
- $r = get_blocks($data_str, $items);
- $r['owner'] = get_contact($r['owner']);
- $r['admin'] = get_contact($r['admin'], array(), true);
- $r['tech'] = get_contact($r['tech'], array(), true);
- return format_dates($r, 'dmy');
- }
+ $r = static::getBlocks($data_str, $items);
+ $r['owner'] = static::getContact($r['owner']);
+ $r['admin'] = static::getContact($r['admin'], [], true);
+ $r['tech'] = static::getContact($r['tech'], [], true);
+ return static::formatDates($r, 'dmy');
+ }
}
diff --git a/src/whois.gtld.php b/src/Handlers/gTLD/GtldHandler.php
similarity index 74%
rename from src/whois.gtld.php
rename to src/Handlers/gTLD/GtldHandler.php
index 098c1a4d..fcf75a28 100644
--- a/src/whois.gtld.php
+++ b/src/Handlers/gTLD/GtldHandler.php
@@ -1,37 +1,35 @@
'regrinfo.domain.name',
'Registrar:' => 'regyinfo.registrar',
'Whois Server:' => 'regyinfo.whois',
@@ -44,33 +42,45 @@ class gtld_handler extends WhoisClient {
'Creation Date:' => 'regrinfo.domain.created',
'Created On:' => 'regrinfo.domain.created',
'Expiration Date:' => 'regrinfo.domain.expires',
- 'Updated Date:' => 'regrinfo.domain.changed',
- 'No match for ' => 'nodomain'
- );
+ 'Registry Expiry Date:' => 'regrinfo.domain.expires',
+ 'No match for ' => 'nodomain',
+ ];
+
+ /**
+ * @var array
+ */
+ protected $result;
- function parse($data, $query) {
- $this->query = array();
- $this->result = generic_parser_b($data['rawdata'], $this->REG_FIELDS, 'dmy');
+ /**
+ * @param array $data
+ * @param string $query
+ */
+ public function parse($data, $query): array
+ {
+ $this->query = [];
+ $this->result = AbstractHandler::generic_parser_b($data['rawdata'], self::REG_FIELDS, 'dmy');
unset($this->result['registered']);
if (isset($this->result['nodomain'])) {
unset($this->result['nodomain']);
$this->result['regrinfo']['registered'] = 'no';
+
return $this->result;
}
- if ($this->deepWhois)
+ if ($this->deepWhois) {
$this->result = $this->deepWhois($query, $this->result);
+ }
// Next server could fail to return data
- if (empty($this->result['rawdata']) || count($this->result['rawdata']) < 3)
+ if (empty($this->result['rawdata']) || count($this->result['rawdata']) < 3) {
$this->result['rawdata'] = $data['rawdata'];
+ }
// Domain is registered no matter what next server says
$this->result['regrinfo']['registered'] = 'yes';
return $this->result;
}
-
}
diff --git a/src/whois.gtld.iana.php b/src/Handlers/gTLD/IanaHandler.php
similarity index 77%
rename from src/whois.gtld.iana.php
rename to src/Handlers/gTLD/IanaHandler.php
index bf8e97f9..12e692b5 100644
--- a/src/whois.gtld.iana.php
+++ b/src/Handlers/gTLD/IanaHandler.php
@@ -1,4 +1,5 @@
'contact: administrative',
'tech' => 'contact: technical',
'domain.nserver.' => 'nserver:',
@@ -38,10 +40,9 @@ function parse($data_str, $query) {
'domain.changed' => 'changed:',
'domain.source' => 'source:',
'domain.name' => 'domain:',
- 'disclaimer.' => '% '
- );
+ 'disclaimer.' => '% ',
+ ];
- return easy_parser($data_str, $items, 'Ymd', array(), false, false, 'owner');
+ return static::easyParser($data_str, $items, 'Ymd', [], false, false, 'owner');
}
-
}
diff --git a/src/whois.gtld.interdomain.php b/src/Handlers/gTLD/InterDomainHandler.php
similarity index 89%
rename from src/whois.gtld.interdomain.php
rename to src/Handlers/gTLD/InterDomainHandler.php
index e68dab36..f7474aa6 100644
--- a/src/whois.gtld.interdomain.php
+++ b/src/Handlers/gTLD/InterDomainHandler.php
@@ -1,4 +1,5 @@
'domain.name',
'Creation Date............' => 'domain.created',
'Expiry Date..............' => 'domain.expires',
@@ -67,10 +69,9 @@ function parse($data_str, $query) {
'Technical Country........' => 'tech.address.country',
'Technical Phone..........' => 'tech.phone',
'Technical e-mail.........' => 'tech.email',
- 'Technical Fax............' => 'tech.fax'
- );
+ 'Technical Fax............' => 'tech.fax',
+ ];
- return generic_parser_b($data_str, $items, 'dmy');
+ return static::generic_parser_b($data_str, $items, 'dmy');
}
-
}
diff --git a/src/whois.gtld.itsyourdomain.php b/src/Handlers/gTLD/ItsYourDomainHandler.php
similarity index 77%
rename from src/whois.gtld.itsyourdomain.php
rename to src/Handlers/gTLD/ItsYourDomainHandler.php
index 28465946..0fd29bc2 100644
--- a/src/whois.gtld.itsyourdomain.php
+++ b/src/Handlers/gTLD/ItsYourDomainHandler.php
@@ -1,4 +1,5 @@
'Registrant',
'admin' => 'Administrative',
'tech' => 'Technical',
@@ -39,10 +41,9 @@ function parse($data_str, $query) {
'domain.nserver.' => 'Domain Name Servers:',
'domain.created' => 'Record created on ',
'domain.expires' => 'Record expires on ',
- 'domain.changed' => 'Record last updated on '
- );
+ 'domain.changed' => 'Record last updated on ',
+ ];
- return easy_parser($data_str, $items, 'mdy');
+ return static::easyParser($data_str, $items, 'mdy');
}
-
}
diff --git a/src/whois.gtld.joker.php b/src/Handlers/gTLD/JokerHandler.php
similarity index 78%
rename from src/whois.gtld.joker.php
rename to src/Handlers/gTLD/JokerHandler.php
index d7423e3e..8f569af9 100644
--- a/src/whois.gtld.joker.php
+++ b/src/Handlers/gTLD/JokerHandler.php
@@ -1,4 +1,5 @@
'handle',
'modified' => 'changed',
'reseller' => 'sponsor',
@@ -40,24 +42,24 @@ function parse($data_str, $query) {
'state' => 'address.state',
'country' => 'address.country',
'person' => 'name',
- 'domain' => 'name'
- );
+ 'domain' => 'name',
+ ];
- $contacts = array(
+ $contacts = [
'admin-c' => 'admin',
'tech-c' => 'tech',
- 'billing-c' => 'billing'
- );
+ 'billing-c' => 'billing',
+ ];
- $items = array(
+ $items = [
'owner' => 'name',
'organization' => 'organization',
'email' => 'email',
'phone' => 'phone',
'address' => 'address',
- );
+ ];
- $r = generic_parser_a($data_str, $translate, $contacts, 'domain', 'Ymd');
+ $r = static::generic_parser_a($data_str, $translate, $contacts, 'domain', 'Ymd');
foreach ($items as $tag => $convert) {
if (isset($r['domain'][$tag])) {
@@ -68,5 +70,4 @@ function parse($data_str, $query) {
return $r;
}
-
}
diff --git a/src/whois.gtld.markmonitor.php b/src/Handlers/gTLD/MarkmonitorHandler.php
similarity index 80%
rename from src/whois.gtld.markmonitor.php
rename to src/Handlers/gTLD/MarkmonitorHandler.php
index be0b711e..2ece67ad 100644
--- a/src/whois.gtld.markmonitor.php
+++ b/src/Handlers/gTLD/MarkmonitorHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative Contact:',
'tech' => 'Technical Contact, Zone Contact:',
@@ -39,13 +41,14 @@ function parse($data_str, $query) {
'domain.nserver' => 'Domain servers in listed order:',
'domain.created' => 'Created on..............:',
'domain.expires' => 'Expires on..............:',
- 'domain.changed' => 'Record last updated on..:'
- );
+ 'domain.changed' => 'Record last updated on..:',
+ ];
- $r = easy_parser($data_str, $items, 'dmy', array(), false, true);
+ $r = static::easyParser($data_str, $items, 'dmy', [], false, true);
- if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor']))
+ if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor'])) {
$r['domain']['sponsor'] = $r['domain']['sponsor'][0];
+ }
foreach ($r as $key => $part) {
if (isset($part['address'])) {
@@ -53,7 +56,7 @@ function parse($data_str, $query) {
$r[$key]['address']['country'] = array_pop($r[$key]['address']);
}
}
+
return $r;
}
-
}
diff --git a/src/whois.gtld.melbourneit.php b/src/Handlers/gTLD/MelbourneitHandler.php
similarity index 81%
rename from src/whois.gtld.melbourneit.php
rename to src/Handlers/gTLD/MelbourneitHandler.php
index 26b788a2..d34040fa 100644
--- a/src/whois.gtld.melbourneit.php
+++ b/src/Handlers/gTLD/MelbourneitHandler.php
@@ -1,4 +1,5 @@
'domain.name',
'Registration Date....' => 'domain.created',
'Expiry Date..........' => 'domain.expires',
@@ -46,10 +48,9 @@ function parse($data_str, $query) {
'Tech Email...........' => 'tech.email',
'Tech Phone...........' => 'tech.phone',
'Tech Fax.............' => 'tech.fax',
- 'Name Server..........' => 'domain.nserver.'
- );
+ 'Name Server..........' => 'domain.nserver.',
+ ];
- return generic_parser_b($data_str, $items, 'ymd');
+ return static::generic_parser_b($data_str, $items, 'ymd');
}
-
}
diff --git a/src/whois.gtld.moniker.php b/src/Handlers/gTLD/MonikerHandler.php
similarity index 77%
rename from src/whois.gtld.moniker.php
rename to src/Handlers/gTLD/MonikerHandler.php
index 960e2eb8..d8dda10e 100644
--- a/src/whois.gtld.moniker.php
+++ b/src/Handlers/gTLD/MonikerHandler.php
@@ -1,4 +1,5 @@
'Registrant',
'admin' => 'Administrative ',
'tech' => 'Technical ',
@@ -39,10 +41,9 @@ function parse($data_str, $query) {
'domain.nserver.' => 'Domain servers in listed order:',
'domain.created' => 'Record created on: ',
'domain.expires' => 'Domain Expires on: ',
- 'domain.changed' => 'Database last updated on: '
- );
+ 'domain.changed' => 'Database last updated on: ',
+ ];
- return easy_parser($data_str, $items, 'ymd');
+ return static::easyParser($data_str, $items, 'ymd');
}
-
}
diff --git a/src/whois.gtld.name.php b/src/Handlers/gTLD/NameHandler.php
similarity index 74%
rename from src/whois.gtld.name.php
rename to src/Handlers/gTLD/NameHandler.php
index 7f4b5275..1b99dd12 100644
--- a/src/whois.gtld.name.php
+++ b/src/Handlers/gTLD/NameHandler.php
@@ -1,4 +1,5 @@
'REGISTRANT CONTACT INFO',
'admin' => 'ADMINISTRATIVE CONTACT INFO',
'tech' => 'TECHNICAL CONTACT INFO',
@@ -38,15 +40,14 @@ function parse($data_str, $query) {
'domain.name' => 'Domain Name:',
'domain.sponsor' => 'Registrar',
'domain.created' => 'Creation Date',
- 'domain.expires' => 'Expiration Date'
- );
+ 'domain.expires' => 'Expiration Date',
+ ];
- $extra = array(
+ $extra = [
'phone:' => 'phone',
- 'email address:' => 'email'
- );
+ 'email address:' => 'email',
+ ];
- return easy_parser($data_str, $items, 'y-m-d', $extra, false, true);
+ return static::easyParser($data_str, $items, 'y-m-d', $extra, false, true);
}
-
}
diff --git a/src/whois.gtld.nameintel.php b/src/Handlers/gTLD/NameintelHandler.php
similarity index 80%
rename from src/whois.gtld.nameintel.php
rename to src/Handlers/gTLD/NameintelHandler.php
index bbae0556..740af28d 100644
--- a/src/whois.gtld.nameintel.php
+++ b/src/Handlers/gTLD/NameintelHandler.php
@@ -1,4 +1,5 @@
'Registrant Contact:',
'admin' => 'Administrative Contact:',
'tech' => 'Technical Contact',
@@ -38,13 +40,14 @@ function parse($data_str, $query) {
'domain.status' => 'Status:',
'domain.nserver' => 'Name Server:',
'domain.created' => 'Creation Date:',
- 'domain.expires' => 'Expiration Date:'
- );
+ 'domain.expires' => 'Expiration Date:',
+ ];
- $r = easy_parser($data_str, $items, 'dmy', array(), false, true);
+ $r = static::easyParser($data_str, $items, 'dmy', [], false, true);
- if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor']))
+ if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor'])) {
$r['domain']['sponsor'] = $r['domain']['sponsor'][0];
+ }
foreach ($r as $key => $part) {
if (isset($part['address'])) {
@@ -52,7 +55,7 @@ function parse($data_str, $query) {
$r[$key]['address']['country'] = array_pop($r[$key]['address']);
}
}
+
return $r;
}
-
}
diff --git a/src/whois.gtld.namejuice.php b/src/Handlers/gTLD/NamejuiceHandler.php
similarity index 80%
rename from src/whois.gtld.namejuice.php
rename to src/Handlers/gTLD/NamejuiceHandler.php
index a0bcb3e9..a1550890 100644
--- a/src/whois.gtld.namejuice.php
+++ b/src/Handlers/gTLD/NamejuiceHandler.php
@@ -1,4 +1,5 @@
'Registrant Contact:',
'admin' => 'Administrative Contact:',
'tech' => 'Technical Contact:',
@@ -40,10 +42,9 @@ function parse($data_str, $query) {
'domain.expires' => 'Expiration date:',
'domain.changed' => 'Update date:',
'domain.status' => 'Status:',
- 'domain.sponsor' => 'Registration Service Provided By:'
- );
+ 'domain.sponsor' => 'Registration Service Provided By:',
+ ];
- return easy_parser($data_str, $items, 'dmy', array(), true, true);
+ return static::easyParser($data_str, $items, 'dmy', [], true, true);
}
-
}
diff --git a/src/whois.gtld.nameking.php b/src/Handlers/gTLD/NamekingHandler.php
similarity index 81%
rename from src/whois.gtld.nameking.php
rename to src/Handlers/gTLD/NamekingHandler.php
index ac72dec2..6f92913c 100644
--- a/src/whois.gtld.nameking.php
+++ b/src/Handlers/gTLD/NamekingHandler.php
@@ -1,4 +1,5 @@
'Registrant',
'admin' => 'Admin Contact',
'tech' => 'Tech Contact',
@@ -38,9 +40,9 @@ function parse($data_str, $query) {
'domain.sponsor' => 'Registration Provided By:',
'domain.created' => 'Creation Date:',
'domain.expires' => 'Expiration Date:',
- );
+ ];
- $extra = array(
+ $extra = [
'tel--' => 'phone',
'tel:' => 'phone',
'tel --:' => 'phone',
@@ -57,10 +59,9 @@ function parse($data_str, $query) {
',province:' => '',
',country:' => 'address.country',
'organization:' => 'organization',
- 'city, province, post code:' => 'address.city'
- );
+ 'city, province, post code:' => 'address.city',
+ ];
- return easy_parser($data_str, $items, 'mdy', $extra, false, true);
+ return static::easyParser($data_str, $items, 'mdy', $extra, false, true);
}
-
}
diff --git a/src/whois.gtld.names4ever.php b/src/Handlers/gTLD/Names4everHandler.php
similarity index 78%
rename from src/whois.gtld.names4ever.php
rename to src/Handlers/gTLD/Names4everHandler.php
index 17eae3c1..915192c9 100644
--- a/src/whois.gtld.names4ever.php
+++ b/src/Handlers/gTLD/Names4everHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative Contact',
'tech' => 'Technical Contact',
@@ -41,10 +43,9 @@ function parse($data_str, $query) {
'domain.created' => 'Record created on',
'domain.expires' => 'Record expires on',
'domain.changed' => 'Record last updated on',
- 'domain.status' => 'Domain status:'
- );
+ 'domain.status' => 'Domain status:',
+ ];
- return easy_parser($data_str, $items, 'dmy', array(), false, true);
+ return static::easyParser($data_str, $items, 'dmy', [], false, true);
}
-
}
diff --git a/src/whois.gtld.namevault.php b/src/Handlers/gTLD/NamevaultHandler.php
similarity index 77%
rename from src/whois.gtld.namevault.php
rename to src/Handlers/gTLD/NamevaultHandler.php
index 277c1b21..68fffc58 100644
--- a/src/whois.gtld.namevault.php
+++ b/src/Handlers/gTLD/NamevaultHandler.php
@@ -1,4 +1,5 @@
'Registrant',
'admin' => 'Administrative Contact:',
'tech' => 'Technical Contact:',
@@ -39,10 +41,9 @@ function parse($data_str, $query) {
'domain.nserver.' => 'Name Servers',
'domain.created' => 'Creation Date:',
'domain.expires' => 'Expiration Date:',
- 'domain.status' => 'Status:'
- );
+ 'domain.status' => 'Status:',
+ ];
- return easy_parser($data_str, $items, 'dmy', array(), true, true);
+ return static::easyParser($data_str, $items, 'dmy', [], true, true);
}
-
}
diff --git a/src/whois.gtld.networksolutions.php b/src/Handlers/gTLD/NetworksolutionsHandler.php
similarity index 76%
rename from src/whois.gtld.networksolutions.php
rename to src/Handlers/gTLD/NetworksolutionsHandler.php
index 3161a25b..6149e83f 100644
--- a/src/whois.gtld.networksolutions.php
+++ b/src/Handlers/gTLD/NetworksolutionsHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative Contact',
'tech' => 'Technical Contact',
'domain.name' => 'Domain Name:',
'domain.nserver.' => 'Domain servers in listed order:',
'domain.created' => 'Record created on',
- 'domain.expires' => 'Record expires on'
- );
+ 'domain.expires' => 'Record expires on',
+ ];
- return easy_parser($data_str, $items, 'dmy', array(), true, true);
+ return static::easyParser($data_str, $items, 'dmy', [], true, true);
}
-
}
diff --git a/src/whois.gtld.nicco.php b/src/Handlers/gTLD/NiccoHandler.php
similarity index 66%
rename from src/whois.gtld.nicco.php
rename to src/Handlers/gTLD/NiccoHandler.php
index f0a7f013..dbb3c60f 100644
--- a/src/whois.gtld.nicco.php
+++ b/src/Handlers/gTLD/NiccoHandler.php
@@ -1,4 +1,5 @@
'Holder Contact',
'admin' => 'Admin Contact',
'tech' => 'Tech. Contact',
'domain.nserver.' => 'Nameservers',
'domain.created' => 'Creation Date:',
- 'domain.expires' => 'Expiration Date:'
- );
+ 'domain.expires' => 'Expiration Date:',
+ ];
- $translate = array(
+ $translate = [
'city:' => 'address.city',
'org. name:' => 'organization',
'address1:' => 'address.street.',
'address2:' => 'address.street.',
'state:' => 'address.state',
- 'postal code:' => 'address.zip'
- );
-
- $r = get_blocks($data_str, $items, true);
- $r['owner'] = get_contact($r['owner'], $translate);
- $r['admin'] = get_contact($r['admin'], $translate, true);
- $r['tech'] = get_contact($r['tech'], $translate, true);
- return format_dates($r, 'dmy');
- }
+ 'postal code:' => 'address.zip',
+ ];
+ $r = static::getBlocks($data_str, $items, true);
+ $r['owner'] = static::getContact($r['owner'], $translate);
+ $r['admin'] = static::getContact($r['admin'], $translate, true);
+ $r['tech'] = static::getContact($r['tech'], $translate, true);
+
+ return static::formatDates($r, 'dmy');
+ }
}
diff --git a/src/whois.gtld.nicline.php b/src/Handlers/gTLD/NiclineHandler.php
similarity index 77%
rename from src/whois.gtld.nicline.php
rename to src/Handlers/gTLD/NiclineHandler.php
index 5b245716..4e295690 100644
--- a/src/whois.gtld.nicline.php
+++ b/src/Handlers/gTLD/NiclineHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative contact:',
'tech' => 'Technical contact:',
@@ -38,10 +40,9 @@ function parse($data_str, $query) {
'domain.nserver.' => 'Domain servers in listed order:',
'domain.created' => 'Created:',
'domain.expires' => 'Expires:',
- 'domain.changed' => 'Last updated:'
- );
+ 'domain.changed' => 'Last updated:',
+ ];
- return easy_parser($data_str, $items, 'dmy');
+ return static::easyParser($data_str, $items, 'dmy');
}
-
}
diff --git a/src/whois.gtld.onlinenic.php b/src/Handlers/gTLD/OnlinenicHandler.php
similarity index 77%
rename from src/whois.gtld.onlinenic.php
rename to src/Handlers/gTLD/OnlinenicHandler.php
index 361ce65f..36b80a2f 100644
--- a/src/whois.gtld.onlinenic.php
+++ b/src/Handlers/gTLD/OnlinenicHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrator:',
'tech' => 'Technical Contactor:',
@@ -40,10 +42,10 @@ function parse($data_str, $query) {
'domain.nserver' => 'Domain servers in listed order:',
'domain.created' => 'Record created on ',
'domain.expires' => 'Record expired on ',
- 'domain.changed' => 'Record last updated at '
- );
+ 'domain.changed' => 'Record last updated at ',
+ ];
- $extra = array(
+ $extra = [
'tel--' => 'phone',
'tel:' => 'phone',
'tel --:' => 'phone',
@@ -58,22 +60,23 @@ function parse($data_str, $query) {
'city:' => 'address.city',
'province:' => '',
',province:' => '',
- ',country:' => 'address.country'
- );
+ ',country:' => 'address.country',
+ ];
- $r = easy_parser($data_str, $items, 'mdy', $extra, false, true);
+ $r = static::easyParser($data_str, $items, 'mdy', $extra, false, true);
- foreach ($r as $key => $part)
+ foreach ($r as $key => $part) {
if (isset($part['email'])) {
- @list($email, $phone) = explode(' ', $part['email']);
+ @[$email, $phone] = explode(' ', $part['email']);
$email = str_replace('(', '', $email);
$email = str_replace(')', '', $email);
$r[$key]['email'] = $email;
- if ($phone != '')
+ if ('' != $phone) {
$r[$key]['phone'] = $phone;
+ }
}
+ }
return $r;
}
-
}
diff --git a/src/whois.gtld.opensrs.php b/src/Handlers/gTLD/OpensrsHandler.php
similarity index 78%
rename from src/whois.gtld.opensrs.php
rename to src/Handlers/gTLD/OpensrsHandler.php
index aeccbe5f..7c23468e 100644
--- a/src/whois.gtld.opensrs.php
+++ b/src/Handlers/gTLD/OpensrsHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative Contact',
'tech' => 'Technical Contact',
@@ -40,15 +42,15 @@ function parse($data_str, $query) {
'domain.changed' => 'Record last updated on',
'domain.created' => 'Record created on',
'domain.expires' => 'Record expires on',
- 'domain.sponsor' => 'Registrar of Record:'
- );
+ 'domain.sponsor' => 'Registrar of Record:',
+ ];
- $r = easy_parser($data_str, $items, 'dmy', array(), false, true);
+ $r = static::easyParser($data_str, $items, 'dmy', [], false, true);
- if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor']))
+ if (isset($r['domain']['sponsor']) && is_array($r['domain']['sponsor'])) {
$r['domain']['sponsor'] = $r['domain']['sponsor'][0];
+ }
return $r;
}
-
}
diff --git a/src/whois.gtld.ovh.php b/src/Handlers/gTLD/OvhHandler.php
similarity index 77%
rename from src/whois.gtld.ovh.php
rename to src/Handlers/gTLD/OvhHandler.php
index 9e889da6..e3e62f12 100644
--- a/src/whois.gtld.ovh.php
+++ b/src/Handlers/gTLD/OvhHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative Contact:',
'tech' => 'Technical Contact:',
@@ -38,10 +40,9 @@ function parse($data_str, $query) {
'domain.sponsor' => 'Registrar of Record:',
'domain.changed' => 'Record last updated on',
'domain.expires' => 'Record expires on',
- 'domain.created' => 'Record created on'
- );
+ 'domain.created' => 'Record created on',
+ ];
- return easy_parser($data_str, $items, 'mdy', array(), false, true);
+ return static::easyParser($data_str, $items, 'mdy', [], false, true);
}
-
}
diff --git a/src/whois.gtld.psiusa.php b/src/Handlers/gTLD/PsiUsaHandler.php
similarity index 91%
rename from src/whois.gtld.psiusa.php
rename to src/Handlers/gTLD/PsiUsaHandler.php
index 425956de..f17f4fe9 100644
--- a/src/whois.gtld.psiusa.php
+++ b/src/Handlers/gTLD/PsiUsaHandler.php
@@ -1,4 +1,5 @@
'domain.created',
'last-changed:' => 'domain.changed',
'status:' => 'domain.status',
@@ -78,9 +80,8 @@ function parse($data_str, $query) {
'[zone-c] phone:' => 'zone.phone',
'[zone-c] fax:' => 'zone.fax',
'[zone-c] email:' => 'zone.email',
- );
+ ];
- return generic_parser_b($data_str, $items);
+ return static::generic_parser_b($data_str, $items);
}
-
}
diff --git a/src/whois.gtld.publicdomainregistry.php b/src/Handlers/gTLD/PublicdomainregistryHandler.php
similarity index 80%
rename from src/whois.gtld.publicdomainregistry.php
rename to src/Handlers/gTLD/PublicdomainregistryHandler.php
index 42e45e9b..54a6b505 100644
--- a/src/whois.gtld.publicdomainregistry.php
+++ b/src/Handlers/gTLD/PublicdomainregistryHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'owner#' => '(Registrant):',
'admin' => 'Administrative Contact',
@@ -44,10 +46,9 @@ function parse($data_str, $query) {
'domain.created#' => 'Creation Date:',
'domain.expires' => 'Record expires on',
'domain.expires#' => 'Expiration Date:',
- 'domain.status' => 'Status:'
- );
+ 'domain.status' => 'Status:',
+ ];
- return easy_parser($data_str, $items, 'mdy', array(), true, true);
+ return static::easyParser($data_str, $items, 'mdy', [], true, true);
}
-
}
diff --git a/src/whois.gtld.register.php b/src/Handlers/gTLD/RegisterHandler.php
similarity index 81%
rename from src/whois.gtld.register.php
rename to src/Handlers/gTLD/RegisterHandler.php
index 216659a3..304006d8 100644
--- a/src/whois.gtld.register.php
+++ b/src/Handlers/gTLD/RegisterHandler.php
@@ -1,4 +1,5 @@
'Registrant Info:',
'owner#1' => 'Organization:',
'owner#2' => 'Registrant:',
@@ -41,7 +43,6 @@ function parse($data_str, $query) {
'domain.sponsor#0' => 'Registrar Name....:',
'domain.sponsor#1' => 'Registration Service Provided By:',
'domain.referrer' => 'Registrar Homepage:',
- 'domain.nserver' => 'Domain servers in listed order:',
'domain.nserver' => 'DNS Servers:',
'domain.name' => 'Domain name:',
'domain.created#0' => 'Created on..............:',
@@ -49,10 +50,9 @@ function parse($data_str, $query) {
'domain.expires#0' => 'Expires on..............:',
'domain.expires#1' => 'Expiration date:',
'domain.changed' => 'Record last updated on..:',
- 'domain.status' => 'Status:'
- );
+ 'domain.status' => 'Status:',
+ ];
- return easy_parser($data_str, $items, 'ymd');
+ return static::easyParser($data_str, $items, 'ymd');
}
-
}
diff --git a/src/whois.gtld.rrpproxy.php b/src/Handlers/gTLD/RrpproxyHandler.php
similarity index 90%
rename from src/whois.gtld.rrpproxy.php
rename to src/Handlers/gTLD/RrpproxyHandler.php
index 90c1ed72..ea9d5f1b 100644
--- a/src/whois.gtld.rrpproxy.php
+++ b/src/Handlers/gTLD/RrpproxyHandler.php
@@ -1,4 +1,5 @@
'domain.created',
'updated-date:' => 'domain.changed',
'registration-expiration-date:' => 'domain.expires',
@@ -79,10 +81,9 @@ function parse($data_str, $query) {
'billing-country:' => 'billing.address.country',
'billing-phone:' => 'billing.phone',
'billing-fax:' => 'billing.fax',
- 'billing-email:' => 'billing.email'
- );
+ 'billing-email:' => 'billing.email',
+ ];
- return generic_parser_b($data_str, $items);
+ return static::generic_parser_b($data_str, $items);
}
-
}
diff --git a/src/whois.gtld.schlund.php b/src/Handlers/gTLD/SchlundHandler.php
similarity index 89%
rename from src/whois.gtld.schlund.php
rename to src/Handlers/gTLD/SchlundHandler.php
index 1296ffe4..b85d5d09 100644
--- a/src/whois.gtld.schlund.php
+++ b/src/Handlers/gTLD/SchlundHandler.php
@@ -1,4 +1,5 @@
'domain.created',
'last-changed:' => 'domain.changed',
'status:' => 'domain.status',
@@ -73,10 +75,9 @@ function parse($data_str, $query) {
'bill-c-city:' => 'billing.address.city',
'bill-c-ccode:' => 'billing.address.country',
'bill-c-phone:' => 'billing.phone',
- 'bill-c-email:' => 'billing.email'
- );
+ 'bill-c-email:' => 'billing.email',
+ ];
- return generic_parser_b($data_str, $items);
+ return static::generic_parser_b($data_str, $items);
}
-
}
diff --git a/src/whois.gtld.srsplus.php b/src/Handlers/gTLD/SrsplusHandler.php
similarity index 76%
rename from src/whois.gtld.srsplus.php
rename to src/Handlers/gTLD/SrsplusHandler.php
index 8f63b895..00091195 100644
--- a/src/whois.gtld.srsplus.php
+++ b/src/Handlers/gTLD/SrsplusHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative',
'tech' => 'Technical',
@@ -38,10 +40,9 @@ function parse($data_str, $query) {
'domain.name' => 'Domain Name:',
'domain.nserver' => 'Domain servers:',
'domain.created' => 'Record created on',
- 'domain.expires' => 'Record expires on'
- );
+ 'domain.expires' => 'Record expires on',
+ ];
- return easy_parser($data_str, $items, 'ymd', array(), true, true);
+ return static::easyParser($data_str, $items, 'ymd', [], true, true);
}
-
}
diff --git a/src/whois.gtld.tmagnic.php b/src/Handlers/gTLD/TmagnicHandler.php
similarity index 78%
rename from src/whois.gtld.tmagnic.php
rename to src/Handlers/gTLD/TmagnicHandler.php
index 4c473b19..188c8de1 100644
--- a/src/whois.gtld.tmagnic.php
+++ b/src/Handlers/gTLD/TmagnicHandler.php
@@ -1,4 +1,5 @@
'Owner Contact:',
'admin' => 'Admin Contact',
'tech' => 'Technical Contact',
@@ -39,10 +41,9 @@ function parse($data_str, $query) {
'domain.expires' => 'Record expires on: ',
'domain.changed' => 'Record last updated on: ',
'' => 'Zone Contact',
- '#' => 'Punycode Name:'
- );
+ '#' => 'Punycode Name:',
+ ];
- return easy_parser($data_str, $items, 'ymd', array(), false, true);
+ return static::easyParser($data_str, $items, 'ymd', [], false, true);
}
-
}
diff --git a/src/whois.gtld.tvcorp.php b/src/Handlers/gTLD/TvcorpHandler.php
similarity index 76%
rename from src/whois.gtld.tvcorp.php
rename to src/Handlers/gTLD/TvcorpHandler.php
index c30e58e1..e3a9220f 100644
--- a/src/whois.gtld.tvcorp.php
+++ b/src/Handlers/gTLD/TvcorpHandler.php
@@ -1,4 +1,5 @@
'Registrant',
'admin' => 'Admin',
'tech' => 'Technical',
'billing' => 'Billing',
'domain.nserver.' => 'Domain servers:',
'domain.created' => 'Record created on',
- 'domain.expires' => 'Record expires on'
- );
+ 'domain.expires' => 'Record expires on',
+ ];
- return easy_parser($data_str, $items, 'mdy');
+ return static::easyParser($data_str, $items, 'mdy');
}
-
}
diff --git a/src/whois.gtld.wildwestdomains.php b/src/Handlers/gTLD/WildwestdomainsHandler.php
similarity index 78%
rename from src/whois.gtld.wildwestdomains.php
rename to src/Handlers/gTLD/WildwestdomainsHandler.php
index e1778527..2d7b4c9e 100644
--- a/src/whois.gtld.wildwestdomains.php
+++ b/src/Handlers/gTLD/WildwestdomainsHandler.php
@@ -1,4 +1,5 @@
'Registrant:',
'admin' => 'Administrative Contact:',
'tech' => 'Technical Contact:',
@@ -39,10 +41,9 @@ function parse($data_str, $query) {
'domain.nserver' => 'Domain servers in listed order:',
'domain.created' => 'Created on:',
'domain.expires' => 'Expires on:',
- 'domain.changed' => 'Last Updated on:'
- );
+ 'domain.changed' => 'Last Updated on:',
+ ];
- return easy_parser($data_str, $items, 'mdy');
+ return static::easyParser($data_str, $items, 'mdy');
}
-
}
diff --git a/src/IpTools.php b/src/IpTools.php
index 301c4aa9..43ff3366 100644
--- a/src/IpTools.php
+++ b/src/IpTools.php
@@ -1,4 +1,5 @@
validIpv4($ip, $strict) || $this->validIpv6($ip, $strict);
- break;
+
case 'ipv4':
return $this->validIpv4($ip, $strict);
- break;
+
case 'ipv6':
return $this->validIpv6($ip, $strict);
- break;
}
+
return false;
}
/**
* Check if given IP is valid ipv4 address and doesn't belong to private and
- * reserved ranges
- *
- * @param string $ip Ip address
- * @param boolean $strict If true - fail validation on reserved and private ip ranges
+ * reserved ranges.
*
- * @return boolean
+ * @param string $ip Ip address
+ * @param bool $strict If true - fail validation on reserved and private ip ranges
*/
- public function validIpv4($ip, $strict = true)
+ public function validIpv4(string $ip, bool $strict = true): bool
{
$flags = FILTER_FLAG_IPV4;
if ($strict) {
- $flags = FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE;
+ $flags = FILTER_FLAG_IPV4|FILTER_FLAG_NO_PRIV_RANGE|FILTER_FLAG_NO_RES_RANGE;
}
- if (filter_var($ip, FILTER_VALIDATE_IP, array('flags' => $flags)) !== false) {
- return true;
- }
- return false;
+ return filter_var($ip, FILTER_VALIDATE_IP, ['flags' => $flags]) !== false;
}
/**
- * Check if given IP is valid ipv6 address and doesn't belong to private ranges
+ * Check if given IP is valid ipv6 address and doesn't belong to private ranges.
*
- * @param string $ip Ip address
- * @param boolean $strict If true - fail validation on reserved and private ip ranges
- *
- * @return boolean
+ * @param string $ip Ip address
+ * @param bool $strict If true - fail validation on reserved and private ip ranges
*/
- public function validIpv6($ip, $strict = true)
+ public function validIpv6(string $ip, bool $strict = true): bool
{
$flags = FILTER_FLAG_IPV6;
if ($strict) {
- $flags = FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE;
+ $flags = FILTER_FLAG_IPV6|FILTER_FLAG_NO_PRIV_RANGE;
}
- if (filter_var($ip, FILTER_VALIDATE_IP, array('flags' => $flags)) !== false) {
- return true;
- }
-
- return false;
+ return filter_var($ip, FILTER_VALIDATE_IP, ['flags' => $flags]) !== false;
}
/**
- * Try to get real IP from client web request
+ * Try to get real IP from client web request.
*
* @return string
*/
@@ -133,12 +121,12 @@ public function getClientIp()
}
/**
- * Convert CIDR to net range
+ * Convert CIDR to net range.
*
* @TODO provide example
- *
- * @param string $net
+ * @param string $net
* @return string
+ * @noinspection TypeUnsafeComparisonInspection
*/
public function cidrConv($net)
{
@@ -152,7 +140,7 @@ public function cidrConv($net)
}
$bits1 = str_pad(decbin(ip2long($start)), 32, '0', 'STR_PAD_LEFT');
- $net = pow(2, (32 - substr(strstr($net, '/'), 1))) - 1;
+ $net = pow(2, 32 - substr(strstr($net, '/'), 1)) - 1;
$bits2 = str_pad(decbin($net), 32, '0', 'STR_PAD_LEFT');
$final = '';
@@ -168,6 +156,6 @@ public function cidrConv($net)
}
}
- return $start . " - " . long2ip(bindec($final));
+ return $start.' - '.long2ip(bindec($final));
}
}
diff --git a/src/Utils.php b/src/Utils.php
index ef583c54..3676bfd6 100644
--- a/src/Utils.php
+++ b/src/Utils.php
@@ -1,4 +1,5 @@
tags
- * @param $obj
+ * Wrap result in tags.
+ *
+ * @param mixed $obj
* @return string
*/
public function showObject(&$obj)
{
$r = $this->debugObject($obj);
- return "$r
\n";
+
+ return "{$r}\n";
}
/**
- * Return object or array as formatted string
- * @param $obj
- * @param int $indent
+ * Return object or array as formatted string.
+ *
+ * @param mixed $obj
* @return string
*/
- public function debugObject($obj, $indent = 0)
+ public function debugObject($obj, int $indent = 0)
{
- if (is_array($obj)) {
- $return = '';
- foreach ($obj as $k => $v) {
- $return .= str_repeat(' ', $indent);
- if (is_array($v)) {
- $return .= $k . "->Array\n";
- $return .= $this->debugObject($v, $indent + 1);
- } else {
- $return .= $k . "->$v\n";
- }
- }
+ $return = '';
+
+ if (!is_array($obj)) {
return $return;
}
- }
- public function nsRrDefined($query)
- {
- return checkdnsrr($query, 'NS');
+ foreach ($obj as $k => $v) {
+ $return .= str_repeat(' ', $indent);
+ if (is_array($v)) {
+ $return .= $k."->Array\n";
+ $return .= $this->debugObject($v, $indent + 1);
+ } else {
+ $return .= $k."->{$v}\n";
+ }
+ }
+
+ return $return;
}
/**
- * Get nice HTML output
+ * Get nice HTML output.
+ *
+ * @param mixed $result
+ * @param mixed $link_myself
+ * @param mixed $params
*/
public function showHTML($result, $link_myself = true, $params = 'query=$0&output=nice')
{
-
// adds links for HTML output
- $email_regex = "/([-_\w\.]+)(@)([-_\w\.]+)\b/i";
- $html_regex = "/(?:^|\b)((((http|https|ftp):\/\/)|(www\.))([\w\.]+)([,:%#&\/?~=\w+\.-]+))(?:\b|$)/is";
- $ip_regex = "/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/i";
+ $email_regex = '/([-_\w\.]+)(@)([-_\w\.]+)\b/i';
+ $html_regex = '/(?:^|\b)((((http|https|ftp):\/\/)|(www\.))([\w\.]+)([,:%#&\/?~=\w+\.-]+))(?:\b|$)/is';
+ $ip_regex = '/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/i';
$out = '';
$lempty = true;
@@ -86,17 +90,16 @@ public function showHTML($result, $link_myself = true, $params = 'query=$0&o
foreach ($result['rawdata'] as $line) {
$line = trim($line);
- if ($line == '') {
+ if ('' == $line) {
if ($lempty) {
continue;
- } else {
- $lempty = true;
}
+ $lempty = true;
} else {
$lempty = false;
}
- $out .= $line . "\n";
+ $out .= $line."\n";
}
if ($lempty) {
@@ -108,27 +111,28 @@ public function showHTML($result, $link_myself = true, $params = 'query=$0&o
$out = preg_replace_callback(
$html_regex,
function ($matches) {
- if (substr($matches[0], 0, 4) == 'www.') {
- $web = $matches[0];
- $url = 'http://' . $web;
+ $web = $matches[0];
+ if ('www.' == substr($matches[0], 0, 4)) {
+ $url = 'http://'.$web;
} else {
- $web = $matches[0];
$url = $web;
}
- return '' . $web . '';
+ return ''.$web.'';
},
$out
);
if ($link_myself) {
- if ($params[0] == '/') {
+ if ('/' == $params[0]) {
$link = $params;
} else {
- $link = $_SERVER['PHP_SELF'] . '?' . $params;
+ $link = $_SERVER['PHP_SELF'].'?'.$params;
}
- $out = preg_replace($ip_regex, '$0', $out);
+ if (strpos($out, '$0', $out);
+ }
if (isset($result['regrinfo']['domain']['nserver'])) {
$nserver = $result['regrinfo']['domain']['nserver'];
@@ -141,9 +145,8 @@ function ($matches) {
}
if (is_array($nserver)) {
- reset($nserver);
- while (list($host, $ip) = each($nserver)) {
- $url = '$host";
+ foreach ($nserver as $host => $ip) {
+ $url = '{$host}";
$out = str_replace($host, $url, $out);
$out = str_replace(strtoupper($host), $url, $out);
}
@@ -151,11 +154,48 @@ function ($matches) {
}
// Add bold field names
- $out = preg_replace("/(?m)^([-\s\.&;'\w\t\(\)\/]+:\s*)/", '$1', $out);
+ $out = preg_replace("/(?m)^([-\\s\\.&;'\\w\t\\(\\)\\/]+:\\s*)/", '$1', $out);
// Add italics for disclaimer
- $out = preg_replace("/(?m)^(%.*)/", '$0', $out);
+ $out = preg_replace('/(?m)^(%.*)/', '$0', $out);
return str_replace("\n", "
\n", $out);
}
+
+ public static function utf8Encode($str): string
+ {
+ // PHP 7.2
+ if (PHP_VERSION_ID >= 70200 && PHP_VERSION_ID < 80000) {
+ return utf8_encode($str);
+ }
+
+ // PHP >= 8.0 + ext-mbstring
+ if (function_exists('mb_convert_encoding')) {
+ return mb_convert_encoding($str, 'UTF-8', 'ISO-8859-1');
+ }
+
+ // PHP >= 8.0 + ext-iconv
+ if (function_exists('iconv')) {
+ $converted = @iconv('ISO-8859-1', 'UTF-8', $str);
+ if ($converted !== false) {
+ return $converted;
+ }
+ }
+
+ // PHP >= 8.0 without "ext-mbstring" or "ext-iconv" - ugly, but better than nothing
+ return strtr($str, [
+ "\xE0" => 'à', "\xE1" => 'á', "\xE2" => 'â', "\xE3" => 'ã', "\xE4" => 'ä', "\xE5" => 'å',
+ "\xE8" => 'è', "\xE9" => 'é', "\xEA" => 'ê', "\xEB" => 'ë',
+ "\xEC" => 'ì', "\xED" => 'í', "\xEE" => 'î', "\xEF" => 'ï',
+ "\xF2" => 'ò', "\xF3" => 'ó', "\xF4" => 'ô', "\xF5" => 'õ', "\xF6" => 'ö',
+ "\xF9" => 'ù', "\xFA" => 'ú', "\xFB" => 'û', "\xFC" => 'ü',
+ "\xC0" => 'À', "\xC1" => 'Á', "\xC2" => 'Â', "\xC3" => 'Ã', "\xC4" => 'Ä', "\xC5" => 'Å',
+ "\xC8" => 'È', "\xC9" => 'É', "\xCA" => 'Ê', "\xCB" => 'Ë',
+ "\xCC" => 'Ì', "\xCD" => 'Í', "\xCE" => 'Î', "\xCF" => 'Ï',
+ "\xD2" => 'Ò', "\xD3" => 'Ó', "\xD4" => 'Ô', "\xD5" => 'Õ', "\xD6" => 'Ö',
+ "\xD9" => 'Ù', "\xDA" => 'Ú', "\xDB" => 'Û', "\xDC" => 'Ü',
+ "\xF1" => 'ñ', "\xD1" => 'Ñ',
+ "\xDF" => 'ß',
+ ]);
+ }
}
diff --git a/src/Whois.php b/src/Whois.php
index b58604d6..ec1d80da 100644
--- a/src/Whois.php
+++ b/src/Whois.php
@@ -1,4 +1,5 @@
lookup($domain, $is_utf);
+
+ return implode(PHP_EOL, $lookup['rawdata']);
+ }
+
+ /**
+ * Lookup query.
*
+ * @param string $query Domain name or other entity
+ * @param bool $is_utf True if domain name encoding is utf-8 already, otherwise convert it with utf8_encode() first
+ * @throws InvalidCharacterException
*/
public function lookup($query = '', $is_utf = true)
{
// start clean
- $this->query = array('status' => '');
+ $this->query = ['status' => ''];
$query = trim($query);
- $idn = new \idna_convert();
+ $idn = new ToIdn();
- if ($is_utf) {
- $query = $idn->encode($query);
- } else {
- $query = $idn->encode(utf8_encode($query));
+ try {
+ if ($is_utf) {
+ $query = $idn->convert($query);
+ } else {
+ $query = $idn->convert(Utils::utf8Encode($query));
+ }
+ } catch (AlreadyPunycodeException $e) {
+ // $query is already a Punycode
}
// If domain to query was not set
if (!isset($query) || $query == '') {
// Configure to use default whois server
$this->query['server'] = $this->nsiRegistry;
+
return;
}
@@ -106,9 +129,8 @@ public function lookup($query = '', $is_utf = true)
$this->query['args'] = $ip;
} else {
$this->query['server'] = 'whois.arin.net';
- $this->query['args'] = "n $ip";
- $this->query['file'] = 'whois.ip.php';
- $this->query['handler'] = 'ip';
+ $this->query['args'] = "n {$ip}";
+ $this->query['handler'] = IpHandler::class;
}
$this->query['host_ip'] = $ip;
$this->query['query'] = $ip;
@@ -116,7 +138,6 @@ public function lookup($query = '', $is_utf = true)
$this->query['host_name'] = @gethostbyaddr($ip);
return $this->getData('', $this->deepWhois);
- break;
case self::QTYPE_IPV6:
// IPv6 AS Prepare to do lookup via the 'ip' handler
@@ -126,30 +147,28 @@ public function lookup($query = '', $is_utf = true)
$this->query['server'] = $this->WHOIS_SPECIAL['ip'];
} else {
$this->query['server'] = 'whois.ripe.net';
- $this->query['file'] = 'whois.ip.ripe.php';
- $this->query['handler'] = 'ripe';
+ $this->query['handler'] = RipeHandler::class;
}
$this->query['query'] = $ip;
$this->query['tld'] = 'ip';
+
return $this->getData('', $this->deepWhois);
- break;
case self::QTYPE_AS:
// AS Prepare to do lookup via the 'ip' handler
$ip = @gethostbyname($query);
$this->query['server'] = 'whois.arin.net';
- if (strtolower(substr($ip, 0, 2)) == 'as') {
+ if ('as' == strtolower(substr($ip, 0, 2))) {
$as = substr($ip, 2);
} else {
$as = $ip;
}
- $this->query['args'] = "a $as";
- $this->query['file'] = 'whois.ip.php';
- $this->query['handler'] = 'ip';
+ $this->query['args'] = "a {$as}";
+ $this->query['handler'] = IpHandler::class;
$this->query['query'] = $ip;
$this->query['tld'] = 'as';
+
return $this->getData('', $this->deepWhois);
- break;
}
// Build array of all possible tld's for that domain
@@ -157,7 +176,7 @@ public function lookup($query = '', $is_utf = true)
$server = '';
$dp = explode('.', $domain);
$np = count($dp) - 1;
- $tldtests = array();
+ $tldtests = [];
for ($i = 0; $i < $np; $i++) {
array_shift($dp);
@@ -165,14 +184,12 @@ public function lookup($query = '', $is_utf = true)
}
// Search the correct whois server
- $special_tlds = $this->WHOIS_SPECIAL;
-
foreach ($tldtests as $tld) {
// Test if we know in advance that no whois server is
// available for this domain and that we can get the
// data via http or whois request
- if (isset($special_tlds[$tld])) {
- $val = $special_tlds[$tld];
+ if (isset($this->WHOIS_SPECIAL[$tld])) {
+ $val = $this->WHOIS_SPECIAL[$tld];
if ($val == '') {
return $this->unknown();
@@ -181,6 +198,7 @@ public function lookup($query = '', $is_utf = true)
$domain = substr($query, 0, -strlen($tld) - 1);
$val = str_replace('{domain}', $domain, $val);
$server = str_replace('{tld}', $tld, $val);
+
break;
}
}
@@ -190,12 +208,13 @@ public function lookup($query = '', $is_utf = true)
// Determine the top level domain, and it's whois server using
// DNS lookups on 'whois-servers.net'.
// Assumes a valid DNS response indicates a recognised tld (!?)
- $cname = $tld . '.whois-servers.net';
+ $cname = $tld.'.whois-servers.net';
if (gethostbyname($cname) == $cname) {
continue;
}
- $server = $tld . '.whois-servers.net';
+ $server = $tld.'.whois-servers.net';
+
break;
}
}
@@ -210,30 +229,29 @@ public function lookup($query = '', $is_utf = true)
// special handler exists for the tld ?
if (isset($this->DATA[$htld])) {
$handler = $this->DATA[$htld];
- break;
- }
- // Regular handler exists for the tld ?
- if (file_exists('whois.' . $htld . '.php')) {
- $handler = $htld;
break;
}
+
+ $handler = $this->loadHandler($htld);
}
// If there is a handler set it
if ($handler != '') {
- $this->query['file'] = "whois.$handler.php";
$this->query['handler'] = $handler;
}
// Special parameters ?
if (isset($this->WHOIS_PARAM[$server])) {
- $this->query['server'] = $this->query['server'] . '?' . str_replace('$', $domain,
- $this->WHOIS_PARAM[$server]);
+ $param = $this->WHOIS_PARAM[$server];
+ $param = str_replace('$domain', $domain, $param);
+ $param = str_replace('$tld', $tld, $param);
+ $this->query['server'] = $this->query['server'].'?'.$param;
}
$result = $this->getData('', $this->deepWhois);
$this->checkDns($result);
+
return $result;
}
@@ -242,21 +260,24 @@ public function lookup($query = '', $is_utf = true)
}
/**
- * Unsupported domains
+ * Unsupported domains.
*/
public function unknown()
{
unset($this->query['server']);
$this->query['status'] = 'error';
- $result = array('rawdata' => array());
- $result['rawdata'][] = $this->query['errstr'][] = $this->query['query'] . ' domain is not supported';
+ $result = ['rawdata' => []];
+ $result['rawdata'][] = $this->query['errstr'][] = $this->query['query'].' domain is not supported';
$this->checkDns($result);
$this->fixResult($result, $this->query['query']);
+
return $result;
}
/**
- * Get nameservers if missing
+ * Get nameservers if missing.
+ *
+ * @param mixed $result
*/
public function checkDns(&$result)
{
@@ -265,7 +286,7 @@ public function checkDns(&$result)
if (!is_array($ns)) {
return;
}
- $nserver = array();
+ $nserver = [];
foreach ($ns as $row) {
$nserver[] = $row['target'];
}
@@ -276,7 +297,10 @@ public function checkDns(&$result)
}
/**
- * Fix and/or add name server information
+ * Fix and/or add name server information.
+ *
+ * @param mixed $result
+ * @param mixed $domain
*/
public function fixResult(&$result, $domain)
{
@@ -303,34 +327,36 @@ public function fixResult(&$result, $domain)
}
/**
- * Guess query type
+ * Guess query type.
*
- * @param string $query
- *
- * @return int Query type
+ * @param string $query
+ * @return int Query type
*/
public function getQueryType($query)
{
- $ipTools = new IpTools;
+ $ipTools = new IpTools();
if ($ipTools->validIp($query, 'ipv4', false)) {
if ($ipTools->validIp($query, 'ipv4')) {
return self::QTYPE_IPV4;
- } else {
- return self::QTYPE_UNKNOWN;
}
- } elseif ($ipTools->validIp($query, 'ipv6', false)) {
+
+ return self::QTYPE_UNKNOWN;
+ }
+ if ($ipTools->validIp($query, 'ipv6', false)) {
if ($ipTools->validIp($query, 'ipv6')) {
return self::QTYPE_IPV6;
- } else {
- return self::QTYPE_UNKNOWN;
}
- } elseif (!empty($query) && strpos($query, '.') !== false) {
+
+ return self::QTYPE_UNKNOWN;
+ }
+ if (!empty($query) && strpos($query, '.') !== false) {
return self::QTYPE_DOMAIN;
- } elseif (!empty($query) && strpos($query, '.') === false) {
+ }
+ if (!empty($query) && strpos($query, '.') === false) {
return self::QTYPE_AS;
- } else {
- return self::QTYPE_UNKNOWN;
}
+
+ return self::QTYPE_UNKNOWN;
}
}
diff --git a/src/WhoisClient.php b/src/WhoisClient.php
index f378d38a..ce688890 100644
--- a/src/WhoisClient.php
+++ b/src/WhoisClient.php
@@ -1,4 +1,5 @@
'',
'type' => 'domain',
'query' => '',
- 'status',
- 'server'
- );
+ 'status' => '',
+ 'server' => '',
+ 'errstr' => [],
+ ];
/** @var string Current release of the package */
- public $codeVersion = null;
+ public $codeVersion;
/** @var string Full code and data version string (e.g. 'Whois2.php v3.01:16') */
public $version;
/**
- * Constructor function
+ * Constructor function.
*/
public function __construct()
{
// Load DATA array
- $servers = require('whois.servers.php');
+ $servers = require 'whois.servers.php';
- $this->DATA = $servers['DATA'];
- $this->NON_UTF8 = $servers['NON_UTF8'];
- $this->WHOIS_PARAM = $servers['WHOIS_PARAM'];
- $this->WHOIS_SPECIAL = $servers['WHOIS_SPECIAL'];
+ $this->DATA = $servers['DATA'];
+ $this->NON_UTF8 = $servers['NON_UTF8'];
+ $this->WHOIS_PARAM = $servers['WHOIS_PARAM'];
+ $this->WHOIS_SPECIAL = $servers['WHOIS_SPECIAL'];
$this->WHOIS_GTLD_HANDLER = $servers['WHOIS_GTLD_HANDLER'];
- $this->codeVersion = file_get_contents(__DIR__ . '/../VERSION');
+ $this->codeVersion = file_get_contents(__DIR__.'/../VERSION');
// Set version
- $this->version = sprintf("phpWhois v%s", $this->codeVersion);
+ $this->version = sprintf('phpWhois v%s', $this->codeVersion);
}
/**
- * Perform lookup
+ * Perform lookup.
*
+ * @param mixed $query
* @return array Raw response as array separated by "\n"
*/
public function getRawData($query)
{
-
$this->query['query'] = $query;
// clear error description
if (isset($this->query['errstr'])) {
- unset($this->query['errstr']);
+ $this->query['errstr'] = [];
}
if (!isset($this->query['server'])) {
$this->query['status'] = 'error';
$this->query['errstr'][] = 'No server specified';
- return (array());
+
+ return [];
}
// Check if protocol is http
- if (substr($this->query['server'], 0, 7) == 'http://' ||
- substr($this->query['server'], 0, 8) == 'https://'
+ if (
+ strpos($this->query['server'], 'http://') === 0
+ || strpos($this->query['server'], 'https://') === 0
) {
$output = $this->httpQuery($this->query['server']);
if (!$output) {
$this->query['status'] = 'error';
- $this->query['errstr'][] = 'Connect failed to: ' . $this->query['server'];
- return (array());
+ $this->query['errstr'][] = 'Connect failed to: '.$this->query['server'];
+
+ return [];
}
- $this->query['args'] = substr(strchr($this->query['server'], '?'), 1);
+ $this->query['args'] = substr(strstr($this->query['server'], '?'), 1);
$this->query['server'] = strtok($this->query['server'], '?');
- if (substr($this->query['server'], 0, 7) == 'http://') {
+ if (strpos($this->query['server'], 'http://') === 0) {
$this->query['server_port'] = 80;
} else {
$this->query['server_port'] = 443;
@@ -149,10 +156,9 @@ public function getRawData($query)
$query_args = trim($parts[1]);
// replace substitution parameters
- $query_args = str_replace('{query}', $query, $query_args);
- $query_args = str_replace('{version}', 'phpWhois' . $this->codeVersion, $query_args);
+ $query_args = str_replace(['{query}', '{version}'], [$query, 'phpWhois'.$this->codeVersion], $query_args);
- $iptools = new IpTools;
+ $iptools = new IpTools();
if (strpos($query_args, '{ip}') !== false) {
$query_args = str_replace('{ip}', $iptools->getClientIp(), $query_args);
}
@@ -170,11 +176,11 @@ public function getRawData($query)
$this->query['args'] = $query_args;
- if (substr($this->query['server'], 0, 9) == 'rwhois://') {
+ if (strpos($this->query['server'], 'rwhois://') === 0) {
$this->query['server'] = substr($this->query['server'], 9);
}
- if (substr($this->query['server'], 0, 8) == 'whois://') {
+ if (strpos($this->query['server'], 'whois://') === 0) {
$this->query['server'] = substr($this->query['server'], 8);
}
@@ -192,38 +198,38 @@ public function getRawData($query)
if ($ptr === false) {
$this->query['status'] = 'error';
- $this->query['errstr'][] = 'Connect failed to: ' . $this->query['server'];
- return array();
+ $this->query['errstr'][] = 'Connect failed to: '.$this->query['server'];
+
+ return [];
}
stream_set_timeout($ptr, $this->stimeout);
stream_set_blocking($ptr, 0);
// Send query
- fputs($ptr, trim($query_args) . "\r\n");
+ fwrite($ptr, trim($query_args)."\r\n");
// Prepare to receive result
$raw = '';
$start = time();
$null = null;
- $r = array($ptr);
+ $r = [$ptr];
while (!feof($ptr)) {
- if (!empty($r)) {
- if (stream_select($r, $null, $null, $this->stimeout)) {
- $raw .= fgets($ptr, $this->buffer);
- }
+ if (!empty($r) && stream_select($r, $null, $null, $this->stimeout)) {
+ $raw .= fgets($ptr, $this->buffer);
}
if (time() - $start > $this->stimeout) {
$this->query['status'] = 'error';
- $this->query['errstr'][] = 'Timeout reading from ' . $this->query['server'];
- return array();
+ $this->query['errstr'][] = 'Timeout reading from '.$this->query['server'];
+
+ return [];
}
}
if (array_key_exists($this->query['server'], $this->NON_UTF8)) {
- $raw = utf8_encode($raw);
+ $raw = Utils::utf8Encode($raw);
}
$output = explode("\n", $raw);
@@ -238,24 +244,24 @@ public function getRawData($query)
}
/**
- * Perform lookup
+ * Perform lookup.
*
+ * @param mixed $query
+ * @param mixed $deep_whois
* @return array The *rawdata* element contains an
- * array of lines gathered from the whois query. If a top level domain
- * handler class was found for the domain, other elements will have been
- * populated too.
+ * array of lines gathered from the whois query. If a top level domain
+ * handler class was found for the domain, other elements will have been
+ * populated too.
*/
-
public function getData($query = '', $deep_whois = true)
{
-
// If domain to query passed in, use it, otherwise use domain from initialisation
$query = !empty($query) ? $query : $this->query['query'];
$output = $this->getRawData($query);
// Create result and set 'rawdata'
- $result = array('rawdata' => $output);
+ $result = ['rawdata' => $output];
$result = $this->setWhoisInfo($result);
// Return now on error
@@ -296,24 +302,24 @@ public function getData($query = '', $deep_whois = true)
}
// Fix/add nameserver information
- if (method_exists($this, 'fixResult') && $this->query['tld'] != 'ip') {
+ if (method_exists($this, 'fixResult') && $this->query['tld'] !== 'ip') {
$this->fixResult($result, $query);
}
- return ($result);
+ return $result;
}
/**
- * Adds whois server query information to result
+ * Adds whois server query information to result.
*
- * @param $result array Result array
+ * @param $result array Result array
* @return array Original result array with server query information
*/
public function setWhoisInfo($result)
{
- $info = array(
+ $info = [
'server' => $this->query['server'],
- );
+ ];
if (!empty($this->query['args'])) {
$info['args'] = $this->query['args'];
@@ -341,15 +347,12 @@ public function setWhoisInfo($result)
}
/**
- * Convert html output to plain text
+ * Convert html output to plain text.
*
- * @return array Rawdata
+ * @return array|false Rawdata
*/
public function httpQuery()
{
-
- //echo ini_get('allow_url_fopen');
- //if (ini_get('allow_url_fopen'))
$lines = @file($this->query['server']);
if (!$lines) {
@@ -359,43 +362,39 @@ public function httpQuery()
$output = '';
$pre = '';
- while (list($key, $val) = each($lines)) {
+ foreach ($lines as $val) {
$val = trim($val);
- $pos = strpos(strtoupper($val), '');
+ $pos = stripos($val, '');
if ($pos !== false) {
$pre = "\n";
- $output .= substr($val, 0, $pos) . "\n";
+ $output .= substr($val, 0, $pos)."\n";
$val = substr($val, $pos + 5);
}
- $pos = strpos(strtoupper($val), '');
+ $pos = stripos($val, '
');
if ($pos !== false) {
$pre = '';
- $output .= substr($val, 0, $pos) . "\n";
+ $output .= substr($val, 0, $pos)."\n";
$val = substr($val, $pos + 6);
}
- $output .= $val . $pre;
+ $output .= $val.$pre;
}
- $search = array(
+ $search = [
'
', '', '',
'', '', '',
'
', '
', '',
- '', '', '');
+ '', '', ''];
$output = str_replace($search, "\n", $output);
- $output = str_replace('
2) {
@@ -406,24 +405,23 @@ public function httpQuery()
}
$rawdata[] = $val;
}
+
return $rawdata;
}
/**
* Open a socket to the whois server.
*
- * @param string|null $server Server address to connect. If null, $this->query['server'] will be used
- *
- * @return resource|false Returns a socket connection pointer on success, or -1 on failure
+ * @param null|string $server Server address to connect. If null, $this->query['server'] will be used
+ * @return false|resource Returns a socket connection pointer on success, or -1 on failure
*/
public function connect($server = null)
{
-
if (empty($server)) {
$server = $this->query['server'];
}
- /** @TODO Throw an exception here */
+ // @TODO Throw an exception here
if (empty($server)) {
return false;
}
@@ -449,12 +447,13 @@ public function connect($server = null)
if ($ptr > 0) {
$this->query['status'] = 'ok';
+
return $ptr;
}
// Failed this attempt
$this->query['status'] = 'error';
- $this->query['error'][] = $errstr;
+ $this->query['error'][] = "[{$errno}] {$errstr}";
$retry++;
// Sleep before retrying
@@ -468,36 +467,27 @@ public function connect($server = null)
/**
* Post-process result with handler class.
*
+ * @param mixed $result
+ * @param mixed $deep_whois
* @return array On success, returns the result from the handler.
- * On failure, returns passed result unaltered.
+ * On failure, returns passed result unaltered.
*/
-
public function process(&$result, $deep_whois = true)
{
+ $handler = $this->loadHandler($this->query['handler']);
- $handler_name = str_replace('.', '_', $this->query['handler']);
-
- // If the handler has not already been included somehow, include it now
- $HANDLER_FLAG = sprintf("__%s_HANDLER__", strtoupper($handler_name));
-
- if (!defined($HANDLER_FLAG)) {
- include($this->query['file']);
- }
+ if ($handler === false) {
+ $this->query['errstr'][] = "Can't find {$this->query['handler']} ";
- // If the handler has still not been included, append to query errors list and return
- if (!defined($HANDLER_FLAG)) {
- $this->query['errstr'][] = "Can't find $handler_name handler: " . $this->query['file'];
return $result;
}
- if (!$this->gtldRecurse && $this->query['file'] == 'whois.gtld.php') {
+ if (!$this->gtldRecurse && ($handler === GtldHandler::class)) {
return $result;
}
// Pass result to handler
- $object = $handler_name . '_handler';
-
- $handler = new $object('');
+ $handler = new $handler('');
// If handler returned an error, append it to the query errors list
if (isset($handler->query['errstr'])) {
@@ -506,21 +496,19 @@ public function process(&$result, $deep_whois = true)
$handler->deepWhois = $deep_whois;
- // Process
- $res = $handler->parse($result, $this->query['query']);
-
- // Return the result
- return $res;
+ // Process and return the result
+ return $handler->parse($result, $this->query['query']);
}
/**
- * Does more (deeper) whois
+ * Does more (deeper) whois.
*
+ * @param mixed $query
+ * @param mixed $result
* @return array Resulting array
*/
public function deepWhois($query, $result)
{
-
if (!isset($result['regyinfo']['whois'])) {
return $result;
}
@@ -537,18 +525,15 @@ public function deepWhois($query, $result)
$this->query['handler'] = $this->WHOIS_GTLD_HANDLER[$wserver];
} else {
$parts = explode('.', $wserver);
- $hname = strtolower($parts[1]);
-
- if (($fp = @fopen('whois.gtld.' . $hname . '.php', 'r', 1)) and fclose($fp)) {
- $this->query['handler'] = $hname;
+ $handler = $this->loadHandler(strtolower($parts[1]));
+ if ($handler !== false) {
+ $this->query['handler'] = $handler;
}
}
if (!empty($this->query['handler'])) {
- $this->query['file'] = sprintf('whois.gtld.%s.php', $this->query['handler']);
- $regrinfo = $this->process($subresult); //$result['rawdata']);
+ $regrinfo = $this->process($subresult); // $result['rawdata']);
$result['regrinfo'] = $this->mergeResults($result['regrinfo'], $regrinfo);
- //$result['rawdata'] = $subresult;
}
}
@@ -556,27 +541,25 @@ public function deepWhois($query, $result)
}
/**
- * Merge results
- *
- * @param array $a1
- * @param array $a2
+ * Merge results.
*
+ * @param array $a1
+ * @param array $a2
* @return array
*/
public function mergeResults($a1, $a2)
{
-
reset($a2);
- while (list($key, $val) = each($a2)) {
+ foreach ($a2 as $key => $val) {
if (isset($a1[$key])) {
if (is_array($val)) {
- if ($key != 'nserver') {
+ if ($key !== 'nserver') {
$a1[$key] = $this->mergeResults($a1[$key], $val);
}
} else {
$val = trim($val);
- if ($val != '') {
+ if ($val !== '') {
$a1[$key] = $val;
}
}
@@ -589,25 +572,23 @@ public function mergeResults($a1, $a2)
}
/**
- * Remove unnecessary symbols from nameserver received from whois server
- *
- * @param string[] $nserver List of received nameservers
+ * Remove unnecessary symbols from nameserver received from whois server.
*
+ * @param string[] $nserver List of received nameservers
* @return string[]
*/
public function fixNameServer($nserver)
{
- $dns = array();
+ $dns = [];
foreach ($nserver as $val) {
- $val = str_replace(array('[', ']', '(', ')'), '', trim($val));
- $val = str_replace("\t", ' ', $val);
+ $val = str_replace(['[', ']', '(', ')', "\t"], ['', '', '', '', ' '], trim($val));
$parts = explode(' ', $val);
$host = '';
$ip = '';
foreach ($parts as $p) {
- if (substr($p, -1) == '.') {
+ if (substr($p, -1) === '.') {
$p = substr($p, 0, -1);
}
@@ -635,7 +616,7 @@ public function fixNameServer($nserver)
}
}
- if (substr($host, -1, 1) == '.') {
+ if (substr($host, -1, 1) === '.') {
$host = substr($host, 0, -1);
}
@@ -646,19 +627,19 @@ public function fixNameServer($nserver)
}
/**
- * Parse server string into array with host and port keys
+ * Parse server string into array with host and port keys.
*
- * @param $server server string in various formattes
- * @return array Array containing 'host' key with server host and 'port' if defined in original $server string
+ * @param string $server server string in various formattes
+ * @return array Array containing 'host' key with server host and 'port' if defined in original $server string
*/
public function parseServer($server)
{
$server = trim($server);
$server = preg_replace('/\/$/', '', $server);
- $ipTools = new IpTools;
+ $ipTools = new IpTools();
if ($ipTools->validIpv6($server)) {
- $result = array('host' => "[$server]");
+ $result = ['host' => "[{$server}]"];
} else {
$parsed = parse_url($server);
if (array_key_exists('path', $parsed) && !array_key_exists('host', $parsed)) {
@@ -666,14 +647,41 @@ public function parseServer($server)
// if host is ipv6 with port. Example: [1a80:1f45::ebb:12]:8080
if (preg_match('/^(\[[a-f0-9:]+\]):(\d{1,5})$/i', $host, $matches)) {
- $result = array('host' => $matches[1], 'port' => $matches[2]);
+ $result = ['host' => $matches[1], 'port' => $matches[2]];
} else {
- $result = array('host' => $host);
+ $result = ['host' => $host];
}
} else {
$result = $parsed;
}
}
+
return $result;
}
+
+ /**
+ * @return bool|string
+ */
+ protected function loadHandler(string $queryHandler)
+ {
+ if (class_exists($queryHandler)) {
+ return $queryHandler;
+ }
+
+ $queryHandler = ucfirst($queryHandler);
+
+ $handlers_class = [
+ "phpWhois\\Handlers\\gTLD\\{$queryHandler}Handler",
+ "phpWhois\\Handlers\\IP\\{$queryHandler}Handler",
+ "phpWhois\\Handlers\\TLD\\{$queryHandler}Handler",
+ ];
+
+ foreach ($handlers_class as $handlerName) {
+ if (class_exists($handlerName)) {
+ return $handlerName;
+ }
+ }
+
+ return false;
+ }
}
diff --git a/src/npdata.ser b/src/npdata.ser
deleted file mode 100644
index d7ce6d03..00000000
--- a/src/npdata.ser
+++ /dev/null
@@ -1 +0,0 @@
-a:6:{s:11:"map_nothing";a:27:{i:0;i:173;i:1;i:847;i:2;i:6150;i:3;i:6155;i:4;i:6156;i:5;i:6157;i:6;i:8203;i:7;i:8204;i:8;i:8205;i:9;i:8288;i:10;i:65024;i:11;i:65025;i:12;i:65026;i:13;i:65027;i:14;i:65028;i:15;i:65029;i:16;i:65030;i:17;i:65031;i:18;i:65032;i:19;i:65033;i:20;i:65034;i:21;i:65035;i:22;i:65036;i:23;i:65037;i:24;i:65038;i:25;i:65039;i:26;i:65279;}s:18:"general_prohibited";a:64:{i:0;i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:5;i:5;i:6;i:6;i:7;i:7;i:8;i:8;i:9;i:9;i:10;i:10;i:11;i:11;i:12;i:12;i:13;i:13;i:14;i:14;i:15;i:15;i:16;i:16;i:17;i:17;i:18;i:18;i:19;i:19;i:20;i:20;i:21;i:21;i:22;i:22;i:23;i:23;i:24;i:24;i:25;i:25;i:26;i:26;i:27;i:27;i:28;i:28;i:29;i:29;i:30;i:30;i:31;i:31;i:32;i:32;i:33;i:33;i:34;i:34;i:35;i:35;i:36;i:36;i:37;i:37;i:38;i:38;i:39;i:39;i:40;i:40;i:41;i:41;i:42;i:42;i:43;i:43;i:44;i:44;i:45;i:47;i:46;i:59;i:47;i:60;i:48;i:61;i:49;i:62;i:50;i:63;i:51;i:64;i:52;i:91;i:53;i:92;i:54;i:93;i:55;i:94;i:56;i:95;i:57;i:96;i:58;i:123;i:59;i:124;i:60;i:125;i:61;i:126;i:62;i:127;i:63;i:12290;}s:8:"prohibit";a:84:{i:0;i:160;i:1;i:5760;i:2;i:8192;i:3;i:8193;i:4;i:8194;i:5;i:8195;i:6;i:8196;i:7;i:8197;i:8;i:8198;i:9;i:8199;i:10;i:8200;i:11;i:8201;i:12;i:8202;i:13;i:8203;i:14;i:8239;i:15;i:8287;i:16;i:12288;i:17;i:1757;i:18;i:1807;i:19;i:6158;i:20;i:8204;i:21;i:8205;i:22;i:8232;i:23;i:8233;i:24;i:65279;i:25;i:65529;i:26;i:65530;i:27;i:65531;i:28;i:65532;i:29;i:65534;i:30;i:65535;i:31;i:131070;i:32;i:131071;i:33;i:196606;i:34;i:196607;i:35;i:262142;i:36;i:262143;i:37;i:327678;i:38;i:327679;i:39;i:393214;i:40;i:393215;i:41;i:458750;i:42;i:458751;i:43;i:524286;i:44;i:524287;i:45;i:589822;i:46;i:589823;i:47;i:655358;i:48;i:655359;i:49;i:720894;i:50;i:720895;i:51;i:786430;i:52;i:786431;i:53;i:851966;i:54;i:851967;i:55;i:917502;i:56;i:917503;i:57;i:983038;i:58;i:983039;i:59;i:1048574;i:60;i:1048575;i:61;i:1114110;i:62;i:1114111;i:63;i:65529;i:64;i:65530;i:65;i:65531;i:66;i:65532;i:67;i:65533;i:68;i:832;i:69;i:833;i:70;i:8206;i:71;i:8207;i:72;i:8234;i:73;i:8235;i:74;i:8236;i:75;i:8237;i:76;i:8238;i:77;i:8298;i:78;i:8299;i:79;i:8300;i:80;i:8301;i:81;i:8302;i:82;i:8303;i:83;i:917505;}s:15:"prohibit_ranges";a:10:{i:0;a:2:{i:0;i:128;i:1;i:159;}i:1;a:2:{i:0;i:8288;i:1;i:8303;}i:2;a:2:{i:0;i:119155;i:1;i:119162;}i:3;a:2:{i:0;i:57344;i:1;i:63743;}i:4;a:2:{i:0;i:983040;i:1;i:1048573;}i:5;a:2:{i:0;i:1048576;i:1;i:1114109;}i:6;a:2:{i:0;i:64976;i:1;i:65007;}i:7;a:2:{i:0;i:55296;i:1;i:57343;}i:8;a:2:{i:0;i:12272;i:1;i:12283;}i:9;a:2:{i:0;i:917536;i:1;i:917631;}}s:11:"replacemaps";a:1401:{i:65;a:1:{i:0;i:97;}i:66;a:1:{i:0;i:98;}i:67;a:1:{i:0;i:99;}i:68;a:1:{i:0;i:100;}i:69;a:1:{i:0;i:101;}i:70;a:1:{i:0;i:102;}i:71;a:1:{i:0;i:103;}i:72;a:1:{i:0;i:104;}i:73;a:1:{i:0;i:105;}i:74;a:1:{i:0;i:106;}i:75;a:1:{i:0;i:107;}i:76;a:1:{i:0;i:108;}i:77;a:1:{i:0;i:109;}i:78;a:1:{i:0;i:110;}i:79;a:1:{i:0;i:111;}i:80;a:1:{i:0;i:112;}i:81;a:1:{i:0;i:113;}i:82;a:1:{i:0;i:114;}i:83;a:1:{i:0;i:115;}i:84;a:1:{i:0;i:116;}i:85;a:1:{i:0;i:117;}i:86;a:1:{i:0;i:118;}i:87;a:1:{i:0;i:119;}i:88;a:1:{i:0;i:120;}i:89;a:1:{i:0;i:121;}i:90;a:1:{i:0;i:122;}i:181;a:1:{i:0;i:956;}i:192;a:1:{i:0;i:224;}i:193;a:1:{i:0;i:225;}i:194;a:1:{i:0;i:226;}i:195;a:1:{i:0;i:227;}i:196;a:1:{i:0;i:228;}i:197;a:1:{i:0;i:229;}i:198;a:1:{i:0;i:230;}i:199;a:1:{i:0;i:231;}i:200;a:1:{i:0;i:232;}i:201;a:1:{i:0;i:233;}i:202;a:1:{i:0;i:234;}i:203;a:1:{i:0;i:235;}i:204;a:1:{i:0;i:236;}i:205;a:1:{i:0;i:237;}i:206;a:1:{i:0;i:238;}i:207;a:1:{i:0;i:239;}i:208;a:1:{i:0;i:240;}i:209;a:1:{i:0;i:241;}i:210;a:1:{i:0;i:242;}i:211;a:1:{i:0;i:243;}i:212;a:1:{i:0;i:244;}i:213;a:1:{i:0;i:245;}i:214;a:1:{i:0;i:246;}i:216;a:1:{i:0;i:248;}i:217;a:1:{i:0;i:249;}i:218;a:1:{i:0;i:250;}i:219;a:1:{i:0;i:251;}i:220;a:1:{i:0;i:252;}i:221;a:1:{i:0;i:253;}i:222;a:1:{i:0;i:254;}i:223;a:2:{i:0;i:115;i:1;i:115;}i:256;a:1:{i:0;i:257;}i:258;a:1:{i:0;i:259;}i:260;a:1:{i:0;i:261;}i:262;a:1:{i:0;i:263;}i:264;a:1:{i:0;i:265;}i:266;a:1:{i:0;i:267;}i:268;a:1:{i:0;i:269;}i:270;a:1:{i:0;i:271;}i:272;a:1:{i:0;i:273;}i:274;a:1:{i:0;i:275;}i:276;a:1:{i:0;i:277;}i:278;a:1:{i:0;i:279;}i:280;a:1:{i:0;i:281;}i:282;a:1:{i:0;i:283;}i:284;a:1:{i:0;i:285;}i:286;a:1:{i:0;i:287;}i:288;a:1:{i:0;i:289;}i:290;a:1:{i:0;i:291;}i:292;a:1:{i:0;i:293;}i:294;a:1:{i:0;i:295;}i:296;a:1:{i:0;i:297;}i:298;a:1:{i:0;i:299;}i:300;a:1:{i:0;i:301;}i:302;a:1:{i:0;i:303;}i:304;a:2:{i:0;i:105;i:1;i:775;}i:306;a:1:{i:0;i:307;}i:308;a:1:{i:0;i:309;}i:310;a:1:{i:0;i:311;}i:313;a:1:{i:0;i:314;}i:315;a:1:{i:0;i:316;}i:317;a:1:{i:0;i:318;}i:319;a:1:{i:0;i:320;}i:321;a:1:{i:0;i:322;}i:323;a:1:{i:0;i:324;}i:325;a:1:{i:0;i:326;}i:327;a:1:{i:0;i:328;}i:329;a:2:{i:0;i:700;i:1;i:110;}i:330;a:1:{i:0;i:331;}i:332;a:1:{i:0;i:333;}i:334;a:1:{i:0;i:335;}i:336;a:1:{i:0;i:337;}i:338;a:1:{i:0;i:339;}i:340;a:1:{i:0;i:341;}i:342;a:1:{i:0;i:343;}i:344;a:1:{i:0;i:345;}i:346;a:1:{i:0;i:347;}i:348;a:1:{i:0;i:349;}i:350;a:1:{i:0;i:351;}i:352;a:1:{i:0;i:353;}i:354;a:1:{i:0;i:355;}i:356;a:1:{i:0;i:357;}i:358;a:1:{i:0;i:359;}i:360;a:1:{i:0;i:361;}i:362;a:1:{i:0;i:363;}i:364;a:1:{i:0;i:365;}i:366;a:1:{i:0;i:367;}i:368;a:1:{i:0;i:369;}i:370;a:1:{i:0;i:371;}i:372;a:1:{i:0;i:373;}i:374;a:1:{i:0;i:375;}i:376;a:1:{i:0;i:255;}i:377;a:1:{i:0;i:378;}i:379;a:1:{i:0;i:380;}i:381;a:1:{i:0;i:382;}i:383;a:1:{i:0;i:115;}i:385;a:1:{i:0;i:595;}i:386;a:1:{i:0;i:387;}i:388;a:1:{i:0;i:389;}i:390;a:1:{i:0;i:596;}i:391;a:1:{i:0;i:392;}i:393;a:1:{i:0;i:598;}i:394;a:1:{i:0;i:599;}i:395;a:1:{i:0;i:396;}i:398;a:1:{i:0;i:477;}i:399;a:1:{i:0;i:601;}i:400;a:1:{i:0;i:603;}i:401;a:1:{i:0;i:402;}i:403;a:1:{i:0;i:608;}i:404;a:1:{i:0;i:611;}i:406;a:1:{i:0;i:617;}i:407;a:1:{i:0;i:616;}i:408;a:1:{i:0;i:409;}i:412;a:1:{i:0;i:623;}i:413;a:1:{i:0;i:626;}i:415;a:1:{i:0;i:629;}i:416;a:1:{i:0;i:417;}i:418;a:1:{i:0;i:419;}i:420;a:1:{i:0;i:421;}i:422;a:1:{i:0;i:640;}i:423;a:1:{i:0;i:424;}i:425;a:1:{i:0;i:643;}i:428;a:1:{i:0;i:429;}i:430;a:1:{i:0;i:648;}i:431;a:1:{i:0;i:432;}i:433;a:1:{i:0;i:650;}i:434;a:1:{i:0;i:651;}i:435;a:1:{i:0;i:436;}i:437;a:1:{i:0;i:438;}i:439;a:1:{i:0;i:658;}i:440;a:1:{i:0;i:441;}i:444;a:1:{i:0;i:445;}i:452;a:1:{i:0;i:454;}i:453;a:1:{i:0;i:454;}i:455;a:1:{i:0;i:457;}i:456;a:1:{i:0;i:457;}i:458;a:1:{i:0;i:460;}i:459;a:1:{i:0;i:460;}i:461;a:1:{i:0;i:462;}i:463;a:1:{i:0;i:464;}i:465;a:1:{i:0;i:466;}i:467;a:1:{i:0;i:468;}i:469;a:1:{i:0;i:470;}i:471;a:1:{i:0;i:472;}i:473;a:1:{i:0;i:474;}i:475;a:1:{i:0;i:476;}i:478;a:1:{i:0;i:479;}i:480;a:1:{i:0;i:481;}i:482;a:1:{i:0;i:483;}i:484;a:1:{i:0;i:485;}i:486;a:1:{i:0;i:487;}i:488;a:1:{i:0;i:489;}i:490;a:1:{i:0;i:491;}i:492;a:1:{i:0;i:493;}i:494;a:1:{i:0;i:495;}i:496;a:2:{i:0;i:106;i:1;i:780;}i:497;a:1:{i:0;i:499;}i:498;a:1:{i:0;i:499;}i:500;a:1:{i:0;i:501;}i:502;a:1:{i:0;i:405;}i:503;a:1:{i:0;i:447;}i:504;a:1:{i:0;i:505;}i:506;a:1:{i:0;i:507;}i:508;a:1:{i:0;i:509;}i:510;a:1:{i:0;i:511;}i:512;a:1:{i:0;i:513;}i:514;a:1:{i:0;i:515;}i:516;a:1:{i:0;i:517;}i:518;a:1:{i:0;i:519;}i:520;a:1:{i:0;i:521;}i:522;a:1:{i:0;i:523;}i:524;a:1:{i:0;i:525;}i:526;a:1:{i:0;i:527;}i:528;a:1:{i:0;i:529;}i:530;a:1:{i:0;i:531;}i:532;a:1:{i:0;i:533;}i:534;a:1:{i:0;i:535;}i:536;a:1:{i:0;i:537;}i:538;a:1:{i:0;i:539;}i:540;a:1:{i:0;i:541;}i:542;a:1:{i:0;i:543;}i:544;a:1:{i:0;i:414;}i:546;a:1:{i:0;i:547;}i:548;a:1:{i:0;i:549;}i:550;a:1:{i:0;i:551;}i:552;a:1:{i:0;i:553;}i:554;a:1:{i:0;i:555;}i:556;a:1:{i:0;i:557;}i:558;a:1:{i:0;i:559;}i:560;a:1:{i:0;i:561;}i:562;a:1:{i:0;i:563;}i:837;a:1:{i:0;i:953;}i:890;a:2:{i:0;i:32;i:1;i:953;}i:902;a:1:{i:0;i:940;}i:904;a:1:{i:0;i:941;}i:905;a:1:{i:0;i:942;}i:906;a:1:{i:0;i:943;}i:908;a:1:{i:0;i:972;}i:910;a:1:{i:0;i:973;}i:911;a:1:{i:0;i:974;}i:912;a:3:{i:0;i:953;i:1;i:776;i:2;i:769;}i:913;a:1:{i:0;i:945;}i:914;a:1:{i:0;i:946;}i:915;a:1:{i:0;i:947;}i:916;a:1:{i:0;i:948;}i:917;a:1:{i:0;i:949;}i:918;a:1:{i:0;i:950;}i:919;a:1:{i:0;i:951;}i:920;a:1:{i:0;i:952;}i:921;a:1:{i:0;i:953;}i:922;a:1:{i:0;i:954;}i:923;a:1:{i:0;i:955;}i:924;a:1:{i:0;i:956;}i:925;a:1:{i:0;i:957;}i:926;a:1:{i:0;i:958;}i:927;a:1:{i:0;i:959;}i:928;a:1:{i:0;i:960;}i:929;a:1:{i:0;i:961;}i:931;a:1:{i:0;i:963;}i:932;a:1:{i:0;i:964;}i:933;a:1:{i:0;i:965;}i:934;a:1:{i:0;i:966;}i:935;a:1:{i:0;i:967;}i:936;a:1:{i:0;i:968;}i:937;a:1:{i:0;i:969;}i:938;a:1:{i:0;i:970;}i:939;a:1:{i:0;i:971;}i:944;a:3:{i:0;i:965;i:1;i:776;i:2;i:769;}i:962;a:1:{i:0;i:963;}i:976;a:1:{i:0;i:946;}i:977;a:1:{i:0;i:952;}i:978;a:1:{i:0;i:965;}i:979;a:1:{i:0;i:973;}i:980;a:1:{i:0;i:971;}i:981;a:1:{i:0;i:966;}i:982;a:1:{i:0;i:960;}i:984;a:1:{i:0;i:985;}i:986;a:1:{i:0;i:987;}i:988;a:1:{i:0;i:989;}i:990;a:1:{i:0;i:991;}i:992;a:1:{i:0;i:993;}i:994;a:1:{i:0;i:995;}i:996;a:1:{i:0;i:997;}i:998;a:1:{i:0;i:999;}i:1000;a:1:{i:0;i:1001;}i:1002;a:1:{i:0;i:1003;}i:1004;a:1:{i:0;i:1005;}i:1006;a:1:{i:0;i:1007;}i:1008;a:1:{i:0;i:954;}i:1009;a:1:{i:0;i:961;}i:1010;a:1:{i:0;i:963;}i:1012;a:1:{i:0;i:952;}i:1013;a:1:{i:0;i:949;}i:1024;a:1:{i:0;i:1104;}i:1025;a:1:{i:0;i:1105;}i:1026;a:1:{i:0;i:1106;}i:1027;a:1:{i:0;i:1107;}i:1028;a:1:{i:0;i:1108;}i:1029;a:1:{i:0;i:1109;}i:1030;a:1:{i:0;i:1110;}i:1031;a:1:{i:0;i:1111;}i:1032;a:1:{i:0;i:1112;}i:1033;a:1:{i:0;i:1113;}i:1034;a:1:{i:0;i:1114;}i:1035;a:1:{i:0;i:1115;}i:1036;a:1:{i:0;i:1116;}i:1037;a:1:{i:0;i:1117;}i:1038;a:1:{i:0;i:1118;}i:1039;a:1:{i:0;i:1119;}i:1040;a:1:{i:0;i:1072;}i:1041;a:1:{i:0;i:1073;}i:1042;a:1:{i:0;i:1074;}i:1043;a:1:{i:0;i:1075;}i:1044;a:1:{i:0;i:1076;}i:1045;a:1:{i:0;i:1077;}i:1046;a:1:{i:0;i:1078;}i:1047;a:1:{i:0;i:1079;}i:1048;a:1:{i:0;i:1080;}i:1049;a:1:{i:0;i:1081;}i:1050;a:1:{i:0;i:1082;}i:1051;a:1:{i:0;i:1083;}i:1052;a:1:{i:0;i:1084;}i:1053;a:1:{i:0;i:1085;}i:1054;a:1:{i:0;i:1086;}i:1055;a:1:{i:0;i:1087;}i:1056;a:1:{i:0;i:1088;}i:1057;a:1:{i:0;i:1089;}i:1058;a:1:{i:0;i:1090;}i:1059;a:1:{i:0;i:1091;}i:1060;a:1:{i:0;i:1092;}i:1061;a:1:{i:0;i:1093;}i:1062;a:1:{i:0;i:1094;}i:1063;a:1:{i:0;i:1095;}i:1064;a:1:{i:0;i:1096;}i:1065;a:1:{i:0;i:1097;}i:1066;a:1:{i:0;i:1098;}i:1067;a:1:{i:0;i:1099;}i:1068;a:1:{i:0;i:1100;}i:1069;a:1:{i:0;i:1101;}i:1070;a:1:{i:0;i:1102;}i:1071;a:1:{i:0;i:1103;}i:1120;a:1:{i:0;i:1121;}i:1122;a:1:{i:0;i:1123;}i:1124;a:1:{i:0;i:1125;}i:1126;a:1:{i:0;i:1127;}i:1128;a:1:{i:0;i:1129;}i:1130;a:1:{i:0;i:1131;}i:1132;a:1:{i:0;i:1133;}i:1134;a:1:{i:0;i:1135;}i:1136;a:1:{i:0;i:1137;}i:1138;a:1:{i:0;i:1139;}i:1140;a:1:{i:0;i:1141;}i:1142;a:1:{i:0;i:1143;}i:1144;a:1:{i:0;i:1145;}i:1146;a:1:{i:0;i:1147;}i:1148;a:1:{i:0;i:1149;}i:1150;a:1:{i:0;i:1151;}i:1152;a:1:{i:0;i:1153;}i:1162;a:1:{i:0;i:1163;}i:1164;a:1:{i:0;i:1165;}i:1166;a:1:{i:0;i:1167;}i:1168;a:1:{i:0;i:1169;}i:1170;a:1:{i:0;i:1171;}i:1172;a:1:{i:0;i:1173;}i:1174;a:1:{i:0;i:1175;}i:1176;a:1:{i:0;i:1177;}i:1178;a:1:{i:0;i:1179;}i:1180;a:1:{i:0;i:1181;}i:1182;a:1:{i:0;i:1183;}i:1184;a:1:{i:0;i:1185;}i:1186;a:1:{i:0;i:1187;}i:1188;a:1:{i:0;i:1189;}i:1190;a:1:{i:0;i:1191;}i:1192;a:1:{i:0;i:1193;}i:1194;a:1:{i:0;i:1195;}i:1196;a:1:{i:0;i:1197;}i:1198;a:1:{i:0;i:1199;}i:1200;a:1:{i:0;i:1201;}i:1202;a:1:{i:0;i:1203;}i:1204;a:1:{i:0;i:1205;}i:1206;a:1:{i:0;i:1207;}i:1208;a:1:{i:0;i:1209;}i:1210;a:1:{i:0;i:1211;}i:1212;a:1:{i:0;i:1213;}i:1214;a:1:{i:0;i:1215;}i:1217;a:1:{i:0;i:1218;}i:1219;a:1:{i:0;i:1220;}i:1221;a:1:{i:0;i:1222;}i:1223;a:1:{i:0;i:1224;}i:1225;a:1:{i:0;i:1226;}i:1227;a:1:{i:0;i:1228;}i:1229;a:1:{i:0;i:1230;}i:1232;a:1:{i:0;i:1233;}i:1234;a:1:{i:0;i:1235;}i:1236;a:1:{i:0;i:1237;}i:1238;a:1:{i:0;i:1239;}i:1240;a:1:{i:0;i:1241;}i:1242;a:1:{i:0;i:1243;}i:1244;a:1:{i:0;i:1245;}i:1246;a:1:{i:0;i:1247;}i:1248;a:1:{i:0;i:1249;}i:1250;a:1:{i:0;i:1251;}i:1252;a:1:{i:0;i:1253;}i:1254;a:1:{i:0;i:1255;}i:1256;a:1:{i:0;i:1257;}i:1258;a:1:{i:0;i:1259;}i:1260;a:1:{i:0;i:1261;}i:1262;a:1:{i:0;i:1263;}i:1264;a:1:{i:0;i:1265;}i:1266;a:1:{i:0;i:1267;}i:1268;a:1:{i:0;i:1269;}i:1272;a:1:{i:0;i:1273;}i:1280;a:1:{i:0;i:1281;}i:1282;a:1:{i:0;i:1283;}i:1284;a:1:{i:0;i:1285;}i:1286;a:1:{i:0;i:1287;}i:1288;a:1:{i:0;i:1289;}i:1290;a:1:{i:0;i:1291;}i:1292;a:1:{i:0;i:1293;}i:1294;a:1:{i:0;i:1295;}i:1329;a:1:{i:0;i:1377;}i:1330;a:1:{i:0;i:1378;}i:1331;a:1:{i:0;i:1379;}i:1332;a:1:{i:0;i:1380;}i:1333;a:1:{i:0;i:1381;}i:1334;a:1:{i:0;i:1382;}i:1335;a:1:{i:0;i:1383;}i:1336;a:1:{i:0;i:1384;}i:1337;a:1:{i:0;i:1385;}i:1338;a:1:{i:0;i:1386;}i:1339;a:1:{i:0;i:1387;}i:1340;a:1:{i:0;i:1388;}i:1341;a:1:{i:0;i:1389;}i:1342;a:1:{i:0;i:1390;}i:1343;a:1:{i:0;i:1391;}i:1344;a:1:{i:0;i:1392;}i:1345;a:1:{i:0;i:1393;}i:1346;a:1:{i:0;i:1394;}i:1347;a:1:{i:0;i:1395;}i:1348;a:1:{i:0;i:1396;}i:1349;a:1:{i:0;i:1397;}i:1350;a:1:{i:0;i:1398;}i:1351;a:1:{i:0;i:1399;}i:1352;a:1:{i:0;i:1400;}i:1353;a:1:{i:0;i:1401;}i:1354;a:1:{i:0;i:1402;}i:1355;a:1:{i:0;i:1403;}i:1356;a:1:{i:0;i:1404;}i:1357;a:1:{i:0;i:1405;}i:1358;a:1:{i:0;i:1406;}i:1359;a:1:{i:0;i:1407;}i:1360;a:1:{i:0;i:1408;}i:1361;a:1:{i:0;i:1409;}i:1362;a:1:{i:0;i:1410;}i:1363;a:1:{i:0;i:1411;}i:1364;a:1:{i:0;i:1412;}i:1365;a:1:{i:0;i:1413;}i:1366;a:1:{i:0;i:1414;}i:1415;a:2:{i:0;i:1381;i:1;i:1410;}i:7680;a:1:{i:0;i:7681;}i:7682;a:1:{i:0;i:7683;}i:7684;a:1:{i:0;i:7685;}i:7686;a:1:{i:0;i:7687;}i:7688;a:1:{i:0;i:7689;}i:7690;a:1:{i:0;i:7691;}i:7692;a:1:{i:0;i:7693;}i:7694;a:1:{i:0;i:7695;}i:7696;a:1:{i:0;i:7697;}i:7698;a:1:{i:0;i:7699;}i:7700;a:1:{i:0;i:7701;}i:7702;a:1:{i:0;i:7703;}i:7704;a:1:{i:0;i:7705;}i:7706;a:1:{i:0;i:7707;}i:7708;a:1:{i:0;i:7709;}i:7710;a:1:{i:0;i:7711;}i:7712;a:1:{i:0;i:7713;}i:7714;a:1:{i:0;i:7715;}i:7716;a:1:{i:0;i:7717;}i:7718;a:1:{i:0;i:7719;}i:7720;a:1:{i:0;i:7721;}i:7722;a:1:{i:0;i:7723;}i:7724;a:1:{i:0;i:7725;}i:7726;a:1:{i:0;i:7727;}i:7728;a:1:{i:0;i:7729;}i:7730;a:1:{i:0;i:7731;}i:7732;a:1:{i:0;i:7733;}i:7734;a:1:{i:0;i:7735;}i:7736;a:1:{i:0;i:7737;}i:7738;a:1:{i:0;i:7739;}i:7740;a:1:{i:0;i:7741;}i:7742;a:1:{i:0;i:7743;}i:7744;a:1:{i:0;i:7745;}i:7746;a:1:{i:0;i:7747;}i:7748;a:1:{i:0;i:7749;}i:7750;a:1:{i:0;i:7751;}i:7752;a:1:{i:0;i:7753;}i:7754;a:1:{i:0;i:7755;}i:7756;a:1:{i:0;i:7757;}i:7758;a:1:{i:0;i:7759;}i:7760;a:1:{i:0;i:7761;}i:7762;a:1:{i:0;i:7763;}i:7764;a:1:{i:0;i:7765;}i:7766;a:1:{i:0;i:7767;}i:7768;a:1:{i:0;i:7769;}i:7770;a:1:{i:0;i:7771;}i:7772;a:1:{i:0;i:7773;}i:7774;a:1:{i:0;i:7775;}i:7776;a:1:{i:0;i:7777;}i:7778;a:1:{i:0;i:7779;}i:7780;a:1:{i:0;i:7781;}i:7782;a:1:{i:0;i:7783;}i:7784;a:1:{i:0;i:7785;}i:7786;a:1:{i:0;i:7787;}i:7788;a:1:{i:0;i:7789;}i:7790;a:1:{i:0;i:7791;}i:7792;a:1:{i:0;i:7793;}i:7794;a:1:{i:0;i:7795;}i:7796;a:1:{i:0;i:7797;}i:7798;a:1:{i:0;i:7799;}i:7800;a:1:{i:0;i:7801;}i:7802;a:1:{i:0;i:7803;}i:7804;a:1:{i:0;i:7805;}i:7806;a:1:{i:0;i:7807;}i:7808;a:1:{i:0;i:7809;}i:7810;a:1:{i:0;i:7811;}i:7812;a:1:{i:0;i:7813;}i:7814;a:1:{i:0;i:7815;}i:7816;a:1:{i:0;i:7817;}i:7818;a:1:{i:0;i:7819;}i:7820;a:1:{i:0;i:7821;}i:7822;a:1:{i:0;i:7823;}i:7824;a:1:{i:0;i:7825;}i:7826;a:1:{i:0;i:7827;}i:7828;a:1:{i:0;i:7829;}i:7830;a:2:{i:0;i:104;i:1;i:817;}i:7831;a:2:{i:0;i:116;i:1;i:776;}i:7832;a:2:{i:0;i:119;i:1;i:778;}i:7833;a:2:{i:0;i:121;i:1;i:778;}i:7834;a:2:{i:0;i:97;i:1;i:702;}i:7835;a:1:{i:0;i:7777;}i:7840;a:1:{i:0;i:7841;}i:7842;a:1:{i:0;i:7843;}i:7844;a:1:{i:0;i:7845;}i:7846;a:1:{i:0;i:7847;}i:7848;a:1:{i:0;i:7849;}i:7850;a:1:{i:0;i:7851;}i:7852;a:1:{i:0;i:7853;}i:7854;a:1:{i:0;i:7855;}i:7856;a:1:{i:0;i:7857;}i:7858;a:1:{i:0;i:7859;}i:7860;a:1:{i:0;i:7861;}i:7862;a:1:{i:0;i:7863;}i:7864;a:1:{i:0;i:7865;}i:7866;a:1:{i:0;i:7867;}i:7868;a:1:{i:0;i:7869;}i:7870;a:1:{i:0;i:7871;}i:7872;a:1:{i:0;i:7873;}i:7874;a:1:{i:0;i:7875;}i:7876;a:1:{i:0;i:7877;}i:7878;a:1:{i:0;i:7879;}i:7880;a:1:{i:0;i:7881;}i:7882;a:1:{i:0;i:7883;}i:7884;a:1:{i:0;i:7885;}i:7886;a:1:{i:0;i:7887;}i:7888;a:1:{i:0;i:7889;}i:7890;a:1:{i:0;i:7891;}i:7892;a:1:{i:0;i:7893;}i:7894;a:1:{i:0;i:7895;}i:7896;a:1:{i:0;i:7897;}i:7898;a:1:{i:0;i:7899;}i:7900;a:1:{i:0;i:7901;}i:7902;a:1:{i:0;i:7903;}i:7904;a:1:{i:0;i:7905;}i:7906;a:1:{i:0;i:7907;}i:7908;a:1:{i:0;i:7909;}i:7910;a:1:{i:0;i:7911;}i:7912;a:1:{i:0;i:7913;}i:7914;a:1:{i:0;i:7915;}i:7916;a:1:{i:0;i:7917;}i:7918;a:1:{i:0;i:7919;}i:7920;a:1:{i:0;i:7921;}i:7922;a:1:{i:0;i:7923;}i:7924;a:1:{i:0;i:7925;}i:7926;a:1:{i:0;i:7927;}i:7928;a:1:{i:0;i:7929;}i:7944;a:1:{i:0;i:7936;}i:7945;a:1:{i:0;i:7937;}i:7946;a:1:{i:0;i:7938;}i:7947;a:1:{i:0;i:7939;}i:7948;a:1:{i:0;i:7940;}i:7949;a:1:{i:0;i:7941;}i:7950;a:1:{i:0;i:7942;}i:7951;a:1:{i:0;i:7943;}i:7960;a:1:{i:0;i:7952;}i:7961;a:1:{i:0;i:7953;}i:7962;a:1:{i:0;i:7954;}i:7963;a:1:{i:0;i:7955;}i:7964;a:1:{i:0;i:7956;}i:7965;a:1:{i:0;i:7957;}i:7976;a:1:{i:0;i:7968;}i:7977;a:1:{i:0;i:7969;}i:7978;a:1:{i:0;i:7970;}i:7979;a:1:{i:0;i:7971;}i:7980;a:1:{i:0;i:7972;}i:7981;a:1:{i:0;i:7973;}i:7982;a:1:{i:0;i:7974;}i:7983;a:1:{i:0;i:7975;}i:7992;a:1:{i:0;i:7984;}i:7993;a:1:{i:0;i:7985;}i:7994;a:1:{i:0;i:7986;}i:7995;a:1:{i:0;i:7987;}i:7996;a:1:{i:0;i:7988;}i:7997;a:1:{i:0;i:7989;}i:7998;a:1:{i:0;i:7990;}i:7999;a:1:{i:0;i:7991;}i:8008;a:1:{i:0;i:8000;}i:8009;a:1:{i:0;i:8001;}i:8010;a:1:{i:0;i:8002;}i:8011;a:1:{i:0;i:8003;}i:8012;a:1:{i:0;i:8004;}i:8013;a:1:{i:0;i:8005;}i:8016;a:2:{i:0;i:965;i:1;i:787;}i:8018;a:3:{i:0;i:965;i:1;i:787;i:2;i:768;}i:8020;a:3:{i:0;i:965;i:1;i:787;i:2;i:769;}i:8022;a:3:{i:0;i:965;i:1;i:787;i:2;i:834;}i:8025;a:1:{i:0;i:8017;}i:8027;a:1:{i:0;i:8019;}i:8029;a:1:{i:0;i:8021;}i:8031;a:1:{i:0;i:8023;}i:8040;a:1:{i:0;i:8032;}i:8041;a:1:{i:0;i:8033;}i:8042;a:1:{i:0;i:8034;}i:8043;a:1:{i:0;i:8035;}i:8044;a:1:{i:0;i:8036;}i:8045;a:1:{i:0;i:8037;}i:8046;a:1:{i:0;i:8038;}i:8047;a:1:{i:0;i:8039;}i:8064;a:2:{i:0;i:7936;i:1;i:953;}i:8065;a:2:{i:0;i:7937;i:1;i:953;}i:8066;a:2:{i:0;i:7938;i:1;i:953;}i:8067;a:2:{i:0;i:7939;i:1;i:953;}i:8068;a:2:{i:0;i:7940;i:1;i:953;}i:8069;a:2:{i:0;i:7941;i:1;i:953;}i:8070;a:2:{i:0;i:7942;i:1;i:953;}i:8071;a:2:{i:0;i:7943;i:1;i:953;}i:8072;a:2:{i:0;i:7936;i:1;i:953;}i:8073;a:2:{i:0;i:7937;i:1;i:953;}i:8074;a:2:{i:0;i:7938;i:1;i:953;}i:8075;a:2:{i:0;i:7939;i:1;i:953;}i:8076;a:2:{i:0;i:7940;i:1;i:953;}i:8077;a:2:{i:0;i:7941;i:1;i:953;}i:8078;a:2:{i:0;i:7942;i:1;i:953;}i:8079;a:2:{i:0;i:7943;i:1;i:953;}i:8080;a:2:{i:0;i:7968;i:1;i:953;}i:8081;a:2:{i:0;i:7969;i:1;i:953;}i:8082;a:2:{i:0;i:7970;i:1;i:953;}i:8083;a:2:{i:0;i:7971;i:1;i:953;}i:8084;a:2:{i:0;i:7972;i:1;i:953;}i:8085;a:2:{i:0;i:7973;i:1;i:953;}i:8086;a:2:{i:0;i:7974;i:1;i:953;}i:8087;a:2:{i:0;i:7975;i:1;i:953;}i:8088;a:2:{i:0;i:7968;i:1;i:953;}i:8089;a:2:{i:0;i:7969;i:1;i:953;}i:8090;a:2:{i:0;i:7970;i:1;i:953;}i:8091;a:2:{i:0;i:7971;i:1;i:953;}i:8092;a:2:{i:0;i:7972;i:1;i:953;}i:8093;a:2:{i:0;i:7973;i:1;i:953;}i:8094;a:2:{i:0;i:7974;i:1;i:953;}i:8095;a:2:{i:0;i:7975;i:1;i:953;}i:8096;a:2:{i:0;i:8032;i:1;i:953;}i:8097;a:2:{i:0;i:8033;i:1;i:953;}i:8098;a:2:{i:0;i:8034;i:1;i:953;}i:8099;a:2:{i:0;i:8035;i:1;i:953;}i:8100;a:2:{i:0;i:8036;i:1;i:953;}i:8101;a:2:{i:0;i:8037;i:1;i:953;}i:8102;a:2:{i:0;i:8038;i:1;i:953;}i:8103;a:2:{i:0;i:8039;i:1;i:953;}i:8104;a:2:{i:0;i:8032;i:1;i:953;}i:8105;a:2:{i:0;i:8033;i:1;i:953;}i:8106;a:2:{i:0;i:8034;i:1;i:953;}i:8107;a:2:{i:0;i:8035;i:1;i:953;}i:8108;a:2:{i:0;i:8036;i:1;i:953;}i:8109;a:2:{i:0;i:8037;i:1;i:953;}i:8110;a:2:{i:0;i:8038;i:1;i:953;}i:8111;a:2:{i:0;i:8039;i:1;i:953;}i:8114;a:2:{i:0;i:8048;i:1;i:953;}i:8115;a:2:{i:0;i:945;i:1;i:953;}i:8116;a:2:{i:0;i:940;i:1;i:953;}i:8118;a:2:{i:0;i:945;i:1;i:834;}i:8119;a:3:{i:0;i:945;i:1;i:834;i:2;i:953;}i:8120;a:1:{i:0;i:8112;}i:8121;a:1:{i:0;i:8113;}i:8122;a:1:{i:0;i:8048;}i:8123;a:1:{i:0;i:8049;}i:8124;a:2:{i:0;i:945;i:1;i:953;}i:8126;a:1:{i:0;i:953;}i:8130;a:2:{i:0;i:8052;i:1;i:953;}i:8131;a:2:{i:0;i:951;i:1;i:953;}i:8132;a:2:{i:0;i:942;i:1;i:953;}i:8134;a:2:{i:0;i:951;i:1;i:834;}i:8135;a:3:{i:0;i:951;i:1;i:834;i:2;i:953;}i:8136;a:1:{i:0;i:8050;}i:8137;a:1:{i:0;i:8051;}i:8138;a:1:{i:0;i:8052;}i:8139;a:1:{i:0;i:8053;}i:8140;a:2:{i:0;i:951;i:1;i:953;}i:8146;a:3:{i:0;i:953;i:1;i:776;i:2;i:768;}i:8147;a:3:{i:0;i:953;i:1;i:776;i:2;i:769;}i:8150;a:2:{i:0;i:953;i:1;i:834;}i:8151;a:3:{i:0;i:953;i:1;i:776;i:2;i:834;}i:8152;a:1:{i:0;i:8144;}i:8153;a:1:{i:0;i:8145;}i:8154;a:1:{i:0;i:8054;}i:8155;a:1:{i:0;i:8055;}i:8162;a:3:{i:0;i:965;i:1;i:776;i:2;i:768;}i:8163;a:3:{i:0;i:965;i:1;i:776;i:2;i:769;}i:8164;a:2:{i:0;i:961;i:1;i:787;}i:8166;a:2:{i:0;i:965;i:1;i:834;}i:8167;a:3:{i:0;i:965;i:1;i:776;i:2;i:834;}i:8168;a:1:{i:0;i:8160;}i:8169;a:1:{i:0;i:8161;}i:8170;a:1:{i:0;i:8058;}i:8171;a:1:{i:0;i:8059;}i:8172;a:1:{i:0;i:8165;}i:8178;a:2:{i:0;i:8060;i:1;i:953;}i:8179;a:2:{i:0;i:969;i:1;i:953;}i:8180;a:2:{i:0;i:974;i:1;i:953;}i:8182;a:2:{i:0;i:969;i:1;i:834;}i:8183;a:3:{i:0;i:969;i:1;i:834;i:2;i:953;}i:8184;a:1:{i:0;i:8056;}i:8185;a:1:{i:0;i:8057;}i:8186;a:1:{i:0;i:8060;}i:8187;a:1:{i:0;i:8061;}i:8188;a:2:{i:0;i:969;i:1;i:953;}i:8360;a:2:{i:0;i:114;i:1;i:115;}i:8450;a:1:{i:0;i:99;}i:8451;a:2:{i:0;i:176;i:1;i:99;}i:8455;a:1:{i:0;i:603;}i:8457;a:2:{i:0;i:176;i:1;i:102;}i:8459;a:1:{i:0;i:104;}i:8460;a:1:{i:0;i:104;}i:8461;a:1:{i:0;i:104;}i:8464;a:1:{i:0;i:105;}i:8465;a:1:{i:0;i:105;}i:8466;a:1:{i:0;i:108;}i:8469;a:1:{i:0;i:110;}i:8470;a:2:{i:0;i:110;i:1;i:111;}i:8473;a:1:{i:0;i:112;}i:8474;a:1:{i:0;i:113;}i:8475;a:1:{i:0;i:114;}i:8476;a:1:{i:0;i:114;}i:8477;a:1:{i:0;i:114;}i:8480;a:2:{i:0;i:115;i:1;i:109;}i:8481;a:3:{i:0;i:116;i:1;i:101;i:2;i:108;}i:8482;a:2:{i:0;i:116;i:1;i:109;}i:8484;a:1:{i:0;i:122;}i:8486;a:1:{i:0;i:969;}i:8488;a:1:{i:0;i:122;}i:8490;a:1:{i:0;i:107;}i:8491;a:1:{i:0;i:229;}i:8492;a:1:{i:0;i:98;}i:8493;a:1:{i:0;i:99;}i:8496;a:1:{i:0;i:101;}i:8497;a:1:{i:0;i:102;}i:8499;a:1:{i:0;i:109;}i:8510;a:1:{i:0;i:947;}i:8511;a:1:{i:0;i:960;}i:8517;a:1:{i:0;i:100;}i:8544;a:1:{i:0;i:8560;}i:8545;a:1:{i:0;i:8561;}i:8546;a:1:{i:0;i:8562;}i:8547;a:1:{i:0;i:8563;}i:8548;a:1:{i:0;i:8564;}i:8549;a:1:{i:0;i:8565;}i:8550;a:1:{i:0;i:8566;}i:8551;a:1:{i:0;i:8567;}i:8552;a:1:{i:0;i:8568;}i:8553;a:1:{i:0;i:8569;}i:8554;a:1:{i:0;i:8570;}i:8555;a:1:{i:0;i:8571;}i:8556;a:1:{i:0;i:8572;}i:8557;a:1:{i:0;i:8573;}i:8558;a:1:{i:0;i:8574;}i:8559;a:1:{i:0;i:8575;}i:9398;a:1:{i:0;i:9424;}i:9399;a:1:{i:0;i:9425;}i:9400;a:1:{i:0;i:9426;}i:9401;a:1:{i:0;i:9427;}i:9402;a:1:{i:0;i:9428;}i:9403;a:1:{i:0;i:9429;}i:9404;a:1:{i:0;i:9430;}i:9405;a:1:{i:0;i:9431;}i:9406;a:1:{i:0;i:9432;}i:9407;a:1:{i:0;i:9433;}i:9408;a:1:{i:0;i:9434;}i:9409;a:1:{i:0;i:9435;}i:9410;a:1:{i:0;i:9436;}i:9411;a:1:{i:0;i:9437;}i:9412;a:1:{i:0;i:9438;}i:9413;a:1:{i:0;i:9439;}i:9414;a:1:{i:0;i:9440;}i:9415;a:1:{i:0;i:9441;}i:9416;a:1:{i:0;i:9442;}i:9417;a:1:{i:0;i:9443;}i:9418;a:1:{i:0;i:9444;}i:9419;a:1:{i:0;i:9445;}i:9420;a:1:{i:0;i:9446;}i:9421;a:1:{i:0;i:9447;}i:9422;a:1:{i:0;i:9448;}i:9423;a:1:{i:0;i:9449;}i:13169;a:3:{i:0;i:104;i:1;i:112;i:2;i:97;}i:13171;a:2:{i:0;i:97;i:1;i:117;}i:13173;a:2:{i:0;i:111;i:1;i:118;}i:13184;a:2:{i:0;i:112;i:1;i:97;}i:13185;a:2:{i:0;i:110;i:1;i:97;}i:13186;a:2:{i:0;i:956;i:1;i:97;}i:13187;a:2:{i:0;i:109;i:1;i:97;}i:13188;a:2:{i:0;i:107;i:1;i:97;}i:13189;a:2:{i:0;i:107;i:1;i:98;}i:13190;a:2:{i:0;i:109;i:1;i:98;}i:13191;a:2:{i:0;i:103;i:1;i:98;}i:13194;a:2:{i:0;i:112;i:1;i:102;}i:13195;a:2:{i:0;i:110;i:1;i:102;}i:13196;a:2:{i:0;i:956;i:1;i:102;}i:13200;a:2:{i:0;i:104;i:1;i:122;}i:13201;a:3:{i:0;i:107;i:1;i:104;i:2;i:122;}i:13202;a:3:{i:0;i:109;i:1;i:104;i:2;i:122;}i:13203;a:3:{i:0;i:103;i:1;i:104;i:2;i:122;}i:13204;a:3:{i:0;i:116;i:1;i:104;i:2;i:122;}i:13225;a:2:{i:0;i:112;i:1;i:97;}i:13226;a:3:{i:0;i:107;i:1;i:112;i:2;i:97;}i:13227;a:3:{i:0;i:109;i:1;i:112;i:2;i:97;}i:13228;a:3:{i:0;i:103;i:1;i:112;i:2;i:97;}i:13236;a:2:{i:0;i:112;i:1;i:118;}i:13237;a:2:{i:0;i:110;i:1;i:118;}i:13238;a:2:{i:0;i:956;i:1;i:118;}i:13239;a:2:{i:0;i:109;i:1;i:118;}i:13240;a:2:{i:0;i:107;i:1;i:118;}i:13241;a:2:{i:0;i:109;i:1;i:118;}i:13242;a:2:{i:0;i:112;i:1;i:119;}i:13243;a:2:{i:0;i:110;i:1;i:119;}i:13244;a:2:{i:0;i:956;i:1;i:119;}i:13245;a:2:{i:0;i:109;i:1;i:119;}i:13246;a:2:{i:0;i:107;i:1;i:119;}i:13247;a:2:{i:0;i:109;i:1;i:119;}i:13248;a:2:{i:0;i:107;i:1;i:969;}i:13249;a:2:{i:0;i:109;i:1;i:969;}i:13251;a:2:{i:0;i:98;i:1;i:113;}i:13254;a:4:{i:0;i:99;i:1;i:8725;i:2;i:107;i:3;i:103;}i:13255;a:3:{i:0;i:99;i:1;i:111;i:2;i:46;}i:13256;a:2:{i:0;i:100;i:1;i:98;}i:13257;a:2:{i:0;i:103;i:1;i:121;}i:13259;a:2:{i:0;i:104;i:1;i:112;}i:13261;a:2:{i:0;i:107;i:1;i:107;}i:13262;a:2:{i:0;i:107;i:1;i:109;}i:13271;a:2:{i:0;i:112;i:1;i:104;}i:13273;a:3:{i:0;i:112;i:1;i:112;i:2;i:109;}i:13274;a:2:{i:0;i:112;i:1;i:114;}i:13276;a:2:{i:0;i:115;i:1;i:118;}i:13277;a:2:{i:0;i:119;i:1;i:98;}i:64256;a:2:{i:0;i:102;i:1;i:102;}i:64257;a:2:{i:0;i:102;i:1;i:105;}i:64258;a:2:{i:0;i:102;i:1;i:108;}i:64259;a:3:{i:0;i:102;i:1;i:102;i:2;i:105;}i:64260;a:3:{i:0;i:102;i:1;i:102;i:2;i:108;}i:64261;a:2:{i:0;i:115;i:1;i:116;}i:64262;a:2:{i:0;i:115;i:1;i:116;}i:64275;a:2:{i:0;i:1396;i:1;i:1398;}i:64276;a:2:{i:0;i:1396;i:1;i:1381;}i:64277;a:2:{i:0;i:1396;i:1;i:1387;}i:64278;a:2:{i:0;i:1406;i:1;i:1398;}i:64279;a:2:{i:0;i:1396;i:1;i:1389;}i:65313;a:1:{i:0;i:65345;}i:65314;a:1:{i:0;i:65346;}i:65315;a:1:{i:0;i:65347;}i:65316;a:1:{i:0;i:65348;}i:65317;a:1:{i:0;i:65349;}i:65318;a:1:{i:0;i:65350;}i:65319;a:1:{i:0;i:65351;}i:65320;a:1:{i:0;i:65352;}i:65321;a:1:{i:0;i:65353;}i:65322;a:1:{i:0;i:65354;}i:65323;a:1:{i:0;i:65355;}i:65324;a:1:{i:0;i:65356;}i:65325;a:1:{i:0;i:65357;}i:65326;a:1:{i:0;i:65358;}i:65327;a:1:{i:0;i:65359;}i:65328;a:1:{i:0;i:65360;}i:65329;a:1:{i:0;i:65361;}i:65330;a:1:{i:0;i:65362;}i:65331;a:1:{i:0;i:65363;}i:65332;a:1:{i:0;i:65364;}i:65333;a:1:{i:0;i:65365;}i:65334;a:1:{i:0;i:65366;}i:65335;a:1:{i:0;i:65367;}i:65336;a:1:{i:0;i:65368;}i:65337;a:1:{i:0;i:65369;}i:65338;a:1:{i:0;i:65370;}i:66560;a:1:{i:0;i:66600;}i:66561;a:1:{i:0;i:66601;}i:66562;a:1:{i:0;i:66602;}i:66563;a:1:{i:0;i:66603;}i:66564;a:1:{i:0;i:66604;}i:66565;a:1:{i:0;i:66605;}i:66566;a:1:{i:0;i:66606;}i:66567;a:1:{i:0;i:66607;}i:66568;a:1:{i:0;i:66608;}i:66569;a:1:{i:0;i:66609;}i:66570;a:1:{i:0;i:66610;}i:66571;a:1:{i:0;i:66611;}i:66572;a:1:{i:0;i:66612;}i:66573;a:1:{i:0;i:66613;}i:66574;a:1:{i:0;i:66614;}i:66575;a:1:{i:0;i:66615;}i:66576;a:1:{i:0;i:66616;}i:66577;a:1:{i:0;i:66617;}i:66578;a:1:{i:0;i:66618;}i:66579;a:1:{i:0;i:66619;}i:66580;a:1:{i:0;i:66620;}i:66581;a:1:{i:0;i:66621;}i:66582;a:1:{i:0;i:66622;}i:66583;a:1:{i:0;i:66623;}i:66584;a:1:{i:0;i:66624;}i:66585;a:1:{i:0;i:66625;}i:66586;a:1:{i:0;i:66626;}i:66587;a:1:{i:0;i:66627;}i:66588;a:1:{i:0;i:66628;}i:66589;a:1:{i:0;i:66629;}i:66590;a:1:{i:0;i:66630;}i:66591;a:1:{i:0;i:66631;}i:66592;a:1:{i:0;i:66632;}i:66593;a:1:{i:0;i:66633;}i:66594;a:1:{i:0;i:66634;}i:66595;a:1:{i:0;i:66635;}i:66596;a:1:{i:0;i:66636;}i:66597;a:1:{i:0;i:66637;}i:119808;a:1:{i:0;i:97;}i:119809;a:1:{i:0;i:98;}i:119810;a:1:{i:0;i:99;}i:119811;a:1:{i:0;i:100;}i:119812;a:1:{i:0;i:101;}i:119813;a:1:{i:0;i:102;}i:119814;a:1:{i:0;i:103;}i:119815;a:1:{i:0;i:104;}i:119816;a:1:{i:0;i:105;}i:119817;a:1:{i:0;i:106;}i:119818;a:1:{i:0;i:107;}i:119819;a:1:{i:0;i:108;}i:119820;a:1:{i:0;i:109;}i:119821;a:1:{i:0;i:110;}i:119822;a:1:{i:0;i:111;}i:119823;a:1:{i:0;i:112;}i:119824;a:1:{i:0;i:113;}i:119825;a:1:{i:0;i:114;}i:119826;a:1:{i:0;i:115;}i:119827;a:1:{i:0;i:116;}i:119828;a:1:{i:0;i:117;}i:119829;a:1:{i:0;i:118;}i:119830;a:1:{i:0;i:119;}i:119831;a:1:{i:0;i:120;}i:119832;a:1:{i:0;i:121;}i:119833;a:1:{i:0;i:122;}i:119860;a:1:{i:0;i:97;}i:119861;a:1:{i:0;i:98;}i:119862;a:1:{i:0;i:99;}i:119863;a:1:{i:0;i:100;}i:119864;a:1:{i:0;i:101;}i:119865;a:1:{i:0;i:102;}i:119866;a:1:{i:0;i:103;}i:119867;a:1:{i:0;i:104;}i:119868;a:1:{i:0;i:105;}i:119869;a:1:{i:0;i:106;}i:119870;a:1:{i:0;i:107;}i:119871;a:1:{i:0;i:108;}i:119872;a:1:{i:0;i:109;}i:119873;a:1:{i:0;i:110;}i:119874;a:1:{i:0;i:111;}i:119875;a:1:{i:0;i:112;}i:119876;a:1:{i:0;i:113;}i:119877;a:1:{i:0;i:114;}i:119878;a:1:{i:0;i:115;}i:119879;a:1:{i:0;i:116;}i:119880;a:1:{i:0;i:117;}i:119881;a:1:{i:0;i:118;}i:119882;a:1:{i:0;i:119;}i:119883;a:1:{i:0;i:120;}i:119884;a:1:{i:0;i:121;}i:119885;a:1:{i:0;i:122;}i:119912;a:1:{i:0;i:97;}i:119913;a:1:{i:0;i:98;}i:119914;a:1:{i:0;i:99;}i:119915;a:1:{i:0;i:100;}i:119916;a:1:{i:0;i:101;}i:119917;a:1:{i:0;i:102;}i:119918;a:1:{i:0;i:103;}i:119919;a:1:{i:0;i:104;}i:119920;a:1:{i:0;i:105;}i:119921;a:1:{i:0;i:106;}i:119922;a:1:{i:0;i:107;}i:119923;a:1:{i:0;i:108;}i:119924;a:1:{i:0;i:109;}i:119925;a:1:{i:0;i:110;}i:119926;a:1:{i:0;i:111;}i:119927;a:1:{i:0;i:112;}i:119928;a:1:{i:0;i:113;}i:119929;a:1:{i:0;i:114;}i:119930;a:1:{i:0;i:115;}i:119931;a:1:{i:0;i:116;}i:119932;a:1:{i:0;i:117;}i:119933;a:1:{i:0;i:118;}i:119934;a:1:{i:0;i:119;}i:119935;a:1:{i:0;i:120;}i:119936;a:1:{i:0;i:121;}i:119937;a:1:{i:0;i:122;}i:119964;a:1:{i:0;i:97;}i:119966;a:1:{i:0;i:99;}i:119967;a:1:{i:0;i:100;}i:119970;a:1:{i:0;i:103;}i:119973;a:1:{i:0;i:106;}i:119974;a:1:{i:0;i:107;}i:119977;a:1:{i:0;i:110;}i:119978;a:1:{i:0;i:111;}i:119979;a:1:{i:0;i:112;}i:119980;a:1:{i:0;i:113;}i:119982;a:1:{i:0;i:115;}i:119983;a:1:{i:0;i:116;}i:119984;a:1:{i:0;i:117;}i:119985;a:1:{i:0;i:118;}i:119986;a:1:{i:0;i:119;}i:119987;a:1:{i:0;i:120;}i:119988;a:1:{i:0;i:121;}i:119989;a:1:{i:0;i:122;}i:120016;a:1:{i:0;i:97;}i:120017;a:1:{i:0;i:98;}i:120018;a:1:{i:0;i:99;}i:120019;a:1:{i:0;i:100;}i:120020;a:1:{i:0;i:101;}i:120021;a:1:{i:0;i:102;}i:120022;a:1:{i:0;i:103;}i:120023;a:1:{i:0;i:104;}i:120024;a:1:{i:0;i:105;}i:120025;a:1:{i:0;i:106;}i:120026;a:1:{i:0;i:107;}i:120027;a:1:{i:0;i:108;}i:120028;a:1:{i:0;i:109;}i:120029;a:1:{i:0;i:110;}i:120030;a:1:{i:0;i:111;}i:120031;a:1:{i:0;i:112;}i:120032;a:1:{i:0;i:113;}i:120033;a:1:{i:0;i:114;}i:120034;a:1:{i:0;i:115;}i:120035;a:1:{i:0;i:116;}i:120036;a:1:{i:0;i:117;}i:120037;a:1:{i:0;i:118;}i:120038;a:1:{i:0;i:119;}i:120039;a:1:{i:0;i:120;}i:120040;a:1:{i:0;i:121;}i:120041;a:1:{i:0;i:122;}i:120068;a:1:{i:0;i:97;}i:120069;a:1:{i:0;i:98;}i:120071;a:1:{i:0;i:100;}i:120072;a:1:{i:0;i:101;}i:120073;a:1:{i:0;i:102;}i:120074;a:1:{i:0;i:103;}i:120077;a:1:{i:0;i:106;}i:120078;a:1:{i:0;i:107;}i:120079;a:1:{i:0;i:108;}i:120080;a:1:{i:0;i:109;}i:120081;a:1:{i:0;i:110;}i:120082;a:1:{i:0;i:111;}i:120083;a:1:{i:0;i:112;}i:120084;a:1:{i:0;i:113;}i:120086;a:1:{i:0;i:115;}i:120087;a:1:{i:0;i:116;}i:120088;a:1:{i:0;i:117;}i:120089;a:1:{i:0;i:118;}i:120090;a:1:{i:0;i:119;}i:120091;a:1:{i:0;i:120;}i:120092;a:1:{i:0;i:121;}i:120120;a:1:{i:0;i:97;}i:120121;a:1:{i:0;i:98;}i:120123;a:1:{i:0;i:100;}i:120124;a:1:{i:0;i:101;}i:120125;a:1:{i:0;i:102;}i:120126;a:1:{i:0;i:103;}i:120128;a:1:{i:0;i:105;}i:120129;a:1:{i:0;i:106;}i:120130;a:1:{i:0;i:107;}i:120131;a:1:{i:0;i:108;}i:120132;a:1:{i:0;i:109;}i:120134;a:1:{i:0;i:111;}i:120138;a:1:{i:0;i:115;}i:120139;a:1:{i:0;i:116;}i:120140;a:1:{i:0;i:117;}i:120141;a:1:{i:0;i:118;}i:120142;a:1:{i:0;i:119;}i:120143;a:1:{i:0;i:120;}i:120144;a:1:{i:0;i:121;}i:120172;a:1:{i:0;i:97;}i:120173;a:1:{i:0;i:98;}i:120174;a:1:{i:0;i:99;}i:120175;a:1:{i:0;i:100;}i:120176;a:1:{i:0;i:101;}i:120177;a:1:{i:0;i:102;}i:120178;a:1:{i:0;i:103;}i:120179;a:1:{i:0;i:104;}i:120180;a:1:{i:0;i:105;}i:120181;a:1:{i:0;i:106;}i:120182;a:1:{i:0;i:107;}i:120183;a:1:{i:0;i:108;}i:120184;a:1:{i:0;i:109;}i:120185;a:1:{i:0;i:110;}i:120186;a:1:{i:0;i:111;}i:120187;a:1:{i:0;i:112;}i:120188;a:1:{i:0;i:113;}i:120189;a:1:{i:0;i:114;}i:120190;a:1:{i:0;i:115;}i:120191;a:1:{i:0;i:116;}i:120192;a:1:{i:0;i:117;}i:120193;a:1:{i:0;i:118;}i:120194;a:1:{i:0;i:119;}i:120195;a:1:{i:0;i:120;}i:120196;a:1:{i:0;i:121;}i:120197;a:1:{i:0;i:122;}i:120224;a:1:{i:0;i:97;}i:120225;a:1:{i:0;i:98;}i:120226;a:1:{i:0;i:99;}i:120227;a:1:{i:0;i:100;}i:120228;a:1:{i:0;i:101;}i:120229;a:1:{i:0;i:102;}i:120230;a:1:{i:0;i:103;}i:120231;a:1:{i:0;i:104;}i:120232;a:1:{i:0;i:105;}i:120233;a:1:{i:0;i:106;}i:120234;a:1:{i:0;i:107;}i:120235;a:1:{i:0;i:108;}i:120236;a:1:{i:0;i:109;}i:120237;a:1:{i:0;i:110;}i:120238;a:1:{i:0;i:111;}i:120239;a:1:{i:0;i:112;}i:120240;a:1:{i:0;i:113;}i:120241;a:1:{i:0;i:114;}i:120242;a:1:{i:0;i:115;}i:120243;a:1:{i:0;i:116;}i:120244;a:1:{i:0;i:117;}i:120245;a:1:{i:0;i:118;}i:120246;a:1:{i:0;i:119;}i:120247;a:1:{i:0;i:120;}i:120248;a:1:{i:0;i:121;}i:120249;a:1:{i:0;i:122;}i:120276;a:1:{i:0;i:97;}i:120277;a:1:{i:0;i:98;}i:120278;a:1:{i:0;i:99;}i:120279;a:1:{i:0;i:100;}i:120280;a:1:{i:0;i:101;}i:120281;a:1:{i:0;i:102;}i:120282;a:1:{i:0;i:103;}i:120283;a:1:{i:0;i:104;}i:120284;a:1:{i:0;i:105;}i:120285;a:1:{i:0;i:106;}i:120286;a:1:{i:0;i:107;}i:120287;a:1:{i:0;i:108;}i:120288;a:1:{i:0;i:109;}i:120289;a:1:{i:0;i:110;}i:120290;a:1:{i:0;i:111;}i:120291;a:1:{i:0;i:112;}i:120292;a:1:{i:0;i:113;}i:120293;a:1:{i:0;i:114;}i:120294;a:1:{i:0;i:115;}i:120295;a:1:{i:0;i:116;}i:120296;a:1:{i:0;i:117;}i:120297;a:1:{i:0;i:118;}i:120298;a:1:{i:0;i:119;}i:120299;a:1:{i:0;i:120;}i:120300;a:1:{i:0;i:121;}i:120301;a:1:{i:0;i:122;}i:120328;a:1:{i:0;i:97;}i:120329;a:1:{i:0;i:98;}i:120330;a:1:{i:0;i:99;}i:120331;a:1:{i:0;i:100;}i:120332;a:1:{i:0;i:101;}i:120333;a:1:{i:0;i:102;}i:120334;a:1:{i:0;i:103;}i:120335;a:1:{i:0;i:104;}i:120336;a:1:{i:0;i:105;}i:120337;a:1:{i:0;i:106;}i:120338;a:1:{i:0;i:107;}i:120339;a:1:{i:0;i:108;}i:120340;a:1:{i:0;i:109;}i:120341;a:1:{i:0;i:110;}i:120342;a:1:{i:0;i:111;}i:120343;a:1:{i:0;i:112;}i:120344;a:1:{i:0;i:113;}i:120345;a:1:{i:0;i:114;}i:120346;a:1:{i:0;i:115;}i:120347;a:1:{i:0;i:116;}i:120348;a:1:{i:0;i:117;}i:120349;a:1:{i:0;i:118;}i:120350;a:1:{i:0;i:119;}i:120351;a:1:{i:0;i:120;}i:120352;a:1:{i:0;i:121;}i:120353;a:1:{i:0;i:122;}i:120380;a:1:{i:0;i:97;}i:120381;a:1:{i:0;i:98;}i:120382;a:1:{i:0;i:99;}i:120383;a:1:{i:0;i:100;}i:120384;a:1:{i:0;i:101;}i:120385;a:1:{i:0;i:102;}i:120386;a:1:{i:0;i:103;}i:120387;a:1:{i:0;i:104;}i:120388;a:1:{i:0;i:105;}i:120389;a:1:{i:0;i:106;}i:120390;a:1:{i:0;i:107;}i:120391;a:1:{i:0;i:108;}i:120392;a:1:{i:0;i:109;}i:120393;a:1:{i:0;i:110;}i:120394;a:1:{i:0;i:111;}i:120395;a:1:{i:0;i:112;}i:120396;a:1:{i:0;i:113;}i:120397;a:1:{i:0;i:114;}i:120398;a:1:{i:0;i:115;}i:120399;a:1:{i:0;i:116;}i:120400;a:1:{i:0;i:117;}i:120401;a:1:{i:0;i:118;}i:120402;a:1:{i:0;i:119;}i:120403;a:1:{i:0;i:120;}i:120404;a:1:{i:0;i:121;}i:120405;a:1:{i:0;i:122;}i:120432;a:1:{i:0;i:97;}i:120433;a:1:{i:0;i:98;}i:120434;a:1:{i:0;i:99;}i:120435;a:1:{i:0;i:100;}i:120436;a:1:{i:0;i:101;}i:120437;a:1:{i:0;i:102;}i:120438;a:1:{i:0;i:103;}i:120439;a:1:{i:0;i:104;}i:120440;a:1:{i:0;i:105;}i:120441;a:1:{i:0;i:106;}i:120442;a:1:{i:0;i:107;}i:120443;a:1:{i:0;i:108;}i:120444;a:1:{i:0;i:109;}i:120445;a:1:{i:0;i:110;}i:120446;a:1:{i:0;i:111;}i:120447;a:1:{i:0;i:112;}i:120448;a:1:{i:0;i:113;}i:120449;a:1:{i:0;i:114;}i:120450;a:1:{i:0;i:115;}i:120451;a:1:{i:0;i:116;}i:120452;a:1:{i:0;i:117;}i:120453;a:1:{i:0;i:118;}i:120454;a:1:{i:0;i:119;}i:120455;a:1:{i:0;i:120;}i:120456;a:1:{i:0;i:121;}i:120457;a:1:{i:0;i:122;}i:120488;a:1:{i:0;i:945;}i:120489;a:1:{i:0;i:946;}i:120490;a:1:{i:0;i:947;}i:120491;a:1:{i:0;i:948;}i:120492;a:1:{i:0;i:949;}i:120493;a:1:{i:0;i:950;}i:120494;a:1:{i:0;i:951;}i:120495;a:1:{i:0;i:952;}i:120496;a:1:{i:0;i:953;}i:120497;a:1:{i:0;i:954;}i:120498;a:1:{i:0;i:955;}i:120499;a:1:{i:0;i:956;}i:120500;a:1:{i:0;i:957;}i:120501;a:1:{i:0;i:958;}i:120502;a:1:{i:0;i:959;}i:120503;a:1:{i:0;i:960;}i:120504;a:1:{i:0;i:961;}i:120505;a:1:{i:0;i:952;}i:120506;a:1:{i:0;i:963;}i:120507;a:1:{i:0;i:964;}i:120508;a:1:{i:0;i:965;}i:120509;a:1:{i:0;i:966;}i:120510;a:1:{i:0;i:967;}i:120511;a:1:{i:0;i:968;}i:120512;a:1:{i:0;i:969;}i:120531;a:1:{i:0;i:963;}i:120546;a:1:{i:0;i:945;}i:120547;a:1:{i:0;i:946;}i:120548;a:1:{i:0;i:947;}i:120549;a:1:{i:0;i:948;}i:120550;a:1:{i:0;i:949;}i:120551;a:1:{i:0;i:950;}i:120552;a:1:{i:0;i:951;}i:120553;a:1:{i:0;i:952;}i:120554;a:1:{i:0;i:953;}i:120555;a:1:{i:0;i:954;}i:120556;a:1:{i:0;i:955;}i:120557;a:1:{i:0;i:956;}i:120558;a:1:{i:0;i:957;}i:120559;a:1:{i:0;i:958;}i:120560;a:1:{i:0;i:959;}i:120561;a:1:{i:0;i:960;}i:120562;a:1:{i:0;i:961;}i:120563;a:1:{i:0;i:952;}i:120564;a:1:{i:0;i:963;}i:120565;a:1:{i:0;i:964;}i:120566;a:1:{i:0;i:965;}i:120567;a:1:{i:0;i:966;}i:120568;a:1:{i:0;i:967;}i:120569;a:1:{i:0;i:968;}i:120570;a:1:{i:0;i:969;}i:120589;a:1:{i:0;i:963;}i:120604;a:1:{i:0;i:945;}i:120605;a:1:{i:0;i:946;}i:120606;a:1:{i:0;i:947;}i:120607;a:1:{i:0;i:948;}i:120608;a:1:{i:0;i:949;}i:120609;a:1:{i:0;i:950;}i:120610;a:1:{i:0;i:951;}i:120611;a:1:{i:0;i:952;}i:120612;a:1:{i:0;i:953;}i:120613;a:1:{i:0;i:954;}i:120614;a:1:{i:0;i:955;}i:120615;a:1:{i:0;i:956;}i:120616;a:1:{i:0;i:957;}i:120617;a:1:{i:0;i:958;}i:120618;a:1:{i:0;i:959;}i:120619;a:1:{i:0;i:960;}i:120620;a:1:{i:0;i:961;}i:120621;a:1:{i:0;i:952;}i:120622;a:1:{i:0;i:963;}i:120623;a:1:{i:0;i:964;}i:120624;a:1:{i:0;i:965;}i:120625;a:1:{i:0;i:966;}i:120626;a:1:{i:0;i:967;}i:120627;a:1:{i:0;i:968;}i:120628;a:1:{i:0;i:969;}i:120647;a:1:{i:0;i:963;}i:120662;a:1:{i:0;i:945;}i:120663;a:1:{i:0;i:946;}i:120664;a:1:{i:0;i:947;}i:120665;a:1:{i:0;i:948;}i:120666;a:1:{i:0;i:949;}i:120667;a:1:{i:0;i:950;}i:120668;a:1:{i:0;i:951;}i:120669;a:1:{i:0;i:952;}i:120670;a:1:{i:0;i:953;}i:120671;a:1:{i:0;i:954;}i:120672;a:1:{i:0;i:955;}i:120673;a:1:{i:0;i:956;}i:120674;a:1:{i:0;i:957;}i:120675;a:1:{i:0;i:958;}i:120676;a:1:{i:0;i:959;}i:120677;a:1:{i:0;i:960;}i:120678;a:1:{i:0;i:961;}i:120679;a:1:{i:0;i:952;}i:120680;a:1:{i:0;i:963;}i:120681;a:1:{i:0;i:964;}i:120682;a:1:{i:0;i:965;}i:120683;a:1:{i:0;i:966;}i:120684;a:1:{i:0;i:967;}i:120685;a:1:{i:0;i:968;}i:120686;a:1:{i:0;i:969;}i:120705;a:1:{i:0;i:963;}i:120720;a:1:{i:0;i:945;}i:120721;a:1:{i:0;i:946;}i:120722;a:1:{i:0;i:947;}i:120723;a:1:{i:0;i:948;}i:120724;a:1:{i:0;i:949;}i:120725;a:1:{i:0;i:950;}i:120726;a:1:{i:0;i:951;}i:120727;a:1:{i:0;i:952;}i:120728;a:1:{i:0;i:953;}i:120729;a:1:{i:0;i:954;}i:120730;a:1:{i:0;i:955;}i:120731;a:1:{i:0;i:956;}i:120732;a:1:{i:0;i:957;}i:120733;a:1:{i:0;i:958;}i:120734;a:1:{i:0;i:959;}i:120735;a:1:{i:0;i:960;}i:120736;a:1:{i:0;i:961;}i:120737;a:1:{i:0;i:952;}i:120738;a:1:{i:0;i:963;}i:120739;a:1:{i:0;i:964;}i:120740;a:1:{i:0;i:965;}i:120741;a:1:{i:0;i:966;}i:120742;a:1:{i:0;i:967;}i:120743;a:1:{i:0;i:968;}i:120744;a:1:{i:0;i:969;}i:120763;a:1:{i:0;i:963;}i:1017;a:1:{i:0;i:963;}i:7468;a:1:{i:0;i:97;}i:7469;a:1:{i:0;i:230;}i:7470;a:1:{i:0;i:98;}i:7472;a:1:{i:0;i:100;}i:7473;a:1:{i:0;i:101;}i:7474;a:1:{i:0;i:477;}i:7475;a:1:{i:0;i:103;}i:7476;a:1:{i:0;i:104;}i:7477;a:1:{i:0;i:105;}i:7478;a:1:{i:0;i:106;}i:7479;a:1:{i:0;i:107;}i:7480;a:1:{i:0;i:108;}i:7481;a:1:{i:0;i:109;}i:7482;a:1:{i:0;i:110;}i:7484;a:1:{i:0;i:111;}i:7485;a:1:{i:0;i:547;}i:7486;a:1:{i:0;i:112;}i:7487;a:1:{i:0;i:114;}i:7488;a:1:{i:0;i:116;}i:7489;a:1:{i:0;i:117;}i:7490;a:1:{i:0;i:119;}i:8507;a:3:{i:0;i:102;i:1;i:97;i:2;i:120;}i:12880;a:3:{i:0;i:112;i:1;i:116;i:2;i:101;}i:13004;a:2:{i:0;i:104;i:1;i:103;}i:13006;a:2:{i:0;i:101;i:1;i:118;}i:13007;a:3:{i:0;i:108;i:1;i:116;i:2;i:100;}i:13178;a:2:{i:0;i:105;i:1;i:117;}i:13278;a:3:{i:0;i:118;i:1;i:8725;i:2;i:109;}i:13279;a:3:{i:0;i:97;i:1;i:8725;i:2;i:109;}}s:12:"norm_combcls";a:341:{i:820;i:1;i:821;i:1;i:822;i:1;i:823;i:1;i:824;i:1;i:2364;i:7;i:2492;i:7;i:2620;i:7;i:2748;i:7;i:2876;i:7;i:3260;i:7;i:4151;i:7;i:12441;i:8;i:12442;i:8;i:2381;i:9;i:2509;i:9;i:2637;i:9;i:2765;i:9;i:2893;i:9;i:3021;i:9;i:3149;i:9;i:3277;i:9;i:3405;i:9;i:3530;i:9;i:3642;i:9;i:3972;i:9;i:4153;i:9;i:5908;i:9;i:5940;i:9;i:6098;i:9;i:1456;i:10;i:1457;i:11;i:1458;i:12;i:1459;i:13;i:1460;i:14;i:1461;i:15;i:1462;i:16;i:1463;i:17;i:1464;i:18;i:1465;i:19;i:1467;i:20;i:1468;i:21;i:1469;i:22;i:1471;i:23;i:1473;i:24;i:1474;i:25;i:64286;i:26;i:1611;i:27;i:1612;i:28;i:1613;i:29;i:1614;i:30;i:1615;i:31;i:1616;i:32;i:1617;i:33;i:1618;i:34;i:1648;i:35;i:1809;i:36;i:3157;i:84;i:3158;i:91;i:3640;i:103;i:3641;i:103;i:3656;i:107;i:3657;i:107;i:3658;i:107;i:3659;i:107;i:3768;i:118;i:3769;i:118;i:3784;i:122;i:3785;i:122;i:3786;i:122;i:3787;i:122;i:3953;i:129;i:3954;i:130;i:3962;i:130;i:3963;i:130;i:3964;i:130;i:3965;i:130;i:3968;i:130;i:3956;i:132;i:801;i:202;i:802;i:202;i:807;i:202;i:808;i:202;i:795;i:216;i:3897;i:216;i:119141;i:216;i:119142;i:216;i:119150;i:216;i:119151;i:216;i:119152;i:216;i:119153;i:216;i:119154;i:216;i:12330;i:218;i:790;i:220;i:791;i:220;i:792;i:220;i:793;i:220;i:796;i:220;i:797;i:220;i:798;i:220;i:799;i:220;i:800;i:220;i:803;i:220;i:804;i:220;i:805;i:220;i:806;i:220;i:809;i:220;i:810;i:220;i:811;i:220;i:812;i:220;i:813;i:220;i:814;i:220;i:815;i:220;i:816;i:220;i:817;i:220;i:818;i:220;i:819;i:220;i:825;i:220;i:826;i:220;i:827;i:220;i:828;i:220;i:839;i:220;i:840;i:220;i:841;i:220;i:845;i:220;i:846;i:220;i:851;i:220;i:852;i:220;i:853;i:220;i:854;i:220;i:1425;i:220;i:1430;i:220;i:1435;i:220;i:1443;i:220;i:1444;i:220;i:1445;i:220;i:1446;i:220;i:1447;i:220;i:1450;i:220;i:1621;i:220;i:1622;i:220;i:1763;i:220;i:1770;i:220;i:1773;i:220;i:1841;i:220;i:1844;i:220;i:1847;i:220;i:1848;i:220;i:1849;i:220;i:1851;i:220;i:1852;i:220;i:1854;i:220;i:1858;i:220;i:1860;i:220;i:1862;i:220;i:1864;i:220;i:2386;i:220;i:3864;i:220;i:3865;i:220;i:3893;i:220;i:3895;i:220;i:4038;i:220;i:6459;i:220;i:8424;i:220;i:119163;i:220;i:119164;i:220;i:119165;i:220;i:119166;i:220;i:119167;i:220;i:119168;i:220;i:119169;i:220;i:119170;i:220;i:119178;i:220;i:119179;i:220;i:1434;i:222;i:1453;i:222;i:6441;i:222;i:12333;i:222;i:12334;i:224;i:12335;i:224;i:119149;i:226;i:1454;i:228;i:6313;i:228;i:12331;i:228;i:768;i:230;i:769;i:230;i:770;i:230;i:771;i:230;i:772;i:230;i:773;i:230;i:774;i:230;i:775;i:230;i:776;i:230;i:777;i:230;i:778;i:230;i:779;i:230;i:780;i:230;i:781;i:230;i:782;i:230;i:783;i:230;i:784;i:230;i:785;i:230;i:786;i:230;i:787;i:230;i:788;i:230;i:829;i:230;i:830;i:230;i:831;i:230;i:832;i:230;i:833;i:230;i:834;i:230;i:835;i:230;i:836;i:230;i:838;i:230;i:842;i:230;i:843;i:230;i:844;i:230;i:848;i:230;i:849;i:230;i:850;i:230;i:855;i:230;i:867;i:230;i:868;i:230;i:869;i:230;i:870;i:230;i:871;i:230;i:872;i:230;i:873;i:230;i:874;i:230;i:875;i:230;i:876;i:230;i:877;i:230;i:878;i:230;i:879;i:230;i:1155;i:230;i:1156;i:230;i:1157;i:230;i:1158;i:230;i:1426;i:230;i:1427;i:230;i:1428;i:230;i:1429;i:230;i:1431;i:230;i:1432;i:230;i:1433;i:230;i:1436;i:230;i:1437;i:230;i:1438;i:230;i:1439;i:230;i:1440;i:230;i:1441;i:230;i:1448;i:230;i:1449;i:230;i:1451;i:230;i:1452;i:230;i:1455;i:230;i:1476;i:230;i:1552;i:230;i:1553;i:230;i:1554;i:230;i:1555;i:230;i:1556;i:230;i:1557;i:230;i:1619;i:230;i:1620;i:230;i:1623;i:230;i:1624;i:230;i:1750;i:230;i:1751;i:230;i:1752;i:230;i:1753;i:230;i:1754;i:230;i:1755;i:230;i:1756;i:230;i:1759;i:230;i:1760;i:230;i:1761;i:230;i:1762;i:230;i:1764;i:230;i:1767;i:230;i:1768;i:230;i:1771;i:230;i:1772;i:230;i:1840;i:230;i:1842;i:230;i:1843;i:230;i:1845;i:230;i:1846;i:230;i:1850;i:230;i:1853;i:230;i:1855;i:230;i:1856;i:230;i:1857;i:230;i:1859;i:230;i:1861;i:230;i:1863;i:230;i:1865;i:230;i:1866;i:230;i:2385;i:230;i:2387;i:230;i:2388;i:230;i:3970;i:230;i:3971;i:230;i:3974;i:230;i:3975;i:230;i:5901;i:230;i:6458;i:230;i:8400;i:230;i:8401;i:230;i:8404;i:230;i:8405;i:230;i:8406;i:230;i:8407;i:230;i:8411;i:230;i:8412;i:230;i:8417;i:230;i:8423;i:230;i:8425;i:230;i:65056;i:230;i:65057;i:230;i:65058;i:230;i:65059;i:230;i:119173;i:230;i:119174;i:230;i:119175;i:230;i:119177;i:230;i:119176;i:230;i:119210;i:230;i:119211;i:230;i:119212;i:230;i:119213;i:230;i:789;i:232;i:794;i:232;i:12332;i:232;i:863;i:233;i:866;i:233;i:861;i:234;i:862;i:234;i:864;i:234;i:865;i:234;i:837;i:240;}}
\ No newline at end of file
diff --git a/src/whois.ae.php b/src/whois.ae.php
deleted file mode 100644
index 3ee16d20..00000000
--- a/src/whois.ae.php
+++ /dev/null
@@ -1,55 +0,0 @@
- 'domain.name',
- 'Registrar Name:' => 'domain.sponsor',
- 'Status:' => 'domain.status',
- 'Registrant Contact ID:' => 'owner.handle',
- 'Registrant Contact Name:' => 'owner.name',
- 'Tech Contact Name:' => 'tech.name',
- 'Tech Contact ID:' => 'tech.handle',
- 'Name Server:' => 'domain.nserver.'
- );
-
- $r = array();
- $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'ymd');
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.nic.ae',
- 'registrar' => 'UAENIC'
- );
-
- return $r;
- }
-
-}
diff --git a/src/whois.aero.php b/src/whois.aero.php
deleted file mode 100644
index f84c5f9a..00000000
--- a/src/whois.aero.php
+++ /dev/null
@@ -1,42 +0,0 @@
- 'http://www.nic.aero',
- 'registrar' => 'Societe Internationale de Telecommunications Aeronautiques SC'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.ag.php b/src/whois.ag.php
deleted file mode 100644
index 2f7e396d..00000000
--- a/src/whois.ag.php
+++ /dev/null
@@ -1,42 +0,0 @@
- 'http://www.nic.ag',
- 'registrar' => 'Nic AG'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.am.php b/src/whois.am.php
deleted file mode 100644
index 88b0a88d..00000000
--- a/src/whois.am.php
+++ /dev/null
@@ -1,63 +0,0 @@
- 'Registrant:',
- 'domain.name' => 'Domain name:',
- 'domain.created' => 'Registered:',
- 'domain.changed' => 'Last modified:',
- 'domain.nserver' => 'DNS servers:',
- 'domain.status' => 'Status:',
- 'tech' => 'Technical contact:',
- 'admin' => 'Administrative contact:',
- );
-
- $r = array();
- $r['regrinfo'] = get_blocks($data_str['rawdata'], $items);
-
- if (!empty($r['regrinfo']['domain']['name'])) {
- $r['regrinfo'] = get_contacts($r['regrinfo']);
- $r['regrinfo']['registered'] = 'yes';
- } else {
- $r = '';
- $r['regrinfo']['registered'] = 'no';
- }
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.isoc.am',
- 'registrar' => 'ISOCAM'
- );
-
- return $r;
- }
-
-}
diff --git a/src/whois.asia.php b/src/whois.asia.php
deleted file mode 100644
index efe9380d..00000000
--- a/src/whois.asia.php
+++ /dev/null
@@ -1,42 +0,0 @@
- 'http://www.dotasia.org/',
- 'registrar' => 'DotAsia'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.at.php b/src/whois.at.php
deleted file mode 100644
index b86bdbc2..00000000
--- a/src/whois.at.php
+++ /dev/null
@@ -1,94 +0,0 @@
- 'fax',
- 'e-mail' => 'email',
- 'nic-hdl' => 'handle',
- 'person' => 'name',
- 'personname' => 'name',
- 'street address' => 'address.street',
- 'city' => 'address.city',
- 'postal code' => 'address.pcode',
- 'country' => 'address.country'
- );
-
- $contacts = array(
- 'registrant' => 'owner',
- 'admin-c' => 'admin',
- 'tech-c' => 'tech',
- 'billing-c' => 'billing',
- 'zone-c' => 'zone'
- );
-
- $reg = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
-
- if (isset($reg['domain']['remarks']))
- unset($reg['domain']['remarks']);
-
- if (isset($reg['domain']['descr'])) {
- while (list($key, $val) = each($reg['domain']['descr'])) {
- $v = trim(substr(strstr($val, ':'), 1));
- if (strstr($val, '[organization]:')) {
- $reg['owner']['organization'] = $v;
- continue;
- }
- if (strstr($val, '[phone]:')) {
- $reg['owner']['phone'] = $v;
- continue;
- }
- if (strstr($val, '[fax-no]:')) {
- $reg['owner']['fax'] = $v;
- continue;
- }
- if (strstr($val, '[e-mail]:')) {
- $reg['owner']['email'] = $v;
- continue;
- }
-
- $reg['owner']['address'][$key] = $v;
- }
-
- if (isset($reg['domain']['descr']))
- unset($reg['domain']['descr']);
- }
-
- $r = array();
- $r['regrinfo'] = $reg;
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.nic.at',
- 'registrar' => 'NIC-AT'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.au.php b/src/whois.au.php
deleted file mode 100644
index 5c4a03c8..00000000
--- a/src/whois.au.php
+++ /dev/null
@@ -1,59 +0,0 @@
- 'domain.name',
- 'Last Modified:' => 'domain.changed',
- 'Registrar Name:' => 'domain.sponsor',
- 'Status:' => 'domain.status',
- 'Domain ROID:' => 'domain.handle',
- 'Registrant:' => 'owner.organization',
- 'Registrant Contact ID:' => 'owner.handle',
- 'Registrant Contact Email:' => 'owner.email',
- 'Registrant Contact Name:' => 'owner.name',
- 'Tech Contact Name:' => 'tech.name',
- 'Tech Contact Email:' => 'tech.email',
- 'Tech Contact ID:' => 'tech.handle',
- 'Name Server:' => 'domain.nserver.'
- );
-
- $r = array();
- $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items);
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.aunic.net',
- 'registrar' => 'AU-NIC'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.be.php b/src/whois.be.php
deleted file mode 100644
index 18bca3b0..00000000
--- a/src/whois.be.php
+++ /dev/null
@@ -1,72 +0,0 @@
- 'Domain:',
- 'domain.status' => 'Status:',
- 'domain.nserver' => 'Nameservers:',
- 'domain.created' => 'Registered:',
- 'owner' => 'Licensee:',
- 'admin' => 'Onsite Contacts:',
- 'tech' => 'Registrar Technical Contacts:',
- 'agent' => 'Registrar:',
- 'agent.uri' => 'Website:'
- );
-
- $trans = array(
- 'company name2:' => ''
- );
-
- $r = array();
-
- $r['regrinfo'] = get_blocks($data['rawdata'], $items);
-
- if ($r['regrinfo']['domain']['status'] == 'REGISTERED') {
- $r['regrinfo']['registered'] = 'yes';
- $r['regrinfo'] = get_contacts($r['regrinfo'], $trans);
-
- if (isset($r['regrinfo']['agent'])) {
- $sponsor = get_contact($r['regrinfo']['agent'], $trans);
- unset($r['regrinfo']['agent']);
- $r['regrinfo']['domain']['sponsor'] = $sponsor;
- }
-
- $r = format_dates($r, '-mdy');
- } else
- $r['regrinfo']['registered'] = 'no';
-
- $r['regyinfo']['referrer'] = 'http://www.domain-registry.nl';
- $r['regyinfo']['registrar'] = 'DNS Belgium';
- return $r;
- }
-
-}
diff --git a/src/whois.bh.php b/src/whois.bh.php
deleted file mode 100644
index 35b72718..00000000
--- a/src/whois.bh.php
+++ /dev/null
@@ -1,56 +0,0 @@
- 'domain.sponsor.name',
- 'Sponsoring Registrar Email:' => 'domain.sponsor.email',
- 'Sponsoring Registrar Uri:' => 'domain.sponsor.uri',
- 'Sponsoring Registrar Phone:' => 'domain.sponsor.phone'
- );
- $i = generic_parser_b($data_str['rawdata'], $items);
-
- $r = array();
- $r['regrinfo'] = generic_parser_b($data_str['rawdata']);
- if (isset($r['regrinfo']['domain']) && is_array($r['regrinfo']['domain']))
- $r['regrinfo']['domain']['sponsor'] = $i['domain']['sponsor'];
- if (empty($r['regrinfo']['domain']['created']))
- $r['regrinfo']['registered'] = 'no';
- else
- $r['regrinfo']['registered'] = 'yes';
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.nic.bh/',
- 'registrar' => 'NIC-BH'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.biz.php b/src/whois.biz.php
deleted file mode 100644
index 9d786d1e..00000000
--- a/src/whois.biz.php
+++ /dev/null
@@ -1,42 +0,0 @@
- 'http://www.neulevel.biz',
- 'registrar' => 'NEULEVEL'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.br.php b/src/whois.br.php
deleted file mode 100644
index a0ed9024..00000000
--- a/src/whois.br.php
+++ /dev/null
@@ -1,83 +0,0 @@
- 'fax',
- 'e-mail' => 'email',
- 'nic-hdl-br' => 'handle',
- 'person' => 'name',
- 'netname' => 'name',
- 'domain' => 'name',
- 'updated' => ''
- );
-
- $contacts = array(
- 'owner-c' => 'owner',
- 'tech-c' => 'tech',
- 'admin-c' => 'admin',
- 'billing-c' => 'billing'
- );
-
- $r = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
-
- if (in_array('Permission denied.', $r['disclaimer'])) {
- $r['registered'] = 'unknown';
- return $r;
- }
-
- if (isset($r['domain']['nsstat']))
- unset($r['domain']['nsstat']);
- if (isset($r['domain']['nslastaa']))
- unset($r['domain']['nslastaa']);
-
- if (isset($r['domain']['owner'])) {
- $r['owner']['organization'] = $r['domain']['owner'];
- unset($r['domain']['owner']);
- }
-
- if (isset($r['domain']['responsible']))
- unset($r['domain']['responsible']);
- if (isset($r['domain']['address']))
- unset($r['domain']['address']);
- if (isset($r['domain']['phone']))
- unset($r['domain']['phone']);
-
- $a = array();
- $a['regrinfo'] = $r;
- $a['regyinfo'] = array(
- 'registrar' => 'BR-NIC',
- 'referrer' => 'http://www.nic.br'
- );
- return $a;
- }
-
-}
diff --git a/src/whois.ca.php b/src/whois.ca.php
deleted file mode 100644
index bf14d062..00000000
--- a/src/whois.ca.php
+++ /dev/null
@@ -1,72 +0,0 @@
- 'Registrant:',
- 'admin' => 'Administrative contact:',
- 'tech' => 'Technical contact:',
- 'domain.sponsor' => 'Registrar:',
- 'domain.nserver' => 'Name servers:',
- 'domain.status' => 'Domain status:',
- 'domain.created' => 'Creation date:',
- 'domain.expires' => 'Expiry date:',
- 'domain.changed' => 'Updated date:'
- );
-
- $extra = array(
- 'postal address:' => 'address.0',
- 'job title:' => '',
- 'number:' => 'handle',
- 'description:' => 'organization'
- );
-
- $r = array();
- $r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'ymd', $extra);
-
- if (!empty($r['regrinfo']['domain']['sponsor'])) {
- list($v, $reg) = explode(':', $r['regrinfo']['domain']['sponsor'][0]);
- $r['regrinfo']['domain']['sponsor'] = trim($reg);
- }
-
- if (empty($r['regrinfo']['domain']['status']) || $r['regrinfo']['domain']['status'] == 'available')
- $r['regrinfo']['registered'] = 'no';
- else
- $r['regrinfo']['registered'] = 'yes';
-
- $r['regyinfo'] = array(
- 'registrar' => 'CIRA',
- 'referrer' => 'http://www.cira.ca/'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.cat.php b/src/whois.cat.php
deleted file mode 100644
index ce5bd86e..00000000
--- a/src/whois.cat.php
+++ /dev/null
@@ -1,44 +0,0 @@
- 'Holder of domain name:',
- 'domain.name' => 'Domain name:',
- 'domain.created' => 'Date of last registration:',
- 'domain.changed' => 'Date of last modification:',
- 'tech' => 'Technical contact:',
- 'domain.nserver' => 'Name servers:',
- 'domain.dnssec' => 'DNSSEC:'
- );
-
- $trans = array(
- 'contractual language:' => 'language'
- );
-
- $r = array();
- $r['regrinfo'] = get_blocks($data_str['rawdata'], $items);
-
- if (!empty($r['regrinfo']['domain']['name'])) {
- $r['regrinfo'] = get_contacts($r['regrinfo'], $trans);
-
- $r['regrinfo']['domain']['name'] = $r['regrinfo']['domain']['name'][0];
-
- if (isset($r['regrinfo']['domain']['changed'][0]))
- $r['regrinfo']['domain']['changed'] = get_date($r['regrinfo']['domain']['changed'][0], 'dmy');
-
- if (isset($r['regrinfo']['domain']['created'][0]))
- $r['regrinfo']['domain']['created'] = get_date($r['regrinfo']['domain']['created'][0], 'dmy');
-
- $r['regrinfo']['registered'] = 'yes';
- } else {
- $r = '';
- $r['regrinfo']['registered'] = 'no';
- }
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.nic.ch',
- 'registrar' => 'SWITCH Domain Name Registration'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.cl.php b/src/whois.cl.php
deleted file mode 100644
index e193004a..00000000
--- a/src/whois.cl.php
+++ /dev/null
@@ -1,53 +0,0 @@
- '(Administrative Contact)',
- 'tech' => 'Contacto Técnico (Technical Contact):',
- 'domain.nserver' => 'Servidores de nombre (Domain servers):',
- 'domain.changed' => '(Database last updated on):'
- );
-
- $trans = array(
- 'organización:' => 'organization',
- 'nombre :' => 'name');
-
- $r = array();
- $r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'd-m-y', $trans);
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.nic.cl',
- 'registrar' => 'NIC Chile'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.co.php b/src/whois.co.php
deleted file mode 100644
index ca91831e..00000000
--- a/src/whois.co.php
+++ /dev/null
@@ -1,40 +0,0 @@
- 'Contact Type: registrant',
- 'admin' => 'Contact Type: admin',
- 'tech' => 'Contact Type: tech',
- 'billing' => 'Contact Type: billing',
- 'domain.name' => 'Domain Name:',
- 'domain.handle' => 'Domain ID:',
- 'domain.expires' => 'Expiry Date:',
- 'domain.created' => 'Created:',
- 'domain.changed' => 'Last updated:',
- 'domain.status' => 'Domain Status:',
- 'domain.sponsor' => 'Sponsoring registrar:',
- 'domain.nserver.' => 'Host Name:'
- );
-
- $translate = array(
- 'Contact ID:' => 'handle',
- 'Name:' => 'name',
- 'Organisation:' => 'organization',
- 'Street 1:' => 'address.street.0',
- 'Street 2:' => 'address.street.1',
- 'Street 3:' => 'address.street.2',
- 'City:' => 'address.city',
- 'State/Province:' => 'address.state',
- 'Postal code:' => 'address.pcode',
- 'Country:' => 'address.country',
- 'Voice:' => 'phone',
- 'Fax:' => 'fax',
- 'Email:' => 'email'
- );
-
- $blocks = get_blocks($data_str['rawdata'], $items);
-
- $r = array();
-
- if (isset($blocks['domain'])) {
- $r['regrinfo']['domain'] = format_dates($blocks['domain'], 'dmy');
- $r['regrinfo']['registered'] = 'yes';
-
- if (isset($blocks['owner'])) {
- $r['regrinfo']['owner'] = generic_parser_b($blocks['owner'], $translate, 'dmy', false);
-
- if (isset($blocks['tech']))
- $r['regrinfo']['tech'] = generic_parser_b($blocks['tech'], $translate, 'dmy', false);
-
- if (isset($blocks['admin']))
- $r['regrinfo']['admin'] = generic_parser_b($blocks['admin'], $translate, 'dmy', false);
-
- if (isset($blocks['billing']))
- $r['regrinfo']['billing'] = generic_parser_b($blocks['billing'], $translate, 'dmy', false);
- }
- else {
- $r['regrinfo']['owner'] = generic_parser_b($data_str['rawdata'], $translate, 'dmy', false);
- }
- } else
- $r['regrinfo']['registered'] = 'no';
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.nic.coop',
- 'registrar' => '.coop registry'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.cz.php b/src/whois.cz.php
deleted file mode 100644
index 8fe9dbca..00000000
--- a/src/whois.cz.php
+++ /dev/null
@@ -1,69 +0,0 @@
- 'expires',
- 'registered' => 'created',
- 'nserver' => 'nserver',
- 'domain' => 'name',
- 'contact' => 'handle',
- 'reg-c' => '',
- 'descr' => 'desc',
- 'e-mail' => 'email',
- 'person' => 'name',
- 'org' => 'organization',
- 'fax-no' => 'fax'
- );
-
- $contacts = array(
- 'admin-c' => 'admin',
- 'tech-c' => 'tech',
- 'bill-c' => 'billing',
- 'registrant' => 'owner'
- );
-
- $r = array();
- $r['regrinfo'] = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'dmy');
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.nic.cz',
- 'registrar' => 'CZ-NIC'
- );
-
- if ($data_str['rawdata'][0] == 'Your connection limit exceeded. Please slow down and try again later.') {
- $r['regrinfo']['registered'] = 'unknown';
- }
-
- return $r;
- }
-
-}
diff --git a/src/whois.de.php b/src/whois.de.php
deleted file mode 100644
index a750ddaf..00000000
--- a/src/whois.de.php
+++ /dev/null
@@ -1,73 +0,0 @@
- 'Domain:',
- 'domain.nserver.' => 'Nserver:',
- 'domain.nserver.#' => 'Nsentry:',
- 'domain.status' => 'Status:',
- 'domain.changed' => 'Changed:',
- 'domain.desc.' => 'Descr:',
- 'owner' => '[Holder]',
- 'admin' => '[Admin-C]',
- 'tech' => '[Tech-C]',
- 'zone' => '[Zone-C]'
- );
-
- $extra = array(
- 'city:' => 'address.city',
- 'postalcode:' => 'address.pcode',
- 'countrycode:' => 'address.country',
- 'remarks:' => '',
- 'sip:' => 'sip',
- 'type:' => ''
- );
-
- $r = array();
-
- $r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'ymd', $extra);
-
- $r['regyinfo'] = array(
- 'registrar' => 'DENIC eG',
- 'referrer' => 'http://www.denic.de/'
- );
-
- if (!isset($r['regrinfo']['domain']['status']) || $r['regrinfo']['domain']['status'] == "free") {
- $r['regrinfo']['registered'] = 'no';
- } else {
- $r['regrinfo']['domain']['changed'] = substr($r['regrinfo']['domain']['changed'], 0, 10);
- $r['regrinfo']['registered'] = 'yes';
- }
- return $r;
- }
-
-}
diff --git a/src/whois.edu.php b/src/whois.edu.php
deleted file mode 100644
index 43a68bf7..00000000
--- a/src/whois.edu.php
+++ /dev/null
@@ -1,58 +0,0 @@
- 'Domain name:',
- 'domain.sponsor' => 'Registrar:',
- 'domain.nserver' => 'Name Servers:',
- 'domain.changed' => 'Domain record last updated:',
- 'domain.created' => 'Domain record activated:',
- 'owner' => 'Registrant:',
- 'admin' => 'Administrative Contact:',
- 'tech' => 'Technical Contact:',
- 'billing' => 'Billing Contact:'
- );
-
- $r = array();
- $r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'dmy');
-
- if (isset($b['tech'])) {
- if ($r['regrinfo']['tech']['name'] == 'Same as above')
- $r['regrinfo']['tech'] = $r['regrinfo']['admin'];
- }
-
- $r['regyinfo']['referrer'] = 'http://whois.educause.net';
- $r['regyinfo']['registrar'] = 'EDUCASE';
- return $r;
- }
-
-}
diff --git a/src/whois.eu.php b/src/whois.eu.php
deleted file mode 100644
index 1f8c9bc4..00000000
--- a/src/whois.eu.php
+++ /dev/null
@@ -1,80 +0,0 @@
- 'Domain:',
- 'domain.status' => 'Status:',
- 'domain.nserver' => 'Name servers:',
- 'domain.created' => 'Registered:',
- 'domain.registrar' => 'Registrar:',
- 'tech' => 'Registrar Technical Contacts:',
- 'owner' => 'Registrant:',
- '' => 'Please visit'
- );
-
- $extra = array(
- 'organisation:' => 'organization',
- 'website:' => 'url'
- );
-
- $r = array();
- $r['regrinfo'] = get_blocks($data['rawdata'], $items);
-
- if (!empty($r['regrinfo']['domain']['status']))
- switch ($r['regrinfo']['domain']['status']) {
- case 'FREE':
- case 'AVAILABLE':
- $r['regrinfo']['registered'] = 'no';
- break;
-
- case 'APPLICATION PENDING':
- $r['regrinfo']['registered'] = 'pending';
- break;
-
- default:
- $r['regrinfo']['registered'] = 'unknown';
- } else
- $r['regrinfo']['registered'] = 'yes';
-
- if (isset($r['regrinfo']['tech']))
- $r['regrinfo']['tech'] = get_contact($r['regrinfo']['tech'], $extra);
-
- if (isset($r['regrinfo']['domain']['registrar']))
- $r['regrinfo']['domain']['registrar'] = get_contact($r['regrinfo']['domain']['registrar'], $extra);
-
- $r['regyinfo']['referrer'] = 'http://www.eurid.eu';
- $r['regyinfo']['registrar'] = 'EURID';
- return $r;
- }
-
-}
diff --git a/src/whois.fi.php b/src/whois.fi.php
deleted file mode 100644
index 58bf69a3..00000000
--- a/src/whois.fi.php
+++ /dev/null
@@ -1,54 +0,0 @@
- 'domain.name',
- 'created:' => 'domain.created',
- 'expires:' => 'domain.expires',
- 'status:' => 'domain.status',
- 'nserver:' => 'domain.nserver.',
- 'descr:' => 'owner.name.',
- 'address:' => 'owner.address.',
- 'phone:' => 'owner.phone',
- );
-
- $r = array();
- $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items);
-
- $r['regyinfo'] = array(
- 'referrer' => 'https://domain.ficora.fi/',
- 'registrar' => 'Finnish Communications Regulatory Authority'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.fj.php b/src/whois.fj.php
deleted file mode 100644
index 59a1da5d..00000000
--- a/src/whois.fj.php
+++ /dev/null
@@ -1,63 +0,0 @@
- 'Registrant:',
- 'domain.status' => 'Status:',
- 'domain.expires' => 'Expires:',
- 'domain.nserver' => 'Domain servers:'
- );
-
- $r = array();
- $r['regrinfo'] = get_blocks($data_str['rawdata'], $items);
-
- if (!empty($r['regrinfo']['domain']['status'])) {
- $r['regrinfo'] = get_contacts($r['regrinfo']);
-
- date_default_timezone_set("Pacific/Fiji");
-
- if (isset($r['regrinfo']['domain']['expires']))
- $r['regrinfo']['domain']['expires'] = strftime("%Y-%m-%d", strtotime($r['regrinfo']['domain']['expires']));
-
- $r['regrinfo']['registered'] = 'yes';
- } else {
- $r['regrinfo']['registered'] = 'no';
- }
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.domains.fj',
- 'registrar' => 'FJ Domain Name Registry'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.fm.php b/src/whois.fm.php
deleted file mode 100644
index e26b7292..00000000
--- a/src/whois.fm.php
+++ /dev/null
@@ -1,75 +0,0 @@
- 'Registrant',
- 'admin' => 'Admin',
- 'tech' => 'Technical',
- 'billing' => 'Billing',
- 'domain.nserver' => 'Name Servers:',
- 'domain.created' => 'Created:',
- 'domain.expires' => 'Expires:',
- 'domain.changed' => 'Modified:',
- 'domain.status' => 'Status:',
- 'domain.sponsor' => 'Registrar Name:'
- );
-
- $r = array();
- $r['regrinfo'] = get_blocks($data['rawdata'], $items);
-
- $items = array(
- 'phone number:' => 'phone',
- 'email address:' => 'email',
- 'fax number:' => 'fax',
- 'organisation:' => 'organization'
- );
-
- if (!empty($r['regrinfo']['domain']['created'])) {
- $r['regrinfo'] = get_contacts($r['regrinfo'], $items);
-
- if (count($r['regrinfo']['billing']['address']) > 4)
- $r['regrinfo']['billing']['address'] = array_slice($r['regrinfo']['billing']['address'], 0, 4);
-
- $r['regrinfo']['registered'] = 'yes';
- format_dates($r['regrinfo']['domain'], 'dmY');
- }
- else {
- $r = '';
- $r['regrinfo']['registered'] = 'no';
- }
-
- $r['regyinfo']['referrer'] = 'http://www.dot.dm';
- $r['regyinfo']['registrar'] = 'dotFM';
- return $r;
- }
-
-}
diff --git a/src/whois.fr.php b/src/whois.fr.php
deleted file mode 100644
index 60f2afa6..00000000
--- a/src/whois.fr.php
+++ /dev/null
@@ -1,74 +0,0 @@
- 'fax',
- 'e-mail' => 'email',
- 'nic-hdl' => 'handle',
- 'ns-list' => 'handle',
- 'person' => 'name',
- 'address' => 'address.',
- 'descr' => 'desc',
- 'anniversary' => '',
- 'domain' => '',
- 'last-update' => 'changed',
- 'registered' => 'created',
- 'country' => 'address.country',
- 'registrar' => 'sponsor',
- 'role' => 'organization'
- );
-
- $contacts = array(
- 'admin-c' => 'admin',
- 'tech-c' => 'tech',
- 'zone-c' => 'zone',
- 'holder-c' => 'owner',
- 'nsl-id' => 'nserver'
- );
-
- $reg = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'dmY');
-
- if (isset($reg['nserver'])) {
- $reg['domain'] = array_merge($reg['domain'], $reg['nserver']);
- unset($reg['nserver']);
- }
-
- $r = array();
- $r['regrinfo'] = $reg;
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.nic.fr',
- 'registrar' => 'AFNIC'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.gtld.afternic.php b/src/whois.gtld.afternic.php
deleted file mode 100644
index ba65ecc5..00000000
--- a/src/whois.gtld.afternic.php
+++ /dev/null
@@ -1,47 +0,0 @@
- 'Registrant:',
- 'admin' => 'Administrative Contact',
- 'tech' => 'Technical Contact',
- 'zone' => 'Zone Contact',
- 'domain.name' => 'Domain Name:',
- 'domain.changed' => 'Last updated on',
- 'domain.created' => 'Domain created on',
- 'domain.expires' => 'Domain expires on'
- );
-
- return easy_parser($data_str, $items, 'dmy', array(), false, true);
- }
-
-}
diff --git a/src/whois.hu.php b/src/whois.hu.php
deleted file mode 100644
index d6978da8..00000000
--- a/src/whois.hu.php
+++ /dev/null
@@ -1,50 +0,0 @@
- 'domain.name',
- 'record created:' => 'domain.created'
- );
-
- $r = array();
- $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'ymd');
-
- if (isset($r['regrinfo']['domain']))
- $r['regrinfo']['registered'] = 'yes';
- else
- $r['regrinfo']['registered'] = 'no';
-
- $r['regyinfo'] = array('referrer' => 'http://www.nic.hu', 'registrar' => 'HUNIC');
- return $r;
- }
-
-}
diff --git a/src/whois.ie.php b/src/whois.ie.php
deleted file mode 100644
index da38fadc..00000000
--- a/src/whois.ie.php
+++ /dev/null
@@ -1,60 +0,0 @@
- 'handle',
- 'person' => 'name',
- 'renewal' => 'expires'
- );
-
- $contacts = array(
- 'admin-c' => 'admin',
- 'tech-c' => 'tech',
- );
-
- $reg = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
-
- if (isset($reg['domain']['descr'])) {
- $reg['owner']['organization'] = $reg['domain']['descr'][0];
- unset($reg['domain']['descr']);
- }
-
- $r = array();
- $r['regrinfo'] = $reg;
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.domainregistry.ie',
- 'registrar' => 'IE Domain Registry'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.il.php b/src/whois.il.php
deleted file mode 100644
index 743c27be..00000000
--- a/src/whois.il.php
+++ /dev/null
@@ -1,98 +0,0 @@
- 'fax',
- 'e-mail' => 'email',
- 'nic-hdl' => 'handle',
- 'person' => 'name',
- 'personname' => 'name',
- 'address' => 'address'/* ,
- 'address' => 'address.city',
- 'address' => 'address.pcode',
- 'address' => 'address.country' */
- );
-
- $contacts = array(
- 'registrant' => 'owner',
- 'admin-c' => 'admin',
- 'tech-c' => 'tech',
- 'billing-c' => 'billing',
- 'zone-c' => 'zone'
- );
-//unset($data_str['rawdata'][19]);
- array_splice($data_str['rawdata'], 16, 1);
- array_splice($data_str['rawdata'], 18, 1);
-//print_r($data_str['rawdata']);
-//die;
- $reg = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
-
- if (isset($reg['domain']['remarks']))
- unset($reg['domain']['remarks']);
-
- if (isset($reg['domain']['descr:'])) {
- while (list($key, $val) = each($reg['domain']['descr:'])) {
- $v = trim(substr(strstr($val, ':'), 1));
- if (strstr($val, '[organization]:')) {
- $reg['owner']['organization'] = $v;
- continue;
- }
- if (strstr($val, '[phone]:')) {
- $reg['owner']['phone'] = $v;
- continue;
- }
- if (strstr($val, '[fax-no]:')) {
- $reg['owner']['fax'] = $v;
- continue;
- }
- if (strstr($val, '[e-mail]:')) {
- $reg['owner']['email'] = $v;
- continue;
- }
-
- $reg['owner']['address'][$key] = $v;
- }
-
- if (isset($reg['domain']['descr:']))
- unset($reg['domain']['descr:']);
- }
-
- $r = array();
- $r['regrinfo'] = $reg;
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.isoc.org.il/',
- 'registrar' => 'ISOC-IL'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.in.php b/src/whois.in.php
deleted file mode 100644
index 6cd8d6f1..00000000
--- a/src/whois.in.php
+++ /dev/null
@@ -1,42 +0,0 @@
- 'http://whois.registry.in',
- 'registrar' => 'INRegistry'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.info.php b/src/whois.info.php
deleted file mode 100644
index 2dfda374..00000000
--- a/src/whois.info.php
+++ /dev/null
@@ -1,42 +0,0 @@
- 'http://whois.afilias.info',
- 'registrar' => 'Afilias Global Registry Services'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.int.php b/src/whois.int.php
deleted file mode 100644
index a2076a99..00000000
--- a/src/whois.int.php
+++ /dev/null
@@ -1,41 +0,0 @@
-parse($data_str['rawdata'], $query);
- $r['regyinfo']['referrer'] = 'http://www.iana.org/int-dom/int.htm';
- $r['regyinfo']['registrar'] = 'Internet Assigned Numbers Authority';
- return $r;
- }
-
-}
diff --git a/src/whois.ir.php b/src/whois.ir.php
deleted file mode 100644
index fdacebde..00000000
--- a/src/whois.ir.php
+++ /dev/null
@@ -1,64 +0,0 @@
- 'handle',
- 'org' => 'organization',
- 'e-mail' => 'email',
- 'person' => 'name',
- 'fax-no' => 'fax',
- 'domain' => 'name'
- );
-
- $contacts = array(
- 'admin-c' => 'admin',
- 'tech-c' => 'tech',
- 'holder-c' => 'owner'
- );
-
- $reg = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
-
- $r = array();
- $r['regrinfo'] = $reg;
- $r['regyinfo'] = array(
- 'referrer' => 'http://whois.nic.ir/',
- 'registrar' => 'NIC-IR'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.is.php b/src/whois.is.php
deleted file mode 100644
index 09f8e659..00000000
--- a/src/whois.is.php
+++ /dev/null
@@ -1,65 +0,0 @@
- 'fax',
- 'e-mail' => 'email',
- 'nic-hdl' => 'handle',
- 'person' => 'name'
- );
-
- $contacts = array(
- 'owner-c' => 'owner',
- 'admin-c' => 'admin',
- 'tech-c' => 'tech',
- 'billing-c' => 'billing',
- 'zone-c' => 'zone'
- );
-
- $reg = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'mdy');
-
- if (isset($reg['domain']['descr'])) {
- $reg['owner']['name'] = array_shift($reg['domain']['descr']);
- $reg['owner']['address'] = $reg['domain']['descr'];
- unset($reg['domain']['descr']);
- }
-
- $r = array();
- $r['regrinfo'] = $reg;
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.isnic.is',
- 'registrar' => 'ISNIC'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.it.php b/src/whois.it.php
deleted file mode 100644
index 424ddcd7..00000000
--- a/src/whois.it.php
+++ /dev/null
@@ -1,74 +0,0 @@
- array
- * - ContactID in address
- */
-
-if (!defined('__IT_HANDLER__'))
- define('__IT_HANDLER__', 1);
-
-require_once('whois.parser.php');
-
-class it_handler {
-
- function parse($data_str, $query) {
- $items = array(
- 'domain.name' => 'Domain:',
- 'domain.nserver' => 'Nameservers',
- 'domain.status' => 'Status:',
- 'domain.expires' => 'Expire Date:',
- 'owner' => 'Registrant',
- 'admin' => 'Admin Contact',
- 'tech' => 'Technical Contacts',
- 'registrar' => 'Registrar'
- );
-
- $extra = array(
- 'address:' => 'address.',
- 'contactid:' => 'handle',
- 'organization:' => 'organization',
- 'created:' => 'created',
- 'last update:' => 'changed',
- 'web:' => 'web'
- );
-
- $r = array();
- $r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'ymd', $extra);
-
- if (isset($r['regrinfo']['registrar'])) {
- $r['regrinfo']['domain']['registrar'] = $r['regrinfo']['registrar'];
- unset($r['regrinfo']['registrar']);
- }
-
- $r['regyinfo'] = array(
- 'registrar' => 'IT-Nic',
- 'referrer' => 'http://www.nic.it/'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.lt.php b/src/whois.lt.php
deleted file mode 100644
index 8d3d478e..00000000
--- a/src/whois.lt.php
+++ /dev/null
@@ -1,61 +0,0 @@
- 'handle',
- 'contact name:' => 'name'
- );
-
- $items = array(
- 'admin' => 'Contact type: Admin',
- 'tech' => 'Contact type: Tech',
- 'zone' => 'Contact type: Zone',
- 'owner.name' => 'Registrar:',
- 'owner.email' => 'Registrar email:',
- 'domain.status' => 'Status:',
- 'domain.created' => 'Registered:',
- 'domain.changed' => 'Last updated:',
- 'domain.nserver.' => 'NS:',
- '' => '%'
- );
-
- $r = array();
- $r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'ymd', $translate);
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.domreg.lt',
- 'registrar' => 'DOMREG.LT'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.ly.php b/src/whois.ly.php
deleted file mode 100644
index ebdd0d29..00000000
--- a/src/whois.ly.php
+++ /dev/null
@@ -1,66 +0,0 @@
- 'Registrant:',
- 'admin' => 'Administrative Contact:',
- 'tech' => 'Technical Contact:',
- 'domain.name' => 'Domain Name:',
- 'domain.status' => 'Domain Status:',
- 'domain.created' => 'Created:',
- 'domain.changed' => 'Updated:',
- 'domain.expires' => 'Expired:',
- 'domain.nserver' => 'Domain servers in listed order:'
- );
-
- $extra = array('zip/postal code:' => 'address.pcode');
-
- $r = array();
- $r['regrinfo'] = get_blocks($data_str['rawdata'], $items);
-
- if (!empty($r['regrinfo']['domain']['name'])) {
- $r['regrinfo'] = get_contacts($r['regrinfo'], $extra);
- $r['regrinfo']['domain']['name'] = $r['regrinfo']['domain']['name'][0];
- $r['regrinfo']['registered'] = 'yes';
- } else {
- $r = array('regrinfo' => array());
- $r['regrinfo']['registered'] = 'no';
- }
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.nic.ly',
- 'registrar' => 'Libya ccTLD'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.me.php b/src/whois.me.php
deleted file mode 100644
index c9aae80b..00000000
--- a/src/whois.me.php
+++ /dev/null
@@ -1,42 +0,0 @@
- 'http://domain.me',
- 'registrar' => 'doMEn'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.mobi.php b/src/whois.mobi.php
deleted file mode 100644
index 55693106..00000000
--- a/src/whois.mobi.php
+++ /dev/null
@@ -1,44 +0,0 @@
- 'http://musedoma.museum',
- 'registrar' => 'Museum Domain Management Association'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.mx.php b/src/whois.mx.php
deleted file mode 100644
index 4c20326d..00000000
--- a/src/whois.mx.php
+++ /dev/null
@@ -1,67 +0,0 @@
- 'Registrant:',
- 'admin' => 'Administrative Contact:',
- 'tech' => 'Technical Contact:',
- 'billing' => 'Billing Contact:',
- 'domain.nserver' => 'Name Servers:',
- 'domain.created' => 'Created On:',
- 'domain.expires' => 'Expiration Date:',
- 'domain.changed' => 'Last Updated On:',
- 'domain.sponsor' => 'Registrar:'
- );
-
- $extra = array(
- 'city:' => 'address.city',
- 'state:' => 'address.state',
- 'dns:' => '0'
- );
-
- $r = array();
- $r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'dmy', $extra);
-
- $r['regyinfo'] = array(
- 'registrar' => 'NIC Mexico',
- 'referrer' => 'http://www.nic.mx/'
- );
-
- if (empty($r['regrinfo']['domain']['created']))
- $r['regrinfo']['registered'] = 'no';
- else
- $r['regrinfo']['registered'] = 'yes';
-
- return $r;
- }
-
-}
diff --git a/src/whois.name.php b/src/whois.name.php
deleted file mode 100644
index 83241325..00000000
--- a/src/whois.name.php
+++ /dev/null
@@ -1,42 +0,0 @@
- 'http://www.nic.name/',
- 'registrar' => 'Global Name Registry'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.nl.php b/src/whois.nl.php
deleted file mode 100644
index de22d14b..00000000
--- a/src/whois.nl.php
+++ /dev/null
@@ -1,82 +0,0 @@
- 'Domain name:',
- 'domain.status' => 'Status:',
- 'domain.nserver' => 'Domain nameservers:',
- 'domain.created' => 'Date registered:',
- 'domain.changed' => 'Record last updated:',
- 'domain.sponsor' => 'Registrar:',
- 'admin' => 'Administrative contact:',
- 'tech' => 'Technical contact(s):'
- );
-
- $r = array();
- $r['regrinfo'] = get_blocks($data['rawdata'], $items);
- $r['regyinfo']['referrer'] = 'http://www.domain-registry.nl';
- $r['regyinfo']['registrar'] = 'Stichting Internet Domeinregistratie NL';
-
- if (!isset($r['regrinfo']['domain']['status'])) {
- $r['regrinfo']['registered'] = 'no';
- return $r;
- }
-
- if (isset($r['regrinfo']['tech']))
- $r['regrinfo']['tech'] = $this->get_contact($r['regrinfo']['tech']);
-
- if (isset($r['regrinfo']['zone']))
- $r['regrinfo']['zone'] = $this->get_contact($r['regrinfo']['zone']);
-
- if (isset($r['regrinfo']['admin']))
- $r['regrinfo']['admin'] = $this->get_contact($r['regrinfo']['admin']);
-
- if (isset($r['regrinfo']['owner']))
- $r['regrinfo']['owner'] = $this->get_contact($r['regrinfo']['owner']);
-
- $r['regrinfo']['registered'] = 'yes';
- format_dates($r, 'dmy');
- return $r;
- }
-
- function get_contact($data) {
- $r = get_contact($data);
-
- if (isset($r['name']) && preg_match('/^[A-Z0-9]+-[A-Z0-9]+$/', $r['name'])) {
- $r['handle'] = $r['name'];
- $r['name'] = array_shift($r['address']);
- }
-
- return $r;
- }
-
-}
diff --git a/src/whois.nu.php b/src/whois.nu.php
deleted file mode 100644
index c98c123e..00000000
--- a/src/whois.nu.php
+++ /dev/null
@@ -1,82 +0,0 @@
- 'Domain Name (UTF-8):',
- 'created' => 'Record created on',
- 'expires' => 'Record expires on',
- 'changed' => 'Record last updated on',
- 'status' => 'Record status:',
- 'handle' => 'Record ID:'
- );
-
- $r = array();
- while (list($key, $val) = each($data_str['rawdata'])) {
- $val = trim($val);
-
- if ($val != '') {
- if ($val == 'Domain servers in listed order:') {
- while (list($key, $val) = each($data_str['rawdata'])) {
- $val = trim($val);
- if ($val == '')
- break;
- $r['regrinfo']['domain']['nserver'][] = $val;
- }
- break;
- }
-
- reset($items);
-
- while (list($field, $match) = each($items))
- if (strstr($val, $match)) {
- $r['regrinfo']['domain'][$field] = trim(substr($val, strlen($match)));
- break;
- }
- }
- }
-
- if (isset($r['regrinfo']['domain']))
- $r['regrinfo']['registered'] = 'yes';
- else
- $r['regrinfo']['registered'] = 'no';
-
- $r['regyinfo'] = array(
- 'whois' => 'whois.nic.nu',
- 'referrer' => 'http://www.nunames.nu',
- 'registrar' => '.NU Domain, Ltd'
- );
-
- format_dates($r, 'dmy');
- return $r;
- }
-
-}
diff --git a/src/whois.org.php b/src/whois.org.php
deleted file mode 100644
index 2b917841..00000000
--- a/src/whois.org.php
+++ /dev/null
@@ -1,44 +0,0 @@
- 'domain.name',
- 'Domain ID:' => 'domain.handle',
- 'Sponsoring Registrar:' => 'domain.sponsor',
- 'Registrar ID:' => 'domain.sponsor',
- 'Domain Status:' => 'domain.status.',
- 'Status:' => 'domain.status.',
- 'Name Server:' => 'domain.nserver.',
- 'Nameservers:' => 'domain.nserver.',
- 'Maintainer:' => 'domain.referer',
- 'Domain Registration Date:' => 'domain.created',
- 'Domain Create Date:' => 'domain.created',
- 'Domain Expiration Date:' => 'domain.expires',
- 'Domain Last Updated Date:' => 'domain.changed',
- 'Creation Date:' => 'domain.created',
- 'Last Modification Date:' => 'domain.changed',
- 'Expiration Date:' => 'domain.expires',
- 'Created On:' => 'domain.created',
- 'Last Updated On:' => 'domain.changed',
- 'Expiration Date:' => 'domain.expires',
- 'Registrant ID:' => 'owner.handle',
- 'Registrant Name:' => 'owner.name',
- 'Registrant Organization:' => 'owner.organization',
- 'Registrant Address:' => 'owner.address.street.',
- 'Registrant Address1:' => 'owner.address.street.',
- 'Registrant Address2:' => 'owner.address.street.',
- 'Registrant Street:' => 'owner.address.street.',
- 'Registrant Street1:' => 'owner.address.street.',
- 'Registrant Street2:' => 'owner.address.street.',
- 'Registrant Street3:' => 'owner.address.street.',
- 'Registrant Postal Code:' => 'owner.address.pcode',
- 'Registrant City:' => 'owner.address.city',
- 'Registrant State/Province:' => 'owner.address.state',
- 'Registrant Country:' => 'owner.address.country',
- 'Registrant Country/Economy:' => 'owner.address.country',
- 'Registrant Phone Number:' => 'owner.phone',
- 'Registrant Phone:' => 'owner.phone',
- 'Registrant Facsimile Number:' => 'owner.fax',
- 'Registrant FAX:' => 'owner.fax',
- 'Registrant Email:' => 'owner.email',
- 'Registrant E-mail:' => 'owner.email',
- 'Administrative Contact ID:' => 'admin.handle',
- 'Administrative Contact Name:' => 'admin.name',
- 'Administrative Contact Organization:' => 'admin.organization',
- 'Administrative Contact Address:' => 'admin.address.street.',
- 'Administrative Contact Address1:' => 'admin.address.street.',
- 'Administrative Contact Address2:' => 'admin.address.street.',
- 'Administrative Contact Postal Code:' => 'admin.address.pcode',
- 'Administrative Contact City:' => 'admin.address.city',
- 'Administrative Contact State/Province:' => 'admin.address.state',
- 'Administrative Contact Country:' => 'admin.address.country',
- 'Administrative Contact Phone Number:' => 'admin.phone',
- 'Administrative Contact Email:' => 'admin.email',
- 'Administrative Contact Facsimile Number:' => 'admin.fax',
- 'Administrative Contact Tel:' => 'admin.phone',
- 'Administrative Contact Fax:' => 'admin.fax',
- 'Administrative ID:' => 'admin.handle',
- 'Administrative Name:' => 'admin.name',
- 'Administrative Organization:' => 'admin.organization',
- 'Administrative Address:' => 'admin.address.street.',
- 'Administrative Address1:' => 'admin.address.street.',
- 'Administrative Address2:' => 'admin.address.street.',
- 'Administrative Postal Code:' => 'admin.address.pcode',
- 'Administrative City:' => 'admin.address.city',
- 'Administrative State/Province:' => 'admin.address.state',
- 'Administrative Country/Economy:' => 'admin.address.country',
- 'Administrative Phone:' => 'admin.phone',
- 'Administrative E-mail:' => 'admin.email',
- 'Administrative Facsimile Number:' => 'admin.fax',
- 'Administrative Tel:' => 'admin.phone',
- 'Administrative FAX:' => 'admin.fax',
- 'Admin ID:' => 'admin.handle',
- 'Admin Name:' => 'admin.name',
- 'Admin Organization:' => 'admin.organization',
- 'Admin Street:' => 'admin.address.street.',
- 'Admin Street1:' => 'admin.address.street.',
- 'Admin Street2:' => 'admin.address.street.',
- 'Admin Street3:' => 'admin.address.street.',
- 'Admin Address:' => 'admin.address.street.',
- 'Admin Address2:' => 'admin.address.street.',
- 'Admin Address3:' => 'admin.address.street.',
- 'Admin City:' => 'admin.address.city',
- 'Admin State/Province:' => 'admin.address.state',
- 'Admin Postal Code:' => 'admin.address.pcode',
- 'Admin Country:' => 'admin.address.country',
- 'Admin Country/Economy:' => 'admin.address.country',
- 'Admin Phone:' => 'admin.phone',
- 'Admin FAX:' => 'admin.fax',
- 'Admin Email:' => 'admin.email',
- 'Admin E-mail:' => 'admin.email',
- 'Technical Contact ID:' => 'tech.handle',
- 'Technical Contact Name:' => 'tech.name',
- 'Technical Contact Organization:' => 'tech.organization',
- 'Technical Contact Address:' => 'tech.address.street.',
- 'Technical Contact Address1:' => 'tech.address.street.',
- 'Technical Contact Address2:' => 'tech.address.street.',
- 'Technical Contact Postal Code:' => 'tech.address.pcode',
- 'Technical Contact City:' => 'tech.address.city',
- 'Technical Contact State/Province:' => 'tech.address.state',
- 'Technical Contact Country:' => 'tech.address.country',
- 'Technical Contact Phone Number:' => 'tech.phone',
- 'Technical Contact Facsimile Number:' => 'tech.fax',
- 'Technical Contact Phone:' => 'tech.phone',
- 'Technical Contact Fax:' => 'tech.fax',
- 'Technical Contact Email:' => 'tech.email',
- 'Technical ID:' => 'tech.handle',
- 'Technical Name:' => 'tech.name',
- 'Technical Organization:' => 'tech.organization',
- 'Technical Address:' => 'tech.address.street.',
- 'Technical Address1:' => 'tech.address.street.',
- 'Technical Address2:' => 'tech.address.street.',
- 'Technical Postal Code:' => 'tech.address.pcode',
- 'Technical City:' => 'tech.address.city',
- 'Technical State/Province:' => 'tech.address.state',
- 'Technical Country/Economy:' => 'tech.address.country',
- 'Technical Phone Number:' => 'tech.phone',
- 'Technical Facsimile Number:' => 'tech.fax',
- 'Technical Phone:' => 'tech.phone',
- 'Technical Fax:' => 'tech.fax',
- 'Technical FAX:' => 'tech.fax',
- 'Technical E-mail:' => 'tech.email',
- 'Tech ID:' => 'tech.handle',
- 'Tech Name:' => 'tech.name',
- 'Tech Organization:' => 'tech.organization',
- 'Tech Address:' => 'tech.address.street.',
- 'Tech Address2:' => 'tech.address.street.',
- 'Tech Address3:' => 'tech.address.street.',
- 'Tech Street:' => 'tech.address.street.',
- 'Tech Street1:' => 'tech.address.street.',
- 'Tech Street2:' => 'tech.address.street.',
- 'Tech Street3:' => 'tech.address.street.',
- 'Tech City:' => 'tech.address.city',
- 'Tech Postal Code:' => 'tech.address.pcode',
- 'Tech State/Province:' => 'tech.address.state',
- 'Tech Country:' => 'tech.address.country',
- 'Tech Country/Economy:' => 'tech.address.country',
- 'Tech Phone:' => 'tech.phone',
- 'Tech FAX:' => 'tech.fax',
- 'Tech Email:' => 'tech.email',
- 'Tech E-mail:' => 'tech.email',
- 'Billing Contact ID:' => 'billing.handle',
- 'Billing Contact Name:' => 'billing.name',
- 'Billing Contact Organization:' => 'billing.organization',
- 'Billing Contact Address1:' => 'billing.address.street.',
- 'Billing Contact Address2:' => 'billing.address.street.',
- 'Billing Contact Postal Code:' => 'billing.address.pcode',
- 'Billing Contact City:' => 'billing.address.city',
- 'Billing Contact State/Province:' => 'billing.address.state',
- 'Billing Contact Country:' => 'billing.address.country',
- 'Billing Contact Phone Number:' => 'billing.phone',
- 'Billing Contact Facsimile Number:' => 'billing.fax',
- 'Billing Contact Email:' => 'billing.email',
- 'Billing ID:' => 'billing.handle',
- 'Billing Name:' => 'billing.name',
- 'Billing Organization:' => 'billing.organization',
- 'Billing Address:' => 'billing.address.street.',
- 'Billing Address1:' => 'billing.address.street.',
- 'Billing Address2:' => 'billing.address.street.',
- 'Billing Address3:' => 'billing.address.street.',
- 'Billing Street:' => 'billing.address.street.',
- 'Billing Street1:' => 'billing.address.street.',
- 'Billing Street2:' => 'billing.address.street.',
- 'Billing Street3:' => 'billing.address.street.',
- 'Billing City:' => 'billing.address.city',
- 'Billing Postal Code:' => 'billing.address.pcode',
- 'Billing State/Province:' => 'billing.address.state',
- 'Billing Country:' => 'billing.address.country',
- 'Billing Country/Economy:' => 'billing.address.country',
- 'Billing Phone:' => 'billing.phone',
- 'Billing Fax:' => 'billing.fax',
- 'Billing FAX:' => 'billing.fax',
- 'Billing Email:' => 'billing.email',
- 'Billing E-mail:' => 'billing.email',
- 'Zone ID:' => 'zone.handle',
- 'Zone Organization:' => 'zone.organization',
- 'Zone Name:' => 'zone.name',
- 'Zone Address:' => 'zone.address.street.',
- 'Zone Address 2:' => 'zone.address.street.',
- 'Zone City:' => 'zone.address.city',
- 'Zone State/Province:' => 'zone.address.state',
- 'Zone Postal Code:' => 'zone.address.pcode',
- 'Zone Country:' => 'zone.address.country',
- 'Zone Phone Number:' => 'zone.phone',
- 'Zone Fax Number:' => 'zone.fax',
- 'Zone Email:' => 'zone.email'
- );
-
- $r = '';
- $disok = true;
-
- while (list($key, $val) = each($rawdata)) {
- if (trim($val) != '') {
- if (($val[0] == '%' || $val[0] == '#') && $disok) {
- $r['disclaimer'][] = trim(substr($val, 1));
- $disok = true;
- continue;
- }
-
- $disok = false;
- reset($items);
-
- while (list($match, $field) = each($items)) {
- $pos = strpos($val, $match);
-
- if ($pos !== false) {
- if ($field != '') {
- $var = '$r' . getvarname($field);
- $itm = trim(substr($val, $pos + strlen($match)));
-
- if ($itm != '')
- eval($var . '="' . str_replace('"', '\"', $itm) . '";');
- }
-
- if (!$scanall)
- break;
- }
- }
- }
- }
-
- if (empty($r)) {
- if ($hasreg)
- $r['registered'] = 'no';
- }
- else {
- if ($hasreg)
- $r['registered'] = 'yes';
-
- $r = format_dates($r, $dateformat);
- }
-
- return $r;
-}
-
-function getvarname($vdef) {
- $parts = explode('.', $vdef);
- $var = '';
-
- foreach ($parts as $mn)
- if ($mn == '')
- $var = $var . '[]';
- else
- $var = $var . '["' . $mn . '"]';
-
- return $var;
-}
-
-function get_blocks($rawdata, $items, $partial_match = false, $def_block = false) {
-
- $r = array();
- $endtag = '';
-
- while (list($key, $val) = each($rawdata)) {
- $val = trim($val);
- if ($val == '')
- continue;
-
- $var = $found = false;
-
- foreach ($items as $field => $match) {
- $pos = strpos($val, $match);
-
- if ($field != '' && $pos !== false) {
- if ($val == $match) {
- $found = true;
- $endtag = '';
- $line = $val;
- break;
- }
-
- $last = substr($val, -1, 1);
-
- if ($last == ':' || $last == '-' || $last == ']') {
- $found = true;
- $endtag = $last;
- $line = $val;
- } else {
- $var = getvarname(strtok($field, '#'));
- $itm = trim(substr($val, $pos + strlen($match)));
- eval('$r' . $var . '=$itm;');
- }
-
- break;
- }
- }
-
- if (!$found) {
- if (!$var && $def_block)
- $r[$def_block][] = $val;
- continue;
- }
-
- $block = array();
-
- // Block found, get data ...
-
- while (list($key, $val) = each($rawdata)) {
- $val = trim($val);
-
- if ($val == '' || $val == str_repeat($val[0], strlen($val)))
- continue;
-
- $last = substr($val, -1, 1);
- /*
- if ($last == $endtag)
- {
- // Another block found
- prev($rawdata);
- break;
- }
-
- if ($endtag == '' || $partial_match)
- */
- if ($endtag == '' || $partial_match || $last == $endtag) {
- //Check if this line starts another block
- $et = false;
-
- foreach ($items as $field => $match) {
- $pos = strpos($val, $match);
-
- if ($pos !== false && $pos == 0) {
- $et = true;
- break;
- }
- }
-
- if ($et) {
- // Another block found
- prev($rawdata);
- break;
- }
- }
-
- $block[] = $val;
- }
-
- if (empty($block))
- continue;
-
- foreach ($items as $field => $match) {
- $pos = strpos($line, $match);
-
- if ($pos !== false) {
- $var = getvarname(strtok($field, '#'));
- if ($var != '[]')
- eval('$r' . $var . '=$block;');
- }
- }
- }
-
- return $r;
-}
-
-function easy_parser($data_str, $items, $date_format, $translate = array(), $has_org = false, $partial_match = false, $def_block = false) {
- $r = get_blocks($data_str, $items, $partial_match, $def_block);
- $r = get_contacts($r, $translate, $has_org);
- format_dates($r, $date_format);
- return $r;
-}
-
-function get_contacts($array, $extra_items = array(), $has_org = false) {
- if (isset($array['billing']))
- $array['billing'] = get_contact($array['billing'], $extra_items, $has_org);
-
- if (isset($array['tech']))
- $array['tech'] = get_contact($array['tech'], $extra_items, $has_org);
-
- if (isset($array['zone']))
- $array['zone'] = get_contact($array['zone'], $extra_items, $has_org);
-
- if (isset($array['admin']))
- $array['admin'] = get_contact($array['admin'], $extra_items, $has_org);
-
- if (isset($array['owner']))
- $array['owner'] = get_contact($array['owner'], $extra_items, $has_org);
-
- if (isset($array['registrar']))
- $array['registrar'] = get_contact($array['registrar'], $extra_items, $has_org);
-
- return $array;
-}
-
-function get_contact($array, $extra_items = array(), $has_org = false) {
-
- if (!is_array($array))
- return array();
-
- $items = array(
- 'fax..:' => 'fax',
- 'fax.' => 'fax',
- 'fax-no:' => 'fax',
- 'fax -' => 'fax',
- 'fax-' => 'fax',
- 'fax::' => 'fax',
- 'fax:' => 'fax',
- '[fax]' => 'fax',
- '(fax)' => 'fax',
- 'fax' => 'fax',
- 'tel. ' => 'phone',
- 'tel:' => 'phone',
- 'phone::' => 'phone',
- 'phone:' => 'phone',
- 'phone-' => 'phone',
- 'phone -' => 'phone',
- 'email:' => 'email',
- 'e-mail:' => 'email',
- 'company name:' => 'organization',
- 'organisation:' => 'organization',
- 'first name:' => 'name.first',
- 'last name:' => 'name.last',
- 'street:' => 'address.street',
- 'address:' => 'address.street.',
- 'language:' => '',
- 'location:' => 'address.city',
- 'country:' => 'address.country',
- 'name:' => 'name',
- 'last modified:' => 'changed'
- );
-
- if (is_array($extra_items) && count($extra_items)) {
- foreach ($items as $match => $field)
- if (!isset($extra_items[$match]))
- $extra_items[$match] = $field;
- $items = $extra_items;
- }
-
- while (list($key, $val) = each($array)) {
- $ok = true;
-
- while ($ok) {
- reset($items);
- $ok = false;
-
- while (list($match, $field) = each($items)) {
- $pos = strpos(strtolower($val), $match);
-
- if ($pos === false)
- continue;
-
- $itm = trim(substr($val, $pos + strlen($match)));
-
- /**
- * @todo Get rid of eval
- */
- if ($field != '' && $itm != '') {
- eval('$r' . getvarname($field) . '=$itm;');
- }
-
- $val = trim(substr($val, 0, $pos));
-
- if ($val == '') {
- unset($array[$key]);
- break;
- } else {
- $array[$key] = $val;
- $ok = true;
- }
- //break;
- }
-
- if (preg_match("/([+]*[-\(\)\. x0-9]){7,}/", $val, $matches)) {
- $phone = trim(str_replace(' ', '', $matches[0]));
-
- if (strlen($phone) > 8 && !preg_match('/[0-9]{5}\-[0-9]{3}/', $phone)) {
- if (isset($r['phone'])) {
- if (isset($r['fax']))
- continue;
- $r['fax'] = trim($matches[0]);
- }
- else {
- $r['phone'] = trim($matches[0]);
- }
-
- $val = str_replace($matches[0], '', $val);
-
- if ($val == '') {
- unset($array[$key]);
- continue;
- } else {
- $array[$key] = $val;
- $ok = true;
- }
- }
- }
-
- if (preg_match('/([-0-9a-zA-Z._+&\/=]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6})/', $val, $matches)) {
- $r['email'] = $matches[0];
-
- $val = str_replace($matches[0], '', $val);
- $val = trim(str_replace('()', '', $val));
-
- if ($val == '') {
- unset($array[$key]);
- continue;
- } else {
- if (!isset($r['name'])) {
- $r['name'] = $val;
- unset($array[$key]);
- } else
- $array[$key] = $val;
-
- $ok = true;
- }
- }
- }
- }
-
- if (!isset($r['name']) && count($array) > 0) {
- $r['name'] = array_shift($array);
- }
-
- if ($has_org && count($array) > 0) {
- $r['organization'] = array_shift($array);
- }
-
- if (isset($r['name']) && is_array($r['name'])) {
- $r['name'] = implode($r['name'], ' ');
- }
-
- if (!empty($array)) {
- if (isset($r['address']))
- $r['address'] = array_merge($r['address'], $array);
- else
- $r['address'] = $array;
- }
-
- return $r;
-}
-
-function format_dates(&$res, $format = 'mdy') {
- if (!is_array($res))
- return $res;
-
- foreach ($res as $key => $val) {
- if (is_array($val)) {
- if (!is_numeric($key) && ($key == 'expires' || $key == 'created' || $key == 'changed')) {
- $d = get_date($val[0], $format);
- if ($d)
- $res[$key] = $d;
- }
- else {
- $res[$key] = format_dates($val, $format);
- }
- } else {
- if (!is_numeric($key) && ($key == 'expires' || $key == 'created' || $key == 'changed')) {
- $d = get_date($val, $format);
- if ($d)
- $res[$key] = $d;
- }
- }
- }
-
- return $res;
-}
-
-function get_date($date, $format) {
- $months = array('jan' => 1, 'ene' => 1, 'feb' => 2, 'mar' => 3, 'apr' => 4, 'abr' => 4,
- 'may' => 5, 'jun' => 6, 'jul' => 7, 'aug' => 8, 'ago' => 8, 'sep' => 9,
- 'oct' => 10, 'nov' => 11, 'dec' => 12, 'dic' => 12);
-
- $parts = explode(' ', $date);
-
- if (strpos($parts[0], '@') !== false) {
- unset($parts[0]);
- $date = implode(' ', $parts);
- }
-
- $date = str_replace(',', ' ', trim($date));
- $date = str_replace('.', ' ', $date);
- $date = str_replace('-', ' ', $date);
- $date = str_replace('/', ' ', $date);
- $date = str_replace("\t", ' ', $date);
-
- $parts = explode(' ', $date);
- $res = false;
-
- if ((strlen($parts[0]) == 8 || count($parts) == 1) && is_numeric($parts[0])) {
- $val = $parts[0];
- for ($p = $i = 0; $i < 3; $i++) {
- if ($format[$i] != 'Y') {
- $res[$format[$i]] = substr($val, $p, 2);
- $p += 2;
- } else {
- $res['y'] = substr($val, $p, 4);
- $p += 4;
- }
- }
- } else {
- $format = strtolower($format);
-
- for ($p = $i = 0; $p < count($parts) && $i < strlen($format); $p++) {
- if (trim($parts[$p]) == '')
- continue;
-
- if ($format[$i] != '-') {
- $res[$format[$i]] = $parts[$p];
- }
- $i++;
- }
- }
-
- if (!$res)
- return $date;
-
- $ok = false;
-
- while (!$ok) {
- reset($res);
- $ok = true;
-
- while (list($key, $val) = each($res)) {
- if ($val == '' || $key == '')
- continue;
-
- if (!is_numeric($val) && isset($months[substr(strtolower($val), 0, 3)])) {
- $res[$key] = $res['m'];
- $res['m'] = $months[substr(strtolower($val), 0, 3)];
- $ok = false;
- break;
- }
-
- if ($key != 'y' && $key != 'Y' && $val > 1900) {
- $res[$key] = $res['y'];
- $res['y'] = $val;
- $ok = false;
- break;
- }
- }
- }
-
- if ($res['m'] > 12) {
- $v = $res['m'];
- $res['m'] = $res['d'];
- $res['d'] = $v;
- }
-
- if ($res['y'] < 70)
- $res['y'] += 2000;
- else
- if ($res['y'] <= 99)
- $res['y'] += 1900;
-
- return sprintf("%.4d-%02d-%02d", $res['y'], $res['m'], $res['d']);
-}
diff --git a/src/whois.pl.php b/src/whois.pl.php
deleted file mode 100644
index 6e13028d..00000000
--- a/src/whois.pl.php
+++ /dev/null
@@ -1,50 +0,0 @@
- 'created:',
- 'domain.changed' => 'last modified:',
- 'domain.sponsor' => 'REGISTRAR:',
- '#' => 'WHOIS displays data with a delay not exceeding 15 minutes in relation to the .pl Registry system'
- );
-
- $r = array();
- $r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'ymd');
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.dns.pl/english/index.html',
- 'registrar' => 'NASK'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.pro.php b/src/whois.pro.php
deleted file mode 100644
index 1e8ae5a8..00000000
--- a/src/whois.pro.php
+++ /dev/null
@@ -1,40 +0,0 @@
- ' / Domain Name:',
- 'domain.created' => 'Data de registo / Creation Date (dd/mm/yyyy):',
- 'domain.nserver.' => 'Nameserver:',
- 'domain.status' => 'Estado / Status:',
- 'owner' => 'Titular / Registrant',
- 'billing' => 'Entidade Gestora / Billing Contact',
- 'admin' => 'Responsável Administrativo / Admin Contact',
- 'tech' => 'Responsável Técnico / Tech Contact',
- '#' => 'Nameserver Information'
- );
-
- $r['regrinfo'] = get_blocks($data['rawdata'], $items);
-
- if (empty($r['regrinfo']['domain']['name']))
- {
- print_r($r['regrinfo']);
- $r['regrinfo']['registered'] = 'no';
- return $r;
- }
-
- $r['regrinfo']['domain']['created'] = get_date($r['regrinfo']['domain']['created'], 'dmy');
-
- if ($r['regrinfo']['domain']['status'] == 'ACTIVE')
- {
- $r['regrinfo'] = get_contacts($r['regrinfo']);
- $r['regrinfo']['registered'] = 'yes';
- }
- else
- $r['regrinfo']['registered'] = 'no';
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.fccn.pt',
- 'registrar' => 'FCCN'
- );
-
- return $r;
- }
- }
-?>
\ No newline at end of file
diff --git a/src/whois.ro.php b/src/whois.ro.php
deleted file mode 100644
index c32e0f02..00000000
--- a/src/whois.ro.php
+++ /dev/null
@@ -1,91 +0,0 @@
- 'fax',
- 'e-mail' => 'email',
- 'nic-hdl' => 'handle',
- 'person' => 'name',
- 'address' => 'address.',
- 'domain-name' => '',
- 'updated' => 'changed',
- 'registration-date' => 'created',
- 'domain-status' => 'status',
- 'nameserver' => 'nserver'
- );
-
- $contacts = array(
- 'admin-contact' => 'admin',
- 'technical-contact' => 'tech',
- 'zone-contact' => 'zone',
- 'billing-contact' => 'billing'
- );
-
- $extra = array(
- 'postal code:' => 'address.pcode'
- );
-
- $reg = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
-
- if (isset($reg['domain']['description'])) {
- $reg['owner'] = get_contact($reg['domain']['description'], $extra);
- unset($reg['domain']['description']);
-
- foreach ($reg as $key => $item) {
- if (isset($item['address'])) {
- $data = $item['address'];
- unset($reg[$key]['address']);
- $reg[$key] = array_merge($reg[$key], get_contact($data, $extra));
- }
- }
-
- $reg['registered'] = 'yes';
- } else
- $reg['registered'] = 'no';
-
- $r = array();
- $r['regrinfo'] = $reg;
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.nic.ro',
- 'registrar' => 'nic.ro'
- );
-
- return $r;
- }
-
-}
diff --git a/src/whois.ru.php b/src/whois.ru.php
deleted file mode 100644
index 40aec501..00000000
--- a/src/whois.ru.php
+++ /dev/null
@@ -1,61 +0,0 @@
- 'domain.name',
- 'registrar:' => 'domain.sponsor',
- 'state:' => 'domain.status',
- 'nserver:' => 'domain.nserver.',
- 'source:' => 'domain.source',
- 'created:' => 'domain.created',
- 'paid-till:' => 'domain.expires',
- 'type:' => 'owner.type',
- 'org:' => 'owner.organization',
- 'phone:' => 'owner.phone',
- 'fax-no:' => 'owner.fax',
- 'e-mail:' => 'owner.email'
- );
-
- $r = array();
- $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'dmy');
-
- if (empty($r['regrinfo']['domain']['status']))
- $r['regrinfo']['registered'] = 'no';
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.ripn.net',
- 'registrar' => 'RU-CENTER-REG-RIPN'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.rwhois.php b/src/whois.rwhois.php
deleted file mode 100644
index 8d676d4e..00000000
--- a/src/whois.rwhois.php
+++ /dev/null
@@ -1,55 +0,0 @@
- 'owner.name',
- 'network:Organization;I:' => 'owner.organization',
- 'network:Organization-City:' => 'owner.address.city',
- 'network:Organization-Zip:' => 'owner.address.pcode',
- 'network:Organization-Country:' => 'owner.address.country',
- 'network:IP-Network-Block:' => 'network.inetnum',
- 'network:IP-Network:' => 'network.inetnum',
- 'network:Network-Name:' => 'network.name',
- 'network:ID:' => 'network.handle',
- 'network:Created:' => 'network.created',
- 'network:Updated:' => 'network.changed',
- 'network:Tech-Contact;I:' => 'tech.email',
- 'network:Admin-Contact;I:' => 'admin.email'
- );
-
- $res = generic_parser_b($data_str, $items, 'Ymd', false);
- if (isset($res['disclaimer']))
- unset($res['disclaimer']);
- return array('regrinfo' => $res);
- }
-
-}
diff --git a/src/whois.sc.php b/src/whois.sc.php
deleted file mode 100644
index 82259846..00000000
--- a/src/whois.sc.php
+++ /dev/null
@@ -1,42 +0,0 @@
- 'http://www.nic.sc',
- 'registrar' => 'VCS (Pty) Limited'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.se.php b/src/whois.se.php
deleted file mode 100644
index 23304fa4..00000000
--- a/src/whois.se.php
+++ /dev/null
@@ -1,55 +0,0 @@
- 'domain.name',
- 'state:' => 'domain.status.',
- 'status:' => 'domain.status.',
- 'expires:' => 'domain.expires',
- 'created:' => 'domain.created',
- 'nserver:' => 'domain.nserver.',
- 'holder:' => 'owner.handle'
- );
-
- $r = array();
- $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'ymd', false);
-
- $r['regrinfo']['registered'] = isset($r['regrinfo']['domain']['name']) ? 'yes' : 'no';
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.nic-se.se',
- 'registrar' => 'NIC-SE'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.servers.php b/src/whois.servers.php
index f7049041..0eb7c85e 100644
--- a/src/whois.servers.php
+++ b/src/whois.servers.php
@@ -1,658 +1,665 @@
array(
- 'bz' => 'gtld',
- 'com' => 'gtld',
- 'jobs' => 'gtld',
- 'li' => 'ch',
- 'net' => 'gtld',
- 'su' => 'ru',
- 'tv' => 'gtld',
- 'za.org' => 'zanet',
- 'za.net' => 'zanet',
- // Punicode
- 'xn--p1ai' => 'ru',
-),
-
-/* Non UTF-8 servers */
+return [
+ 'DATA' => [
+ 'bz' => GtldHandler::class,
+ 'com' => GtldHandler::class,
+ 'jobs' => GtldHandler::class,
+ 'li' => ChHandler::class,
+ 'net' => GtldHandler::class,
+ 'su' => RuHandler::class,
+ 'tv' => GtldHandler::class,
+ 'za.org' => ZanetHandler::class,
+ 'za.net' => ZanetHandler::class,
+ // Punicode
+ 'xn--p1ai' => RuHandler::class,
+ ],
-'NON_UTF8' => array(
- 'br.whois-servers.net' => 1,
- 'ca.whois-servers.net' => 1,
- 'cl.whois-servers.net' => 1,
- 'hu.whois-servers.net' => 1,
- 'is.whois-servers.net' => 1,
- 'pt.whois-servers.net' => 1,
- 'whois.interdomain.net' => 1,
- 'whois.lacnic.net' => 1,
- 'whois.nicline.com' => 1,
- 'whois.ripe.net' => 1,
-),
+ // Non UTF-8 servers
+ 'NON_UTF8' => [
+ 'br.whois-servers.net' => 1,
+ 'ca.whois-servers.net' => 1,
+ 'cl.whois-servers.net' => 1,
+ 'hu.whois-servers.net' => 1,
+ 'is.whois-servers.net' => 1,
+ 'pt.whois-servers.net' => 1,
+ 'whois.interdomain.net' => 1,
+ 'whois.lacnic.net' => 1,
+ 'whois.nicline.com' => 1,
+ 'whois.ripe.net' => 1,
+ ],
-/* If whois Server needs any parameters, enter it here */
+ // If whois Server needs any parameters, enter it here
-'WHOIS_PARAM' => array(
- 'com.whois-servers.net' => 'domain =$',
- 'net.whois-servers.net' => 'domain =$',
- 'de.whois-servers.net' => '-T dn,ace $',
- 'jp.whois-servers.net' => 'DOM $/e',
-),
+ 'WHOIS_PARAM' => [
+ 'com.whois-servers.net' => 'domain =$domain',
+ 'net.whois-servers.net' => 'domain =$domain',
+ 'de.whois-servers.net' => '-T dn,ace $domain',
+ 'jp.whois-servers.net' => 'DOM $domain/e',
+ 'whois.denic.de' => '-T dn,ace $domain.$tld',
+ 'whois.dk-hostmaster.dk' => '--show-handles --charset=utf8 $domain.$tld',
+ ],
-/* TLD's that have special whois servers or that can only be reached via HTTP */
+ // TLD's that have special whois servers or that can only be reached via HTTP
-'WHOIS_SPECIAL' => array(
- 'ac' => 'whois.nic.ac',
- 'academy' => 'whois.donuts.co',
- 'accountants' => 'whois.donuts.co',
- 'active' => 'whois.afilias-srs.net',
- 'actor' => 'whois.unitedtld.com',
- 'ad' => '',
- 'ae' => 'whois.aeda.net.ae',
- 'aero' => 'whois.aero',
- 'af' => 'whois.nic.af',
- 'ag' => 'whois.nic.ag',
- 'agency' => 'whois.donuts.co',
- 'ai' => 'whois.ai',
- 'airforce' => 'whois.unitedtld.com',
- 'al' => '',
- 'am' => 'whois.amnic.net',
- 'archi' => 'whois.ksregistry.net',
- 'army' => 'whois.rightside.co',
- 'arpa' => 'whois.iana.org',
- 'as' => 'whois.nic.as',
- 'asia' => 'whois.nic.asia',
- 'associates' => 'whois.donuts.co',
- 'at' => 'whois.nic.at',
- 'attorney' => 'whois.rightside.co',
- 'au' => 'whois.audns.net.au',
- 'auction' => 'whois.donuts.co',
- 'audio' => 'whois.uniregistry.net',
- 'autos' => 'whois.afilias-srs.net',
- 'aw' => 'whois.nic.aw',
- 'ax' => 'whois.ax',
- 'az' => '',
- 'ba' => '',
- 'bar' => 'whois.nic.bar',
- 'bargains' => 'whois.donuts.co',
- 'bayern' => 'whois-dub.mm-registry.com',
- 'bb' => 'http://domains.org.bb/regsearch/getdetails.cfm?DND={domain}.bb',
- 'be' => 'whois.dns.be',
- 'beer' => 'whois-dub.mm-registry.com',
- 'berlin' => 'whois.nic.berlin',
- 'best' => 'whois.nic.best',
- 'bg' => 'whois.register.bg',
- 'bh' => 'whois.nic.bh',
- 'bi' => 'whois1.nic.bi',
- 'bid' => 'whois.nic.bid',
- 'bike' => 'whois.donuts.co',
- 'bio' => 'whois.ksregistry.net',
- 'biz' => 'whois.biz',
- 'bj' => 'whois.nic.bj',
- 'black' => 'whois.afilias.net',
- 'blackfriday' => 'whois.uniregistry.net',
- 'blue' => 'whois.afilias.net',
- 'bmw' => 'whois.ksregistry.net',
- 'bn' => 'whois.bn',
- 'bo' => 'whois.nic.bo',
- 'boutique' => 'whois.donuts.co',
- 'br' => 'whois.registro.br',
- 'brussels' => 'whois.nic.brussels',
- 'build' => 'whois.nic.build',
- 'builders' => 'whois.donuts.co',
- 'buzz' => 'whois.nic.buzz',
- 'bw' => 'whois.nic.net.bw',
- 'by' => 'whois.cctld.by',
- //'bz' => 'whois2.afilias-grs.net',
- 'bzh' => 'whois-bzh.nic.fr',
- 'ca' => 'whois.cira.ca',
- 'cab' => 'whois.donuts.co',
- 'camera' => 'whois.donuts.co',
- 'camp' => 'whois.donuts.co',
- 'cancerresearch' => 'whois.nic.cancerresearch',
- 'capetown' => 'capetown-whois.registry.net.za',
- 'capital' => 'whois.donuts.co',
- 'cards' => 'whois.donuts.co',
- 'care' => 'whois.donuts.co',
- 'career' => 'whois.nic.career',
- 'careers' => 'whois.donuts.co',
- 'cash' => 'whois.donuts.co',
- 'cat' => 'whois.cat',
- 'catering' => 'whois.donuts.co',
- 'cc' => 'ccwhois.verisign-grs.com',
- 'center' => 'whois.donuts.co',
- 'ceo' => 'whois.nic.ceo',
- 'cf' => 'whois.dot.cf',
- 'ch' => 'whois.nic.ch',
- 'cheap' => 'whois.donuts.co',
- 'christmas' => 'whois.uniregistry.net',
- 'church' => 'whois.donuts.co',
- 'ci' => 'whois.nic.ci',
- 'city' => 'whois.donuts.co',
- 'cl' => 'whois.nic.cl',
- 'claims' => 'whois.donuts.co',
- 'cleaning' => 'whois.donuts.co',
- 'clinic' => 'whois.donuts.co',
- 'clothing' => 'whois.donuts.co',
- 'club' => 'whois.nic.club',
- 'cn' => 'whois.cnnic.cn',
- 'co' => 'whois.nic.co',
- 'codes' => 'whois.donuts.co',
- 'coffee' => 'whois.donuts.co',
- 'college' => 'whois.centralnic.com',
- 'cologne' => 'whois-fe1.pdt.cologne.tango.knipp.de',
- //'com' => 'whois.verisign-grs.com',
- 'community' => 'whois.donuts.co',
- 'company' => 'whois.donuts.co',
- 'computer' => 'whois.donuts.co',
- 'condos' => 'whois.donuts.co',
- 'construction' => 'whois.donuts.co',
- 'consulting' => 'whois.unitedtld.com',
- 'contractors' => 'whois.donuts.co',
- 'cooking' => 'whois-dub.mm-registry.com',
- 'cool' => 'whois.donuts.co',
- 'coop' => 'whois.nic.coop',
- 'country' => 'whois-dub.mm-registry.com',
- 'credit' => 'whois.donuts.co',
- 'creditcard' => 'whois.donuts.co',
- 'cruises' => 'whois.donuts.co',
- 'cuisinella' => 'whois.nic.cuisinella',
- 'cx' => 'whois.nic.cx',
- 'cy' => '',
- 'cz' => 'whois.nic.cz',
- 'dance' => 'whois.unitedtld.com',
- 'dating' => 'whois.donuts.co',
- 'de' => 'whois.denic.de',
- 'deals' => 'whois.donuts.co',
- 'degree' => 'whois.rightside.co',
- 'democrat' => 'whois.unitedtld.com',
- 'dental' => 'whois.donuts.co',
- 'dentist' => 'whois.rightside.co',
- 'desi' => 'whois.ksregistry.net',
- 'diamonds' => 'whois.donuts.co',
- 'digital' => 'whois.donuts.co',
- 'direct' => 'whois.donuts.co',
- 'directory' => 'whois.donuts.co',
- 'discount' => 'whois.donuts.co',
- 'dk' => 'whois.dk-hostmaster.dk',
- 'dm' => 'whois.nic.dm',
- 'domains' => 'whois.donuts.co',
- 'durban' => 'durban-whois.registry.net.za',
- 'dz' => 'whois.nic.dz',
- 'ec' => 'whois.nic.ec',
- 'edu' => 'whois.educause.edu',
- 'education' => 'whois.donuts.co',
- 'ee' => 'whois.tld.ee',
- 'email' => 'whois.donuts.co',
- 'engineer' => 'whois.rightside.co',
- 'engineering' => 'whois.donuts.co',
- 'enterprises' => 'whois.donuts.co',
- 'equipment' => 'whois.donuts.co',
- 'es' => 'whois.nic.es',
- 'estate' => 'whois.donuts.co',
- 'eu' => 'whois.eu',
- 'eus' => 'whois.eus.coreregistry.net',
- 'events' => 'whois.donuts.co',
- 'exchange' => 'whois.donuts.co',
- 'expert' => 'whois.donuts.co',
- 'exposed' => 'whois.donuts.co',
- 'fail' => 'whois.donuts.co',
- 'farm' => 'whois.donuts.co',
- 'feedback' => 'whois.centralnic.com',
- 'fi' => 'whois.fi',
- 'finance' => 'whois.donuts.co',
- 'financial' => 'whois.donuts.co',
- 'fish' => 'whois.donuts.co',
- 'fishing' => 'whois-dub.mm-registry.com',
- 'fitness' => 'whois.donuts.co',
- 'fj' => 'whois.usp.ac.fj',
- 'flights' => 'whois.donuts.co',
- 'florist' => 'whois.donuts.co',
- 'fm' => 'http://www.dot.fm/query_whois.cfm?domain={domain}&tld=fm',
- 'fo' => 'whois.nic.fo',
- 'foo' => 'domain-registry-whois.l.google.com',
- 'foundation' => 'whois.donuts.co',
- 'fr' => 'whois.nic.fr',
- 'frogans' => 'whois-frogans.nic.fr',
- 'fund' => 'whois.donuts.co',
- 'furniture' => 'whois.donuts.co',
- 'futbol' => 'whois.unitedtld.com',
- 'gal' => 'whois.gal.coreregistry.net',
- 'gallery' => 'whois.donuts.co',
- 'gd' => 'whois.nic.gd',
- 'gent' => 'whois.nic.gent',
- 'gg' => 'whois.gg',
- 'gi' => 'whois2.afilias-grs.net',
- 'gift' => 'whois.uniregistry.net',
- 'gives' => 'whois.rightside.co',
- 'gl' => 'whois.nic.gl',
- 'glass' => 'whois.donuts.co',
- 'global' => 'whois.afilias-srs.net',
- 'globo' => 'whois.gtlds.nic.br',
- 'gop' => 'whois-cl01.mm-registry.com',
- 'gov' => 'whois.dotgov.gov',
- 'gr' => '',
- 'graphics' => 'whois.donuts.co',
- 'gratis' => 'whois.donuts.co',
- 'green' => 'whois.afilias.net',
- 'gripe' => 'whois.donuts.co',
- 'gs' => 'whois.nic.gs',
- 'gt' => 'http://www.gt/Inscripcion/whois.php?domain={domain}.gt',
- 'guide' => 'whois.donuts.co',
- 'guitars' => 'whois.uniregistry.net',
- 'guru' => 'whois.donuts.co',
- 'gy' => 'whois.registry.gy',
- 'hamburg' => 'whois.nic.hamburg',
- 'haus' => 'whois.unitedtld.com',
- 'hiphop' => 'whois.uniregistry.net',
- 'hiv' => 'whois.afilias-srs.net',
- 'hk' => 'whois.hkirc.hk',
- 'hn' => 'whois.nic.hn',
- 'holdings' => 'whois.donuts.co',
- 'holiday' => 'whois.donuts.co',
- 'homes' => 'whois.afilias-srs.net',
- 'horse' => 'whois-dub.mm-registry.com',
- 'host' => 'whois.centralnic.com',
- 'house' => 'whois.donuts.co',
- 'hr' => 'whois.dns.hr',
- 'ht' => 'whois.nic.ht',
- 'hu' => 'whois.nic.hu',
- 'id' => 'whois.pandi.or.id',
- 'ie' => 'whois.domainregistry.ie',
- 'il' => 'whois.isoc.org.il',
- 'im' => 'whois.nic.im',
- 'immobilien' => 'whois.unitedtld.com',
- 'in' => 'whois.inregistry.net',
- 'industries' => 'whois.donuts.co',
- 'info' => 'whois.afilias.net',
- 'ink' => 'whois.centralnic.com',
- 'institute' => 'whois.donuts.co',
- 'insure' => 'whois.donuts.co',
- 'int' => 'whois.iana.org',
- 'international' => 'whois.donuts.co',
- 'investments' => 'whois.donuts.co',
- 'io' => 'whois.nic.io',
- 'iq' => 'whois.cmc.iq',
- 'ir' => 'whois.nic.ir',
- 'is' => 'whois.isnic.is',
- 'it' => 'whois.nic.it',
- 'je' => 'whois.je',
- 'jetzt' => 'whois.nic.jetzt',
- //'jobs' => 'jobswhois.verisign-grs.com',
- 'joburg' => 'joburg-whois.registry.net.za',
- 'jp' => 'whois.jprs.jp',
- 'juegos' => 'whois.uniregistry.net',
- 'kaufen' => 'whois.unitedtld.com',
- 'ke' => 'whois.kenic.or.ke',
- 'kg' => 'whois.domain.kg',
- 'ki' => 'whois.nic.ki',
- 'kim' => 'whois.afilias.net',
- 'kitchen' => 'whois.donuts.co',
- 'kiwi' => 'whois.dot-kiwi.com',
- 'koeln' => 'whois-fe1.pdt.koeln.tango.knipp.de',
- 'kr' => 'whois.kr',
- 'krd' => 'whois.aridnrs.net.au',
- 'kred' => 'whois.nic.kred',
- 'kz' => 'whois.nic.kz',
- 'la' => 'whois.nic.la',
- 'lacaixa' => 'whois.nic.lacaixa',
- 'land' => 'whois.donuts.co',
- 'lawyer' => 'whois.rightside.co',
- 'lease' => 'whois.donuts.co',
- 'lgbt' => 'whois.afilias.net',
- //'li' => 'whois.nic.li',
- 'life' => 'whois.donuts.co',
- 'lighting' => 'whois.donuts.co',
- 'limited' => 'whois.donuts.co',
- 'limo' => 'whois.donuts.co',
- 'link' => 'whois.uniregistry.net',
- 'loans' => 'whois.donuts.co',
- 'london' => 'whois-lon.mm-registry.com',
- 'lotto' => 'whois.afilias.net',
- 'lt' => 'whois.domreg.lt',
- 'lu' => 'whois.dns.lu',
- 'luxe' => 'whois-dub.mm-registry.com',
- 'luxury' => 'whois.nic.luxury',
- 'lv' => 'whois.nic.lv',
- 'ly' => 'whois.nic.ly',
- 'ma' => 'whois.iam.net.ma',
- 'maison' => 'whois.donuts.co',
- 'management' => 'whois.donuts.co',
- 'mango' => 'whois.mango.coreregistry.net',
- 'market' => 'whois.rightside.co',
- 'marketing' => 'whois.donuts.co',
- 'md' => 'whois.nic.md',
- 'me' => 'whois.nic.me',
- 'media' => 'whois.donuts.co',
- 'meet' => 'whois.afilias.net',
- 'melbourne' => 'whois.aridnrs.net.au',
- 'menu' => 'whois.nic.menu',
- 'mg' => 'whois.nic.mg',
- 'miami' => 'whois-dub.mm-registry.com',
- 'mini' => 'whois.ksregistry.net',
- 'mk' => 'whois.marnet.mk',
- 'ml' => 'whois.dot.ml',
- 'mn' => 'whois.nic.mn',
- 'mo' => 'whois.monic.mo',
- 'mobi' => 'whois.dotmobiregistry.net',
- 'moda' => 'whois.unitedtld.com',
- 'monash' => 'whois.nic.monash',
- 'mortgage' => 'whois.rightside.co',
- 'moscow' => 'whois.nic.moscow',
- 'motorcycles' => 'whois.afilias-srs.net',
- 'mp' => 'whois.nic.mp',
- 'ms' => 'whois.nic.ms',
- 'mt' => 'http://www.um.edu.mt/cgi-bin/nic/whois?domain={domain}.mt',
- 'mu' => 'whois.nic.mu',
- 'museum' => 'whois.museum',
- 'mx' => 'whois.mx',
- 'my' => 'whois.mynic.my',
- 'na' => 'whois.na-nic.com.na',
- 'nagoya' => 'whois.gmoregistry.net',
- 'name' => 'whois.nic.name',
- 'navy' => 'whois.rightside.co',
- 'nc' => 'whois.nc',
- //'net' => 'whois.verisign-grs.com',
- 'nf' => 'whois.nic.nf',
- 'ng' => 'whois.nic.net.ng',
- 'ngo' => 'whois.publicinterestregistry.net',
- 'ninja' => 'whois.unitedtld.com',
- 'nl' => 'whois.domain-registry.nl',
- 'no' => 'whois.norid.no',
- 'nra' => 'whois.afilias-srs.net',
- 'nrw' => 'whois-fe1.pdt.nrw.tango.knipp.de',
- 'nu' => 'whois.iis.nu',
- 'nyc' => 'whois.nic.nyc',
- 'nz' => 'whois.srs.net.nz',
- 'okinawa' => 'whois.gmoregistry.ne',
- 'om' => 'whois.registry.om',
- 'onl' => 'whois.afilias-srs.net',
- 'org' => 'whois.pir.org',
- 'organic' => 'whois.afilias.net',
- 'ovh' => 'whois-ovh.nic.fr',
- 'paris' => 'whois-paris.nic.fr',
- 'partners' => 'whois.donuts.co',
- 'parts' => 'whois.donuts.co',
- 'pe' => 'kero.yachay.pe',
- 'pf' => 'whois.registry.pf',
- 'photo' => 'whois.uniregistry.net',
- 'photography' => 'whois.donuts.co',
- 'photos' => 'whois.donuts.co',
- 'physio' => 'whois.nic.physio',
- 'pics' => 'whois.uniregistry.net',
- 'pictures' => 'whois.donuts.co',
- 'pink' => 'whois.afilias.net',
- 'pl' => 'whois.dns.pl',
- 'place' => 'whois.donuts.co',
- 'plumbing' => 'whois.donuts.co',
- 'pm' => 'whois.nic.pm',
- 'post' => 'whois.dotpostregistry.net',
- 'pr' => 'whois.nic.pr',
- 'press' => 'whois.centralnic.com',
- 'pro' => 'whois.dotproregistry.net',
- 'productions' => 'whois.donuts.co',
- 'properties' => 'whois.donuts.co',
- 'pt' => 'whois.dns.pt',
- 'pub' => 'whois.unitedtld.com',
- 'pw' => 'whois.nic.pw',
- 'qa' => 'whois.registry.qa',
- 'qpon' => 'whois.nic.qpon',
- 'quebec' => 'whois.quebec.rs.corenic.net',
- 're' => 'whois.nic.re',
- 'recipes' => 'whois.donuts.co',
- 'red' => 'whois.afilias.net',
- 'rehab' => 'whois.rightside.co',
- 'reise' => 'whois.nic.reise',
- 'reisen' => 'whois.donuts.co',
- 'rentals' => 'whois.donuts.co',
- 'repair' => 'whois.donuts.co',
- 'report' => 'whois.donuts.co',
- 'republican' => 'whois.rightside.co',
- 'rest' => 'whois.centralnic.com',
- 'reviews' => 'whois.unitedtld.com',
- 'rich' => 'whois.afilias-srs.net',
- 'rio' => 'whois.gtlds.nic.br',
- 'ro' => 'whois.rotld.ro',
- 'rocks' => 'whois.unitedtld.com',
- 'rodeo' => 'whois-dub.mm-registry.com',
- 'rs' => 'whois.rnids.rs',
- 'ru' => 'whois.tcinet.ru',
- 'ruhr' => 'whois.nic.ruhr',
- 'sa' => 'whois.nic.net.sa',
- 'saarland' => 'whois.ksregistry.net',
- 'sb' => 'whois.nic.net.sb',
- 'sc' => 'whois2.afilias-grs.net',
- 'scb' => 'whois.nic.scb',
- 'schmidt' => 'whois.nic.schmidt',
- 'schule' => 'whois.donuts.co',
- 'scot' => 'whois.scot.coreregistry.net',
- 'se' => 'whois.iis.se',
- 'services' => 'whois.donuts.co',
- 'sexy' => 'whois.uniregistry.net',
- 'sg' => 'whois.sgnic.sg',
- 'sh' => 'whois.nic.sh',
- 'shiksha' => 'whois.afilias.net',
- 'shoes' => 'whois.donuts.co',
- 'si' => 'whois.arnes.si',
- 'singles' => 'whois.donuts.co',
- 'sk' => 'whois.sk-nic.sk',
- 'sm' => 'whois.nic.sm',
- 'sn' => 'whois.nic.sn',
- 'so' => 'whois.nic.so',
- 'social' => 'whois.unitedtld.com',
- 'software' => 'whois.rightside.co',
- 'sohu' => 'whois.gtld.knet.cn',
- 'solar' => 'whois.donuts.co',
- 'solutions' => 'whois.donuts.co',
- 'soy' => 'domain-registry-whois.l.google.com',
- 'space' => 'whois.nic.space',
- 'spiegel' => 'whois.ksregistry.net',
- 'st' => 'whois.nic.st',
- 'su' => 'whois.tcinet.ru',
- 'supplies' => 'whois.donuts.co',
- 'supply' => 'whois.donuts.co',
- 'support' => 'whois.donuts.co',
- 'surf' => 'whois-dub.mm-registry.com',
- 'surgery' => 'whois.donuts.co',
- 'sx' => 'whois.sx',
- 'sy' => 'whois.tld.sy',
- 'systems' => 'whois.donuts.co',
- 'tattoo' => 'whois.uniregistry.net',
- 'tax' => 'whois.donuts.co',
- 'tc' => 'whois.meridiantld.net',
- 'technology' => 'whois.donuts.co',
- 'tel' => 'whois.nic.tel',
- 'tf' => 'whois.nic.tf',
- 'th' => 'whois.thnic.co.th',
- 'tienda' => 'whois.donuts.co',
- 'tips' => 'whois.donuts.co',
- 'tirol' => 'whois.nic.tirol',
- 'tk' => 'whois.dot.tk',
- 'tl' => 'whois.nic.tl',
- 'tm' => 'whois.nic.tm',
- 'tn' => 'whois.ati.tn',
- 'to' => 'whois.tonic.to',
- 'today' => 'whois.donuts.co',
- 'tokyo' => 'whois.nic.tokyo',
- 'tools' => 'whois.donuts.co',
- 'town' => 'whois.donuts.co',
- 'toys' => 'whois.donuts.co',
- 'tr' => 'whois.nic.tr',
- 'trade' => 'whois.nic.trade',
- 'training' => 'whois.donuts.co',
- 'travel' => 'whois.nic.travel',
- //'tv' => 'tvwhois.verisign-grs.com',
- 'tw' => 'whois.twnic.net.tw',
- 'tz' => 'whois.tznic.or.tz',
- 'ua' => 'whois.ua',
- 'ug' => 'whois.co.ug',
- 'uk' => 'whois.nic.uk',
- 'university' => 'whois.donuts.co',
- 'uno' => 'whois.nic.uno',
- 'us' => 'whois.nic.us',
- 'uy' => 'whois.nic.org.uy',
- 'uz' => 'whois.cctld.uz',
- 'vacations' => 'whois.donuts.co',
- 'vc' => 'whois2.afilias-grs.net',
- 've' => 'whois.nic.ve',
- 'vegas' => 'whois.afilias-srs.net',
- 'ventures' => 'whois.donuts.co',
- 'versicherung' => 'whois.nic.versicherung',
- 'vet' => 'whois.rightside.co',
- 'vg' => 'ccwhois.ksregistry.net',
- 'viajes' => 'whois.donuts.co',
- 'villas' => 'whois.donuts.co',
- 'vision' => 'whois.donuts.co',
- 'vlaanderen' => 'whois.nic.vlaanderen',
- 'vodka' => 'whois-dub.mm-registry.com',
- 'vote' => 'whois.afilias.net',
- 'voting' => 'whois.voting.tld-box.at',
- 'voto' => 'whois.afilias.net',
- 'voyage' => 'whois.donuts.co',
- 'vu' => 'vunic.vu',
- 'wang' => 'whois.gtld.knet.cn',
- 'watch' => 'whois.donuts.co',
- 'webcam' => 'whois.nic.webcam',
- 'website' => 'whois.nic.website',
- 'wed' => 'whois.nic.wed',
- 'wf' => 'whois.nic.wf',
- 'wien' => 'whois.nic.wien',
- 'wiki' => 'whois.nic.wiki',
- 'works' => 'whois.donuts.co',
- 'ws' => 'whois.website.ws',
- 'wtc' => 'whois.nic.wtc',
- 'wtf' => 'whois.donuts.co',
- 'xxx' => 'whois.nic.xxx',
- 'xyz' => 'whois.nic.xyz',
- 'yachts' => 'whois.afilias-srs.net',
- 'yt' => 'whois.nic.yt',
- 'zip' => 'domain-registry-whois.l.google.com',
- 'zm' => 'whois.nic.zm',
- 'zone' => 'whois.donuts.co',
+ 'WHOIS_SPECIAL' => [
+ 'ac' => 'whois.nic.ac',
+ 'academy' => 'whois.donuts.co',
+ 'accountants' => 'whois.donuts.co',
+ 'active' => 'whois.afilias-srs.net',
+ 'actor' => 'whois.unitedtld.com',
+ 'ad' => '',
+ 'ae' => 'whois.aeda.net.ae',
+ 'aero' => 'whois.aero',
+ 'af' => 'whois.nic.af',
+ 'ag' => 'whois.nic.ag',
+ 'agency' => 'whois.donuts.co',
+ 'ai' => 'whois.ai',
+ 'airforce' => 'whois.unitedtld.com',
+ 'al' => '',
+ 'am' => 'whois.amnic.net',
+ 'app' => 'whois.nic.google',
+ 'archi' => 'whois.ksregistry.net',
+ 'army' => 'whois.rightside.co',
+ 'arpa' => 'whois.iana.org',
+ 'as' => 'whois.nic.as',
+ 'asia' => 'whois.nic.asia',
+ 'associates' => 'whois.donuts.co',
+ 'at' => 'whois.nic.at',
+ 'attorney' => 'whois.rightside.co',
+ 'au' => 'whois.audns.net.au',
+ 'auction' => 'whois.donuts.co',
+ 'audio' => 'whois.uniregistry.net',
+ 'autos' => 'whois.afilias-srs.net',
+ 'aw' => 'whois.nic.aw',
+ 'ax' => 'whois.ax',
+ 'az' => '',
+ 'ba' => '',
+ 'bar' => 'whois.nic.bar',
+ 'bargains' => 'whois.donuts.co',
+ 'bayern' => 'whois-dub.mm-registry.com',
+ 'bb' => 'http://domains.org.bb/regsearch/getdetails.cfm?DND={domain}.bb',
+ 'be' => 'whois.dns.be',
+ 'beer' => 'whois-dub.mm-registry.com',
+ 'berlin' => 'whois.nic.berlin',
+ 'best' => 'whois.nic.best',
+ 'bg' => 'whois.register.bg',
+ 'bh' => 'whois.nic.bh',
+ 'bi' => 'whois1.nic.bi',
+ 'bid' => 'whois.nic.bid',
+ 'bike' => 'whois.donuts.co',
+ 'bio' => 'whois.ksregistry.net',
+ 'biz' => 'whois.biz',
+ 'bj' => 'whois.nic.bj',
+ 'black' => 'whois.afilias.net',
+ 'blackfriday' => 'whois.uniregistry.net',
+ 'blue' => 'whois.afilias.net',
+ 'bmw' => 'whois.ksregistry.net',
+ 'bn' => 'whois.bn',
+ 'bo' => 'whois.nic.bo',
+ 'boutique' => 'whois.donuts.co',
+ 'br' => 'whois.registro.br',
+ 'brussels' => 'whois.nic.brussels',
+ 'build' => 'whois.nic.build',
+ 'builders' => 'whois.donuts.co',
+ 'buzz' => 'whois.nic.buzz',
+ 'bw' => 'whois.nic.net.bw',
+ 'by' => 'whois.cctld.by',
+ // 'bz' => 'whois2.afilias-grs.net',
+ 'bzh' => 'whois-bzh.nic.fr',
+ 'ca' => 'whois.cira.ca',
+ 'cab' => 'whois.donuts.co',
+ 'camera' => 'whois.donuts.co',
+ 'camp' => 'whois.donuts.co',
+ 'cancerresearch' => 'whois.nic.cancerresearch',
+ 'capetown' => 'capetown-whois.registry.net.za',
+ 'capital' => 'whois.donuts.co',
+ 'cards' => 'whois.donuts.co',
+ 'care' => 'whois.donuts.co',
+ 'career' => 'whois.nic.career',
+ 'careers' => 'whois.donuts.co',
+ 'cash' => 'whois.donuts.co',
+ 'cat' => 'whois.cat',
+ 'catering' => 'whois.donuts.co',
+ 'cc' => 'ccwhois.verisign-grs.com',
+ 'center' => 'whois.donuts.co',
+ 'ceo' => 'whois.nic.ceo',
+ 'cf' => 'whois.dot.cf',
+ 'ch' => 'https://www.nic.ch/whois/',
+ 'cheap' => 'whois.donuts.co',
+ 'christmas' => 'whois.uniregistry.net',
+ 'church' => 'whois.donuts.co',
+ 'ci' => 'whois.nic.ci',
+ 'city' => 'whois.donuts.co',
+ 'cl' => 'whois.nic.cl',
+ 'claims' => 'whois.donuts.co',
+ 'cleaning' => 'whois.donuts.co',
+ 'clinic' => 'whois.donuts.co',
+ 'clothing' => 'whois.donuts.co',
+ 'club' => 'whois.nic.club',
+ 'cn' => 'whois.cnnic.cn',
+ 'co' => 'whois.nic.co',
+ 'codes' => 'whois.donuts.co',
+ 'coffee' => 'whois.donuts.co',
+ 'college' => 'whois.centralnic.com',
+ 'cologne' => 'whois-fe1.pdt.cologne.tango.knipp.de',
+ // 'com' => 'whois.verisign-grs.com',
+ 'community' => 'whois.donuts.co',
+ 'company' => 'whois.donuts.co',
+ 'computer' => 'whois.donuts.co',
+ 'condos' => 'whois.donuts.co',
+ 'construction' => 'whois.donuts.co',
+ 'consulting' => 'whois.unitedtld.com',
+ 'contractors' => 'whois.donuts.co',
+ 'cooking' => 'whois-dub.mm-registry.com',
+ 'cool' => 'whois.donuts.co',
+ 'coop' => 'whois.nic.coop',
+ 'country' => 'whois-dub.mm-registry.com',
+ 'credit' => 'whois.donuts.co',
+ 'creditcard' => 'whois.donuts.co',
+ 'cruises' => 'whois.donuts.co',
+ 'cuisinella' => 'whois.nic.cuisinella',
+ 'cx' => 'whois.nic.cx',
+ 'cy' => '',
+ 'cz' => 'whois.nic.cz',
+ 'dance' => 'whois.unitedtld.com',
+ 'dating' => 'whois.donuts.co',
+ 'de' => 'whois.denic.de',
+ 'deals' => 'whois.donuts.co',
+ 'degree' => 'whois.rightside.co',
+ 'democrat' => 'whois.unitedtld.com',
+ 'dental' => 'whois.donuts.co',
+ 'dentist' => 'whois.rightside.co',
+ 'desi' => 'whois.ksregistry.net',
+ 'dev' => 'whois.nic.google',
+ 'diamonds' => 'whois.donuts.co',
+ 'digital' => 'whois.donuts.co',
+ 'direct' => 'whois.donuts.co',
+ 'directory' => 'whois.donuts.co',
+ 'discount' => 'whois.donuts.co',
+ 'dk' => 'whois.dk-hostmaster.dk',
+ 'dm' => 'whois.nic.dm',
+ 'domains' => 'whois.donuts.co',
+ 'durban' => 'durban-whois.registry.net.za',
+ 'dz' => 'whois.nic.dz',
+ 'ec' => 'whois.nic.ec',
+ 'edu' => 'whois.educause.edu',
+ 'education' => 'whois.donuts.co',
+ 'ee' => 'whois.tld.ee',
+ 'email' => 'whois.donuts.co',
+ 'engineer' => 'whois.rightside.co',
+ 'engineering' => 'whois.donuts.co',
+ 'enterprises' => 'whois.donuts.co',
+ 'equipment' => 'whois.donuts.co',
+ 'es' => 'whois.nic.es',
+ 'estate' => 'whois.donuts.co',
+ 'eu' => 'whois.eu',
+ 'eus' => 'whois.eus.coreregistry.net',
+ 'events' => 'whois.donuts.co',
+ 'exchange' => 'whois.donuts.co',
+ 'expert' => 'whois.donuts.co',
+ 'exposed' => 'whois.donuts.co',
+ 'fail' => 'whois.donuts.co',
+ 'farm' => 'whois.donuts.co',
+ 'feedback' => 'whois.centralnic.com',
+ 'fi' => 'whois.fi',
+ 'finance' => 'whois.donuts.co',
+ 'financial' => 'whois.donuts.co',
+ 'fish' => 'whois.donuts.co',
+ 'fishing' => 'whois-dub.mm-registry.com',
+ 'fitness' => 'whois.donuts.co',
+ 'fj' => 'whois.usp.ac.fj',
+ 'flights' => 'whois.donuts.co',
+ 'florist' => 'whois.donuts.co',
+ 'fm' => 'whois.nic.fm',
+ 'fo' => 'whois.nic.fo',
+ 'foo' => 'domain-registry-whois.l.google.com',
+ 'foundation' => 'whois.donuts.co',
+ 'fr' => 'whois.nic.fr',
+ 'frogans' => 'whois-frogans.nic.fr',
+ 'fund' => 'whois.donuts.co',
+ 'furniture' => 'whois.donuts.co',
+ 'futbol' => 'whois.unitedtld.com',
+ 'gal' => 'whois.gal.coreregistry.net',
+ 'gallery' => 'whois.donuts.co',
+ 'gd' => 'whois.nic.gd',
+ 'gent' => 'whois.nic.gent',
+ 'gg' => 'whois.gg',
+ 'gi' => 'whois2.afilias-grs.net',
+ 'gift' => 'whois.uniregistry.net',
+ 'gives' => 'whois.rightside.co',
+ 'gl' => 'whois.nic.gl',
+ 'glass' => 'whois.donuts.co',
+ 'global' => 'whois.afilias-srs.net',
+ 'globo' => 'whois.gtlds.nic.br',
+ 'gop' => 'whois-cl01.mm-registry.com',
+ 'gov' => 'whois.dotgov.gov',
+ 'gr' => '',
+ 'graphics' => 'whois.donuts.co',
+ 'gratis' => 'whois.donuts.co',
+ 'green' => 'whois.afilias.net',
+ 'gripe' => 'whois.donuts.co',
+ 'gs' => 'whois.nic.gs',
+ 'gt' => 'http://www.gt/Inscripcion/whois.php?domain={domain}.gt',
+ 'guide' => 'whois.donuts.co',
+ 'guitars' => 'whois.uniregistry.net',
+ 'guru' => 'whois.donuts.co',
+ 'gy' => 'whois.registry.gy',
+ 'hamburg' => 'whois.nic.hamburg',
+ 'haus' => 'whois.unitedtld.com',
+ 'hiphop' => 'whois.uniregistry.net',
+ 'hiv' => 'whois.afilias-srs.net',
+ 'hk' => 'whois.hkirc.hk',
+ 'hn' => 'whois.nic.hn',
+ 'holdings' => 'whois.donuts.co',
+ 'holiday' => 'whois.donuts.co',
+ 'homes' => 'whois.afilias-srs.net',
+ 'horse' => 'whois-dub.mm-registry.com',
+ 'host' => 'whois.centralnic.com',
+ 'house' => 'whois.donuts.co',
+ 'hr' => 'whois.dns.hr',
+ 'ht' => 'whois.nic.ht',
+ 'hu' => 'whois.nic.hu',
+ 'id' => 'whois.pandi.or.id',
+ 'ie' => 'whois.domainregistry.ie',
+ 'il' => 'whois.isoc.org.il',
+ 'im' => 'whois.nic.im',
+ 'immobilien' => 'whois.unitedtld.com',
+ 'in' => 'whois.inregistry.net',
+ 'industries' => 'whois.donuts.co',
+ 'info' => 'whois.afilias.net',
+ 'ink' => 'whois.centralnic.com',
+ 'institute' => 'whois.donuts.co',
+ 'insure' => 'whois.donuts.co',
+ 'int' => 'whois.iana.org',
+ 'international' => 'whois.donuts.co',
+ 'investments' => 'whois.donuts.co',
+ 'io' => 'whois.nic.io',
+ 'iq' => 'whois.cmc.iq',
+ 'ir' => 'whois.nic.ir',
+ 'is' => 'whois.isnic.is',
+ 'it' => 'whois.nic.it',
+ 'je' => 'whois.je',
+ 'jetzt' => 'whois.nic.jetzt',
+ // 'jobs' => 'jobswhois.verisign-grs.com',
+ 'joburg' => 'joburg-whois.registry.net.za',
+ 'jp' => 'whois.jprs.jp',
+ 'juegos' => 'whois.uniregistry.net',
+ 'kaufen' => 'whois.unitedtld.com',
+ 'ke' => 'whois.kenic.or.ke',
+ 'kg' => 'whois.domain.kg',
+ 'ki' => 'whois.nic.ki',
+ 'kim' => 'whois.afilias.net',
+ 'kitchen' => 'whois.donuts.co',
+ 'kiwi' => 'whois.nic.kiwi',
+ 'koeln' => 'whois-fe1.pdt.koeln.tango.knipp.de',
+ 'kr' => 'whois.kr',
+ 'krd' => 'whois.aridnrs.net.au',
+ 'kred' => 'whois.nic.kred',
+ 'kz' => 'whois.nic.kz',
+ 'la' => 'whois.nic.la',
+ 'lacaixa' => 'whois.nic.lacaixa',
+ 'land' => 'whois.donuts.co',
+ 'lawyer' => 'whois.rightside.co',
+ 'lease' => 'whois.donuts.co',
+ 'lgbt' => 'whois.afilias.net',
+ // 'li' => 'whois.nic.li',
+ 'life' => 'whois.donuts.co',
+ 'lighting' => 'whois.donuts.co',
+ 'limited' => 'whois.donuts.co',
+ 'limo' => 'whois.donuts.co',
+ 'link' => 'whois.uniregistry.net',
+ 'loans' => 'whois.donuts.co',
+ 'london' => 'whois.nic.london',
+ 'lotto' => 'whois.afilias.net',
+ 'lt' => 'whois.domreg.lt',
+ 'lu' => 'whois.dns.lu',
+ 'luxe' => 'whois-dub.mm-registry.com',
+ 'luxury' => 'whois.nic.luxury',
+ 'lv' => 'whois.nic.lv',
+ 'ly' => 'whois.nic.ly',
+ 'ma' => 'whois.iam.net.ma',
+ 'maison' => 'whois.donuts.co',
+ 'management' => 'whois.donuts.co',
+ 'mango' => 'whois.mango.coreregistry.net',
+ 'market' => 'whois.rightside.co',
+ 'marketing' => 'whois.donuts.co',
+ 'md' => 'whois.nic.md',
+ 'me' => 'whois.nic.me',
+ 'media' => 'whois.donuts.co',
+ 'meet' => 'whois.afilias.net',
+ 'melbourne' => 'whois.aridnrs.net.au',
+ 'menu' => 'whois.nic.menu',
+ 'mg' => 'whois.nic.mg',
+ 'miami' => 'whois-dub.mm-registry.com',
+ 'mini' => 'whois.ksregistry.net',
+ 'mk' => 'whois.marnet.mk',
+ 'ml' => 'whois.dot.ml',
+ 'mn' => 'whois.nic.mn',
+ 'mo' => 'whois.monic.mo',
+ 'mobi' => 'whois.dotmobiregistry.net',
+ 'moda' => 'whois.unitedtld.com',
+ 'monash' => 'whois.nic.monash',
+ 'mortgage' => 'whois.rightside.co',
+ 'moscow' => 'whois.nic.moscow',
+ 'motorcycles' => 'whois.afilias-srs.net',
+ 'mp' => 'whois.nic.mp',
+ 'ms' => 'whois.nic.ms',
+ 'mt' => 'http://www.um.edu.mt/cgi-bin/nic/whois?domain={domain}.mt',
+ 'mu' => 'whois.nic.mu',
+ 'museum' => 'whois.museum',
+ 'mx' => 'whois.mx',
+ 'my' => 'whois.mynic.my',
+ 'na' => 'whois.na-nic.com.na',
+ 'nagoya' => 'whois.gmoregistry.net',
+ 'name' => 'whois.nic.name',
+ 'navy' => 'whois.rightside.co',
+ 'nc' => 'whois.nc',
+ // 'net' => 'whois.verisign-grs.com',
+ 'nf' => 'whois.nic.nf',
+ 'ng' => 'whois.nic.net.ng',
+ 'ngo' => 'whois.publicinterestregistry.net',
+ 'ninja' => 'whois.unitedtld.com',
+ 'nl' => 'whois.domain-registry.nl',
+ 'no' => 'whois.norid.no',
+ 'nra' => 'whois.afilias-srs.net',
+ 'nrw' => 'whois-fe1.pdt.nrw.tango.knipp.de',
+ 'nu' => 'whois.iis.nu',
+ 'nyc' => 'whois.nic.nyc',
+ 'nz' => 'whois.srs.net.nz',
+ 'okinawa' => 'whois.gmoregistry.ne',
+ 'om' => 'whois.registry.om',
+ 'onl' => 'whois.afilias-srs.net',
+ 'org' => 'whois.pir.org',
+ 'organic' => 'whois.afilias.net',
+ 'ovh' => 'whois-ovh.nic.fr',
+ 'paris' => 'whois-paris.nic.fr',
+ 'partners' => 'whois.donuts.co',
+ 'parts' => 'whois.donuts.co',
+ 'pe' => 'kero.yachay.pe',
+ 'pf' => 'whois.registry.pf',
+ 'photo' => 'whois.uniregistry.net',
+ 'photography' => 'whois.donuts.co',
+ 'photos' => 'whois.donuts.co',
+ 'ph' => 'whois.iana.org',
+ 'physio' => 'whois.nic.physio',
+ 'pics' => 'whois.uniregistry.net',
+ 'pictures' => 'whois.donuts.co',
+ 'pink' => 'whois.afilias.net',
+ 'pl' => 'whois.dns.pl',
+ 'place' => 'whois.donuts.co',
+ 'plumbing' => 'whois.donuts.co',
+ 'pm' => 'whois.nic.pm',
+ 'post' => 'whois.dotpostregistry.net',
+ 'pr' => 'whois.nic.pr',
+ 'press' => 'whois.centralnic.com',
+ 'pro' => 'whois.dotproregistry.net',
+ 'productions' => 'whois.donuts.co',
+ 'properties' => 'whois.donuts.co',
+ 'pt' => 'whois.dns.pt',
+ 'pub' => 'whois.unitedtld.com',
+ 'pw' => 'whois.nic.pw',
+ 'qa' => 'whois.registry.qa',
+ 'qpon' => 'whois.nic.qpon',
+ 'quebec' => 'whois.quebec.rs.corenic.net',
+ 're' => 'whois.nic.re',
+ 'recipes' => 'whois.donuts.co',
+ 'red' => 'whois.afilias.net',
+ 'rehab' => 'whois.rightside.co',
+ 'reise' => 'whois.nic.reise',
+ 'reisen' => 'whois.donuts.co',
+ 'rentals' => 'whois.donuts.co',
+ 'repair' => 'whois.donuts.co',
+ 'report' => 'whois.donuts.co',
+ 'republican' => 'whois.rightside.co',
+ 'rest' => 'whois.centralnic.com',
+ 'reviews' => 'whois.unitedtld.com',
+ 'rich' => 'whois.afilias-srs.net',
+ 'rio' => 'whois.gtlds.nic.br',
+ 'ro' => 'whois.rotld.ro',
+ 'rocks' => 'whois.unitedtld.com',
+ 'rodeo' => 'whois-dub.mm-registry.com',
+ 'rs' => 'whois.rnids.rs',
+ 'ru' => 'whois.tcinet.ru',
+ 'ruhr' => 'whois.nic.ruhr',
+ 'sa' => 'whois.nic.net.sa',
+ 'saarland' => 'whois.ksregistry.net',
+ 'sb' => 'whois.nic.net.sb',
+ 'sc' => 'whois2.afilias-grs.net',
+ 'scb' => 'whois.nic.scb',
+ 'schmidt' => 'whois.nic.schmidt',
+ 'schule' => 'whois.donuts.co',
+ 'scot' => 'whois.scot.coreregistry.net',
+ 'se' => 'whois.iis.se',
+ 'services' => 'whois.donuts.co',
+ 'sexy' => 'whois.uniregistry.net',
+ 'sg' => 'whois.sgnic.sg',
+ 'sh' => 'whois.nic.sh',
+ 'shiksha' => 'whois.afilias.net',
+ 'shoes' => 'whois.donuts.co',
+ 'si' => 'whois.arnes.si',
+ 'singles' => 'whois.donuts.co',
+ 'sk' => 'whois.sk-nic.sk',
+ 'sm' => 'whois.nic.sm',
+ 'sn' => 'whois.nic.sn',
+ 'so' => 'whois.nic.so',
+ 'social' => 'whois.unitedtld.com',
+ 'software' => 'whois.rightside.co',
+ 'sohu' => 'whois.gtld.knet.cn',
+ 'solar' => 'whois.donuts.co',
+ 'solutions' => 'whois.donuts.co',
+ 'soy' => 'domain-registry-whois.l.google.com',
+ 'space' => 'whois.nic.space',
+ 'spiegel' => 'whois.ksregistry.net',
+ 'st' => 'whois.nic.st',
+ 'su' => 'whois.tcinet.ru',
+ 'supplies' => 'whois.donuts.co',
+ 'supply' => 'whois.donuts.co',
+ 'support' => 'whois.donuts.co',
+ 'surf' => 'whois-dub.mm-registry.com',
+ 'surgery' => 'whois.donuts.co',
+ 'sx' => 'whois.sx',
+ 'sy' => 'whois.tld.sy',
+ 'systems' => 'whois.donuts.co',
+ 'tattoo' => 'whois.uniregistry.net',
+ 'tax' => 'whois.donuts.co',
+ 'tc' => 'whois.meridiantld.net',
+ 'technology' => 'whois.donuts.co',
+ 'tel' => 'whois.nic.tel',
+ 'tf' => 'whois.nic.tf',
+ 'th' => 'whois.thnic.co.th',
+ 'tienda' => 'whois.donuts.co',
+ 'tips' => 'whois.donuts.co',
+ 'tirol' => 'whois.nic.tirol',
+ 'tk' => 'whois.dot.tk',
+ 'tl' => 'whois.nic.tl',
+ 'tm' => 'whois.nic.tm',
+ 'tn' => 'whois.ati.tn',
+ 'to' => 'whois.tonic.to',
+ 'today' => 'whois.donuts.co',
+ 'tokyo' => 'whois.nic.tokyo',
+ 'tools' => 'whois.donuts.co',
+ 'town' => 'whois.donuts.co',
+ 'toys' => 'whois.donuts.co',
+ 'tr' => 'whois.nic.tr',
+ 'trade' => 'whois.nic.trade',
+ 'training' => 'whois.donuts.co',
+ 'travel' => 'whois.nic.travel',
+ // 'tv' => 'tvwhois.verisign-grs.com',
+ 'tw' => 'whois.twnic.net.tw',
+ 'tz' => 'whois.tznic.or.tz',
+ 'ua' => 'whois.ua',
+ 'ug' => 'whois.co.ug',
+ 'uk' => 'whois.nic.uk',
+ 'university' => 'whois.donuts.co',
+ 'uno' => 'whois.nic.uno',
+ 'us' => 'whois.nic.us',
+ 'uy' => 'whois.nic.org.uy',
+ 'uz' => 'whois.cctld.uz',
+ 'vacations' => 'whois.donuts.co',
+ 'vc' => 'whois2.afilias-grs.net',
+ 've' => 'whois.nic.ve',
+ 'vegas' => 'whois.afilias-srs.net',
+ 'ventures' => 'whois.donuts.co',
+ 'versicherung' => 'whois.nic.versicherung',
+ 'vet' => 'whois.rightside.co',
+ 'vg' => 'ccwhois.ksregistry.net',
+ 'viajes' => 'whois.donuts.co',
+ 'villas' => 'whois.donuts.co',
+ 'vision' => 'whois.donuts.co',
+ 'vlaanderen' => 'whois.nic.vlaanderen',
+ 'vodka' => 'whois-dub.mm-registry.com',
+ 'vote' => 'whois.afilias.net',
+ 'voting' => 'whois.voting.tld-box.at',
+ 'voto' => 'whois.afilias.net',
+ 'voyage' => 'whois.donuts.co',
+ 'vu' => 'vunic.vu',
+ 'wang' => 'whois.gtld.knet.cn',
+ 'watch' => 'whois.donuts.co',
+ 'webcam' => 'whois.nic.webcam',
+ 'website' => 'whois.nic.website',
+ 'wed' => 'whois.nic.wed',
+ 'wf' => 'whois.nic.wf',
+ 'wien' => 'whois.nic.wien',
+ 'wiki' => 'whois.nic.wiki',
+ 'works' => 'whois.donuts.co',
+ 'ws' => 'whois.website.ws',
+ 'wtc' => 'whois.nic.wtc',
+ 'wtf' => 'whois.donuts.co',
+ 'xxx' => 'whois.nic.xxx',
+ 'xyz' => 'whois.nic.xyz',
+ 'yachts' => 'whois.afilias-srs.net',
+ 'yt' => 'whois.nic.yt',
+ 'zip' => 'domain-registry-whois.l.google.com',
+ 'zm' => 'whois.nic.zm',
+ 'zone' => 'whois.donuts.co',
- // Second level
- 'net.au' => 'whois.aunic.net',
- 'ae.com' => 'whois.centralnic.net',
- 'br.com' => 'whois.centralnic.net',
- 'cn.com' => 'whois.centralnic.net',
- 'de.com' => 'whois.centralnic.net',
- 'eu.com' => 'whois.centralnic.net',
- 'gb.com' => 'whois.centralnic.net',
- 'hu.com' => 'whois.centralnic.net',
- 'jpn.com' => 'whois.centralnic.net',
- 'kr.com' => 'whois.centralnic.net',
- 'no.com' => 'whois.centralnic.net',
- 'qc.com' => 'whois.centralnic.net',
- 'ru.com' => 'whois.centralnic.net',
- 'sa.com' => 'whois.centralnic.net',
- 'se.com' => 'whois.centralnic.net',
- 'uk.com' => 'whois.centralnic.net',
- 'us.com' => 'whois.centralnic.net',
- 'uy.com' => 'whois.centralnic.net',
- 'za.com' => 'whois.centralnic.net',
- 'com.my' => 'whois.mynic.net.my',
- 'gb.net' => 'whois.centralnic.net',
- 'se.net' => 'whois.centralnic.net',
- 'uk.net' => 'whois.centralnic.net',
- 'za.net' => 'http://www.za.net/cgi-bin/whois.cgi?domain={domain}.za.net',
- 'za.org' => 'http://www.za.net/cgi-bin/whois.cgi?domain={domain}.za.org',
- 'com.ru' => 'whois.nic.ru',
- 'msk.ru' => 'whois.nic.ru',
- 'net.ru' => 'whois.nic.ru',
- 'org.ru' => 'whois.nic.ru',
- 'pp.ru' => 'whois.nic.ru',
- 'sochi.su' => 'whois.nic.ru',
- 'co.za' => 'http://co.za/cgi-bin/whois.sh?Domain={domain}.co.za',
- 'org.za' => 'http://www.org.za/cgi-bin/rwhois?domain={domain}.org.za&format=full',
+ // Second level
+ 'net.au' => 'whois.aunic.net',
+ 'ae.com' => 'whois.centralnic.net',
+ 'br.com' => 'whois.centralnic.net',
+ 'cn.com' => 'whois.centralnic.net',
+ 'de.com' => 'whois.centralnic.net',
+ 'eu.com' => 'whois.centralnic.net',
+ 'gb.com' => 'whois.centralnic.net',
+ 'hu.com' => 'whois.centralnic.net',
+ 'jpn.com' => 'whois.centralnic.net',
+ 'kr.com' => 'whois.centralnic.net',
+ 'no.com' => 'whois.centralnic.net',
+ 'qc.com' => 'whois.centralnic.net',
+ 'ru.com' => 'whois.centralnic.net',
+ 'sa.com' => 'whois.centralnic.net',
+ 'se.com' => 'whois.centralnic.net',
+ 'uk.com' => 'whois.centralnic.net',
+ 'us.com' => 'whois.centralnic.net',
+ 'uy.com' => 'whois.centralnic.net',
+ 'za.com' => 'whois.centralnic.net',
+ 'com.my' => 'whois.mynic.net.my',
+ 'gb.net' => 'whois.centralnic.net',
+ 'se.net' => 'whois.centralnic.net',
+ 'uk.net' => 'whois.centralnic.net',
+ 'za.net' => 'http://www.za.net/cgi-bin/whois.cgi?domain={domain}.za.net',
+ 'za.org' => 'http://www.za.net/cgi-bin/whois.cgi?domain={domain}.za.org',
+ 'com.ru' => 'whois.nic.ru',
+ 'msk.ru' => 'whois.nic.ru',
+ 'net.ru' => 'whois.nic.ru',
+ 'org.ru' => 'whois.nic.ru',
+ 'pp.ru' => 'whois.nic.ru',
+ 'sochi.su' => 'whois.nic.ru',
+ 'co.za' => 'http://coza.net.za/cgi-bin/whois.sh?Domain={domain}.co.za',
+ 'org.za' => 'http://www.org.za/cgi-bin/rwhois?domain={domain}.org.za&format=full',
- // National tlds
- 'xn--3bst00m' => 'whois.gtld.knet.cn',
- 'xn--3ds443g' => 'whois.afilias-srs.net',
- 'xn--3e0b707e' => 'whois.kr',
- 'xn--4gbrim' => 'whois.afilias-srs.net',
- 'xn--55qw42g' => 'whois.conac.cn',
- 'xn--55qx5d' => 'whois.ngtld.cn',
- 'xn--6frz82g' => 'whois.afilias.net',
- 'xn--6qq986b3xl' => 'whois.gtld.knet.cn',
- 'xn--80adxhks' => 'whois.nic.xn--80adxhks',
- 'xn--80ao21a' => 'whois.nic.kz',
- 'xn--80asehdb' => 'whois.online.rs.corenic.net',
- 'xn--80aswg' => 'whois.site.rs.corenic.net',
- 'xn--c1avg' => 'whois.publicinterestregistry.net',
- 'xn--cg4bki' => 'whois.kr',
- 'xn--clchc0ea0b2g2a9gcd' => 'whois.sgnic.sg',
- 'xn--czru2d' => 'whois.gtld.knet.cn',
- 'xn--d1acj3b' => 'whois.nic.xn--d1acj3b',
- 'xn--fiq228c5hs' => 'whois.afilias-srs.net',
- 'xn--fiq64b' => 'whois.gtld.knet.cn',
- 'xn--fiqs8s' => 'cwhois.cnnic.cn',
- 'xn--fiqz9s' => 'cwhois.cnnic.cn',
- 'xn--i1b6b1a6a2e' => 'whois.publicinterestregistry.net',
- 'xn--io0a7i' => 'whois.ngtld.cn',
- 'xn--j1amh' => 'whois.dotukr.com',
- 'xn--j6w193g' => 'whois.hkirc.hk',
- 'xn--kprw13d' => 'whois.twnic.net.tw',
- 'xn--kpry57d' => 'whois.twnic.net.tw',
- 'xn--lgbbat1ad8j' => 'whois.nic.dz',
- 'xn--mgb9awbf' => 'whois.registry.om',
- 'xn--mgba3a4f16a' => 'whois.nic.ir',
- 'xn--mgbaam7a8h' => 'whois.aeda.net.ae',
- 'xn--mgbab2bd' => 'whois.bazaar.coreregistry.net',
- 'xn--mgberp4a5d4ar' => 'whois.nic.net.sa',
- 'xn--mgbx4cd0ab' => 'whois.mynic.my',
- 'xn--ngbc5azd' => 'whois.nic.xn--ngbc5azd',
- 'xn--nqv7f' => 'whois.publicinterestregistry.net',
- 'xn--nqv7fs00ema' => 'whois.publicinterestregistry.net',
- 'xn--o3cw4h' => 'whois.thnic.co.th',
- 'xn--ogbpf8fl' => 'whois.tld.sy',
- 'xn--p1ai' => 'whois.tcinet.ru',
- 'xn--q9jyb4c' => 'domain-registry-whois.l.google.com',
- 'xn--rhqv96g' => 'whois.nic.xn--rhqv96g',
- 'xn--unup4y' => 'whois.donuts.co',
- 'xn--wgbl6a' => 'whois.registry.qa',
- 'xn--yfro4i67o' => 'whois.sgnic.sg',
- 'xn--ygbi2ammx' => 'whois.pnina.ps',
- 'xn--zfr164b' => 'whois.conac.cn',
-),
+ // National tlds
+ 'xn--3bst00m' => 'whois.gtld.knet.cn',
+ 'xn--3ds443g' => 'whois.afilias-srs.net',
+ 'xn--3e0b707e' => 'whois.kr',
+ 'xn--4gbrim' => 'whois.afilias-srs.net',
+ 'xn--55qw42g' => 'whois.conac.cn',
+ 'xn--55qx5d' => 'whois.ngtld.cn',
+ 'xn--6frz82g' => 'whois.afilias.net',
+ 'xn--6qq986b3xl' => 'whois.gtld.knet.cn',
+ 'xn--80adxhks' => 'whois.nic.xn--80adxhks',
+ 'xn--80ao21a' => 'whois.nic.kz',
+ 'xn--80asehdb' => 'whois.online.rs.corenic.net',
+ 'xn--80aswg' => 'whois.site.rs.corenic.net',
+ 'xn--c1avg' => 'whois.publicinterestregistry.net',
+ 'xn--cg4bki' => 'whois.kr',
+ 'xn--clchc0ea0b2g2a9gcd' => 'whois.sgnic.sg',
+ 'xn--czru2d' => 'whois.gtld.knet.cn',
+ 'xn--d1acj3b' => 'whois.nic.xn--d1acj3b',
+ 'xn--fiq228c5hs' => 'whois.afilias-srs.net',
+ 'xn--fiq64b' => 'whois.gtld.knet.cn',
+ 'xn--fiqs8s' => 'cwhois.cnnic.cn',
+ 'xn--fiqz9s' => 'cwhois.cnnic.cn',
+ 'xn--i1b6b1a6a2e' => 'whois.publicinterestregistry.net',
+ 'xn--io0a7i' => 'whois.ngtld.cn',
+ 'xn--j1amh' => 'whois.dotukr.com',
+ 'xn--j6w193g' => 'whois.hkirc.hk',
+ 'xn--kprw13d' => 'whois.twnic.net.tw',
+ 'xn--kpry57d' => 'whois.twnic.net.tw',
+ 'xn--lgbbat1ad8j' => 'whois.nic.dz',
+ 'xn--mgb9awbf' => 'whois.registry.om',
+ 'xn--mgba3a4f16a' => 'whois.nic.ir',
+ 'xn--mgbaam7a8h' => 'whois.aeda.net.ae',
+ 'xn--mgbab2bd' => 'whois.bazaar.coreregistry.net',
+ 'xn--mgberp4a5d4ar' => 'whois.nic.net.sa',
+ 'xn--mgbx4cd0ab' => 'whois.mynic.my',
+ 'xn--ngbc5azd' => 'whois.nic.xn--ngbc5azd',
+ 'xn--nqv7f' => 'whois.publicinterestregistry.net',
+ 'xn--nqv7fs00ema' => 'whois.publicinterestregistry.net',
+ 'xn--o3cw4h' => 'whois.thnic.co.th',
+ 'xn--ogbpf8fl' => 'whois.tld.sy',
+ 'xn--p1ai' => 'whois.tcinet.ru',
+ 'xn--q9jyb4c' => 'domain-registry-whois.l.google.com',
+ 'xn--rhqv96g' => 'whois.nic.xn--rhqv96g',
+ 'xn--unup4y' => 'whois.donuts.co',
+ 'xn--wgbl6a' => 'whois.registry.qa',
+ 'xn--yfro4i67o' => 'whois.sgnic.sg',
+ 'xn--ygbi2ammx' => 'whois.pnina.ps',
+ 'xn--zfr164b' => 'whois.conac.cn',
+ ],
-/* handled gTLD whois servers */
+ // handled gTLD whois servers
-'WHOIS_GTLD_HANDLER' => array(
- 'whois.bulkregister.com' => 'enom',
- 'whois.dotregistrar.com' => 'dotster',
- 'whois.namesdirect.com' => 'dotster',
- 'whois.psi-usa.info' => 'psiusa',
- 'whois.www.tv' => 'tvcorp',
- 'whois.tucows.com' => 'opensrs',
- 'whois.35.com' => 'onlinenic',
- 'whois.nominalia.com' => 'genericb',
- 'whois.encirca.com' => 'genericb',
- 'whois.corenic.net' => 'genericb'
-),
-);
\ No newline at end of file
+ 'WHOIS_GTLD_HANDLER' => [
+ 'whois.bulkregister.com' => EnomHandler::class,
+ 'whois.dotregistrar.com' => DotsterHandler::class,
+ 'whois.namesdirect.com' => DotsterHandler::class,
+ 'whois.psi-usa.info' => PsiUsaHandler::class,
+ 'whois.www.tv' => TvcorpHandler::class,
+ 'whois.tucows.com' => OpensrsHandler::class,
+ 'whois.35.com' => OnlinenicHandler::class,
+ 'whois.nominalia.com' => GenericbHandler::class,
+ 'whois.encirca.com' => GenericbHandler::class,
+ 'whois.corenic.net' => GenericbHandler::class,
+ ],
+];
diff --git a/src/whois.si.php b/src/whois.si.php
deleted file mode 100644
index 767fd034..00000000
--- a/src/whois.si.php
+++ /dev/null
@@ -1,52 +0,0 @@
- 'handle',
- 'nameserver' => 'nserver'
- );
-
- $contacts = array(
- 'registrant' => 'owner',
- 'tech-c' => 'tech'
- );
-
- $r = array();
- $r['regrinfo'] = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.arnes.si',
- 'registrar' => 'ARNES'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.su.php b/src/whois.su.php
deleted file mode 100644
index 06cdde21..00000000
--- a/src/whois.su.php
+++ /dev/null
@@ -1,61 +0,0 @@
- 'domain.name',
- 'registrar:' => 'domain.sponsor',
- 'state:' => 'domain.status',
- 'person:' => 'owner.name',
- 'phone:' => 'owner.phone',
- 'e-mail:' => 'owner.email',
- 'created:' => 'domain.created',
- 'paid-till:' => 'domain.expires',
- /*
- 'nserver:' => 'domain.nserver.',
- 'source:' => 'domain.source',
- 'type:' => 'owner.type',
- 'org:' => 'owner.organization',
- 'fax-no:' => 'owner.fax',
- */
- );
-
- $r = array();
- $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'dmy');
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.ripn.net',
- 'registrar' => 'RUCENTER-REG-RIPN'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.tel.php b/src/whois.tel.php
deleted file mode 100644
index 9e2ae386..00000000
--- a/src/whois.tel.php
+++ /dev/null
@@ -1,42 +0,0 @@
- 'http://www.telnic.org',
- 'registrar' => 'Telnic'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.travel.php b/src/whois.travel.php
deleted file mode 100644
index c5dc28bb..00000000
--- a/src/whois.travel.php
+++ /dev/null
@@ -1,40 +0,0 @@
- 'Registrant:',
- 'owner.address' => "Registrant's address:",
- 'owner.type' => 'Registrant type:',
- 'domain.created' => 'Registered on:',
- 'domain.changed' => 'Last updated:',
- 'domain.expires' => 'Renewal date:',
- 'domain.nserver' => 'Name servers:',
- 'domain.sponsor' => 'Registrar:',
- 'domain.status' => 'Registration status:',
- 'domain.dnssec' => 'DNSSEC:',
- '' => 'WHOIS lookup made at',
- 'disclaimer' => '--',
- );
-
- $r = array();
- $r['regrinfo'] = get_blocks($data_str['rawdata'], $items);
-
- if (isset($r['regrinfo']['owner'])) {
- $r['regrinfo']['owner']['organization'] = $r['regrinfo']['owner']['organization'][0];
- $r['regrinfo']['domain']['sponsor'] = $r['regrinfo']['domain']['sponsor'][0];
- $r['regrinfo']['registered'] = 'yes';
-
- $r = format_dates($r, 'dmy');
- } else {
- if (strpos($data_str['rawdata'][1], 'Error for ')) {
- $r['regrinfo']['registered'] = 'yes';
- $r['regrinfo']['domain']['status'] = 'invalid';
- } else
- $r['regrinfo']['registered'] = 'no';
- }
-
- $r['regyinfo'] = array(
- 'referrer' => 'http://www.nominet.org.uk',
- 'registrar' => 'Nominet UK'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.us.php b/src/whois.us.php
deleted file mode 100644
index 02314911..00000000
--- a/src/whois.us.php
+++ /dev/null
@@ -1,42 +0,0 @@
- 'http://www.neustar.us',
- 'registrar' => 'NEUSTAR INC.'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.ve.php b/src/whois.ve.php
deleted file mode 100644
index e1949fcf..00000000
--- a/src/whois.ve.php
+++ /dev/null
@@ -1,70 +0,0 @@
- 'Titular:',
- 'domain.name' => 'Nombre de Dominio:',
- 'admin' => 'Contacto Administrativo',
- 'tech' => 'Contacto Tecnico',
- 'billing' => 'Contacto de Cobranza:',
- 'domain.created' => 'Fecha de Creacion:',
- 'domain.changed' => 'Ultima Actualizacion:',
- 'domain.expires' => 'Fecha de Vencimiento:',
- 'domain.status' => 'Estatus del dominio:',
- 'domain.nserver' => 'Servidor(es) de Nombres de Dominio'
- );
-
- $r = array();
- $r['regrinfo'] = get_blocks($data_str['rawdata'], $items);
-
- if (!isset($r['regrinfo']['domain']['created']) || is_array($r['regrinfo']['domain']['created'])) {
- $r['regrinfo'] = array('registered' => 'no');
- return $r;
- }
-
- $dns = array();
-
- foreach ($r['regrinfo']['domain']['nserver'] as $nserv) {
- if ($nserv[0] == '-')
- $dns[] = $nserv;
- }
-
- $r['regrinfo']['domain']['nserver'] = $dns;
- $r['regrinfo'] = get_contacts($r['regrinfo']);
- $r['regyinfo'] = array(
- 'referrer' => 'http://registro.nic.ve',
- 'registrar' => 'NIC-Venezuela - CNTI'
- );
- return $r;
- }
-
-}
diff --git a/src/whois.ws.php b/src/whois.ws.php
deleted file mode 100644
index 0c47e261..00000000
--- a/src/whois.ws.php
+++ /dev/null
@@ -1,70 +0,0 @@
- 'domain.name',
- 'Registrant Name:' => 'owner.organization',
- 'Registrant Email:' => 'owner.email',
- 'Domain Created:' => 'domain.created',
- 'Domain Last Updated:' => 'domain.changed',
- 'Registrar Name:' => 'domain.sponsor',
- 'Current Nameservers:' => 'domain.nserver.',
- 'Administrative Contact Email:' => 'admin.email',
- 'Administrative Contact Telephone:' => 'admin.phone',
- 'Registrar Whois:' => 'rwhois'
- );
-
- $r = array();
- $r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items, 'ymd');
-
- $r['regyinfo']['referrer'] = 'http://www.samoanic.ws';
- $r['regyinfo']['registrar'] = 'Samoa Nic';
-
- if (!empty($r['regrinfo']['domain']['name'])) {
- $r['regrinfo']['registered'] = 'yes';
-
- if (isset($r['regrinfo']['rwhois'])) {
- if ($this->deepWhois) {
- $r['regyinfo']['whois'] = $r['regrinfo']['rwhois'];
- $r = $this->deepWhois($query, $r);
- }
-
- unset($r['regrinfo']['rwhois']);
- }
- } else
- $r['regrinfo']['registered'] = 'no';
-
- return $r;
- }
-}
diff --git a/src/whois.xxx.php b/src/whois.xxx.php
deleted file mode 100644
index 39d87bc3..00000000
--- a/src/whois.xxx.php
+++ /dev/null
@@ -1,44 +0,0 @@
- 'Domain Name : ',
- 'domain.created' => 'Record Created :',
- 'domain.changed' => 'Record Last Updated :',
- 'owner.name' => 'Registered for :',
- 'admin' => 'Administrative Contact :',
- 'tech' => 'Technical Contact :',
- 'domain.nserver' => 'Domain Name Servers listed in order:',
- 'registered' => 'No such domain: ',
- '' => 'The ZA NiC whois'
- );
-
- // Arrange contacts ...
-
- $rawdata = array();
-
- while (list($key, $line) = each($data_str['rawdata'])) {
- if (strpos($line, ' Contact ') !== false) {
- $pos = strpos($line, ':');
-
- if ($pos !== false) {
- $rawdata[] = substr($line, 0, $pos + 1);
- $rawdata[] = trim(substr($line, $pos + 1));
- continue;
- }
- }
- $rawdata[] = $line;
- }
-
- $r = array();
- $r['regrinfo'] = get_blocks($rawdata, $items);
-
- if (isset($r['regrinfo']['registered'])) {
- $r['regrinfo']['registered'] = 'no';
- } else {
- if (isset($r['regrinfo']['admin']))
- $r['regrinfo']['admin'] = get_contact($r['regrinfo']['admin']);
-
- if (isset($r['regrinfo']['tech']))
- $r['regrinfo']['tech'] = get_contact($r['regrinfo']['tech']);
- }
-
- $r['regyinfo']['referrer'] = 'http://www.za.net/'; // or http://www.za.org
- $r['regyinfo']['registrar'] = 'ZA NiC';
- format_dates($r, 'xmdxxy');
- return $r;
- }
-
-}
diff --git a/test.json b/test.json
new file mode 100644
index 00000000..e38e3e1d
--- /dev/null
+++ b/test.json
@@ -0,0 +1,87 @@
+{
+ "ae": ["google.ae","nic.ae","aeda.ae"],
+ "ag": ["nic.ag"],
+ "am": ["isoc.am"],
+ "at": ["nic.at"],
+ "au": ["telstra.com.au"],
+ "be": ["nic.be"],
+ "bh": ["nic.bh"],
+ "br": ["registro.br"],
+ "ca": ["cira.ca"],
+ "ch": ["creart.ch","blaueskreuz.ch"],
+ "cl": ["google.cl"],
+ "cn": ["china.cn","google.cn"],
+ "co": ["nic.co","google.co"],
+ "cz": ["nic.cz","google.cz"],
+ "de": ["4ever.de","denic.de","google.de","nic.de","humblebundle.de","a2ba91bff88c6983f6af010c41236206df64001d.de"],
+ "fi": ["ficora.fi","google.fi"],
+ "fj": ["fiji.gov.fj"],
+ "fm": ["dot.fm","google.fm"],
+ "fr": ["nic.fr","lemonade.fr","google.fr"],
+ "hu": ["nic.hu","google.hu"],
+ "ie": ["domainregistry.ie","google.ie"],
+ "il": ["tapuz.co.il"],
+ "in": ["registry.in"],
+ "is": ["isnic.is"],
+ "it": ["nic.it"],
+ "jp": ["google.co.jp","jprs.jp"],
+ "li": ["nic.li"],
+ "lt": ["domreg.lt"],
+ "lu": ["dns.lu"],
+ "ly": ["nic.ly"],
+ "mx": ["nic.mx"],
+ "nl": ["domain-registry.nl"],
+ "nu": ["nunames.nu"],
+ "nz": ["dnc.org.nz"],
+ "ph": ["dot.ph","cityescape.ph"],
+ "pl": ["nic.pl"],
+ "pt": ["dns.pt"],
+ "ru": ["nic.ru"],
+ "sc": ["nic.sc"],
+ "si": ["arnes.si"],
+ "su": ["news.su"],
+ "uk": ["olsns.co.uk","google.co.uk","vibrantdigitalfuture.uk"],
+ "us": ["neustar.us","google.us"],
+ "ve": ["nic.ve"],
+ "ws": ["samoanic.ws","surf.ws"],
+ "co.za": ["sex.co.za","google.co.za"],
+ "org.za": ["sex.org.za"],
+ "рф": ["рег.рф","xn--p1ai","xn--c1ad6a.xn--p1ai"],
+ "dev": ["ostap.dev"],
+ "com": ["alldomains.com","ascio.com","corenic.com","directnic.com","domainbank.com","domaincontender.com","buydomains.com","domainpeople.com","dotster.com","namesdirect.com","dotregistrar.com","dreamhost.com","encirca.com","enom.com","fabulous.com","fastdomain.com","gandi.net","godaddy.com","example.com","interdominio.com","joker.com","markmonitor.com","inww.com","moniker.com","name.com","domaintools.com","namejuice.com","nameking.com","names4ever.com","networksolutions.com","nicco.com","nicline.com","nominalia.com","onlinenic.com","tucows.com","ovh.com","directi.com","register.com","schlund.com","olsns.com","namevault.com","antiquea.com","wildwestdomains.com","cscglobal.com"],
+ "net": ["urllog.net rrpproxy.net"],
+ "today": ["modx.today"],
+ "tvcorp": ["www.tv"],
+
+ "aero": ["nic.aero"],
+ "asia": ["nic.asia"],
+ "biz": ["neulevel.biz"],
+ "cat": ["dominis.cat","google.cat"],
+ "coop": ["smile.coop","nic.coop","domains.coop"],
+ "edu": ["berkeley.edu"],
+ "eu": ["eurid.eu","google.eu"],
+ "info": ["afilias.info"],
+ "int": ["who.int"],
+ "kiwi": ["hello.kiwi","google.kiwi"],
+ "me": ["domain.me"],
+ "mobi": ["mtld.mobi"],
+ "museum": ["nic.museum"],
+ "name": ["peter.morgan.name"],
+ "org": ["example.org"],
+ "pro": ["registrypro.pro"],
+ "tel": ["nic.tel"],
+ "travel": ["whois.travel"],
+ "xxx": ["nic.xxx"],
+ "za.net": ["sex.za.net"],
+
+ "afrinic": ["66.18.70.6"],
+ "apnic": ["218.165.121.114"],
+ "arin": ["207.217.120.54","AS220"],
+ "arin+rwhois": ["70.84.47.210"],
+ "arin+whois": ["63.95.254.3"],
+ "krnic": ["210.178.148.129","AS9700"],
+ "lacnic": ["200.44.33.31","45.225.3.34"],
+ "lacnic (br)": ["200.165.206.74"],
+ "ripe": ["62.97.102.115","151.99.187.181","2001:630:d0:f111:203:93ff:fed1:f454"]
+
+}
diff --git a/test.txt b/test.txt
deleted file mode 100644
index cdcae0d7..00000000
--- a/test.txt
+++ /dev/null
@@ -1,139 +0,0 @@
-// Country domains
-
-ae nic.ae
-ag nic.ag
-am isoc.am
-at nic.at
-au telstra.com.au
-be nic.be
-bh nic.bh
-br registro.br
-ca cira.ca
-ch creart.ch blaueskreuz.ch
-cn china.cn
-co nic.co
-cz nic.cz
-de 4ever.de ks2-hanau.de
-fi ficora.fi
-fj usp.ac.fj
-fm dot.fm
-fr nic.fr lemonade.fr
-hu nic.hu
-ie domainregistry.ie
-il tapuz.co.il
-in registry.in
-is isnic.is
-it nic.it
-jp google.co.jp jprs.jp
-li nic.li
-lt domreg.lt
-lu dns.lu
-ly nic.ly
-mx nic.mx
-nl domain-registry.nl
-nu nunames.nu
-nz dnc.org.nz
-pl nic.pl
-pt dns.pt
-ru nic.ru
-sc nic.sc
-se nic-se.se
-si arnes.si
-su news.su
-uk olsns.co.uk
-us neustar.us
-ve nic.ve
-ws samoanic.ws surf.ws
-co.za sex.co.za
-org.za sex.org.za
-
-// Punicode
-
-xn--p1ai xn--c1ad6a.xn--p1ai
-
-// .com/.net/.tv/.jobs
-
-alldomains alldomains.com
-ascio ascio.com
-corenic corenic.com
-directnic directnic.com
-domainbank domainbank.com
-domaincontender domaincontender.com
-afternic buydomains.com
-domainpeople domainpeople.com
-dotster dotster.com namesdirect.com dotregistrar.com
-dreamhost dreamhost.com
-encirca encirca.com
-enom enom.com
-fabulous fabulous.com
-fastdomain fastdomain.com
-gandi gandi.net
-godaddy godaddy.com
-iana example.com
-interdomain interdominio.com
-joker joker.com
-markmonitor markmonitor.com
-melbourneit inww.com
-moniker moniker.com
-name name.com
-nameintel domaintools.com
-namejuice namejuice.com
-nameking nameking.com
-names4ever names4ever.com
-networksolutions networksolutions.com
-nicco nicco.com
-nicline nicline.com
-nominalia nominalia.com
-onlinenic onlinenic.com
-opensrs tucows.com
-ovh ovh.com
-publicdomainregistry directi.com
-psiusa urllog.net
-register register.com
-rrpproxy rrpproxy.net
-schlund schlund.com
-srsplus olsns.com
-namevault namevault.com
-tmagnic antiquea.com
-tvcorp www.tv
-wwdomains wildwestdomains.com
-corporatedomains cscglobal.com
-
-// Other
-
-aero nic.aero
-asia nic.asia
-biz neulevel.biz
-cat dominis.cat
-coop smile.coop nic.coop
-edu berkeley.edu
-eu eurid.eu
-info afilias.info
-int who.int
-me domain.me
-mobi mtld.mobi
-museum nic.museum
-name peter.morgan.name
-org example.org
-pro registrypro.pro
-tel nic.tel
-travel whois.travel
-xxx nic.xxx
-za.net sex.za.net
-
-// IP whois
-
-afrinic 66.18.70.6
-apnic 218.165.121.114
-arin 207.217.120.54
-arin+rwhois 70.84.47.210
-arin+whois 63.95.254.3
-krnic 210.178.148.129
-lacnic 200.44.33.31
-lacnic(br) 200.165.206.74
-ripe 62.97.102.115 151.99.187.181 2001:630:d0:f111:203:93ff:fed1:f454
-
-// ASN
-
-arin AS220
-krnic AS9700
diff --git a/tests/BaseTestCase.php b/tests/BaseTestCase.php
new file mode 100644
index 00000000..8be5da6f
--- /dev/null
+++ b/tests/BaseTestCase.php
@@ -0,0 +1,20 @@
+=')) {
+ self::markTestSkipped('Hangs under php-8.0');
+ }
+ }
+}
diff --git a/tests/Handlers/AbstractHandler.php b/tests/Handlers/AbstractHandler.php
new file mode 100644
index 00000000..4cf6b1e6
--- /dev/null
+++ b/tests/Handlers/AbstractHandler.php
@@ -0,0 +1,63 @@
+lookup($ip);
+
+ static::assertTrue(is_array($result));
+ }
+
+ public static function ipsList(): array
+ {
+ return [
+ ['216.58.209.195'],
+ ['45.225.3.34'],
+ ];
+ }
+}
diff --git a/tests/Handlers/IP/IpToolsTest.php b/tests/Handlers/IP/IpToolsTest.php
new file mode 100644
index 00000000..2dc04192
--- /dev/null
+++ b/tests/Handlers/IP/IpToolsTest.php
@@ -0,0 +1,55 @@
+assertTrue($ipTools->validIp($ip));
+ }
+
+ public static function validIpsProvider()
+ {
+ return [
+ ['123.123.123.123'],
+ ['1a80:1f45::ebb:12'],
+ ];
+ }
+
+ /**
+ * @dataProvider invalidIpsProvider
+ * @param mixed $ip
+ */
+ public function testInvalidIp($ip)
+ {
+ $ipTools = new IpTools();
+ $this->assertFalse($ipTools->validIp($ip));
+ }
+
+ public static function invalidIpsProvider(): array
+ {
+ return [
+ [''],
+ ['169.254.255.200'],
+ ['172.17.255.100'],
+ ['123.a15.255.100'],
+ ['fd80::1'],
+ ['fc80:19c::1'],
+ ['1a80:1f45::ebm:12'],
+ ['[1a80:1f45::ebb:12]'],
+ ];
+ }
+}
diff --git a/tests/Handlers/TLD/AeHandlerTest.php b/tests/Handlers/TLD/AeHandlerTest.php
new file mode 100644
index 00000000..259a7cb3
--- /dev/null
+++ b/tests/Handlers/TLD/AeHandlerTest.php
@@ -0,0 +1,153 @@
+handler = new AeHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotAe()
+ {
+ $query = 'google.ae';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.ae',
+ 'sponsor' => 'MarkMonitor',
+ 'status' => 'clientUpdateProhibited',
+ ],
+ 'owner' => [
+ 'name' => 'Domain Administrator',
+ ],
+ 'tech' => [
+ 'name' => 'Domain Administrator',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseNicDotAe()
+ {
+ $query = 'nic.ae';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'nic.ae',
+ 'sponsor' => 'Etisalat',
+ 'status' => 'clientUpdateProhibited',
+ ],
+ 'owner' => [
+ 'name' => 'Emirates Telecommunications Corporation - Etisalat',
+ ],
+ 'tech' => [
+ 'name' => 'Emirates Telecommunications Corporation - Etisalat',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseAedaDotAe()
+ {
+ $query = 'aeda.ae';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'aeda.ae',
+ 'sponsor' => 'aeDA Regulator',
+ 'status' => 'ok',
+ ],
+ 'owner' => [
+ 'name' => 'Telecommunication Regulatory Authority',
+ ],
+ 'tech' => [
+ 'name' => '.ae Domain Administration',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/AeroHandlerTest.php b/tests/Handlers/TLD/AeroHandlerTest.php
new file mode 100644
index 00000000..eab8baaf
--- /dev/null
+++ b/tests/Handlers/TLD/AeroHandlerTest.php
@@ -0,0 +1,64 @@
+handler = new AeroHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseNicDotAero()
+ {
+ $query = 'nic.aero';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'nic.aero',
+ 'changed' => '2025-04-22',
+ 'created' => '2002-03-08',
+ 'expires' => '2026-03-08',
+ ],
+ 'registered' => 'yes', // Currently broken
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/AgHandlerTest.php b/tests/Handlers/TLD/AgHandlerTest.php
new file mode 100644
index 00000000..d85fd0af
--- /dev/null
+++ b/tests/Handlers/TLD/AgHandlerTest.php
@@ -0,0 +1,64 @@
+handler = new AgHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseNicDotAg()
+ {
+ $query = 'nic.ag';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'nic.ag',
+ 'changed' => '2025-06-16',
+ 'created' => '1998-05-02',
+ 'expires' => '2026-05-02',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/AmHandlerTest.php b/tests/Handlers/TLD/AmHandlerTest.php
new file mode 100644
index 00000000..914a1dac
--- /dev/null
+++ b/tests/Handlers/TLD/AmHandlerTest.php
@@ -0,0 +1,62 @@
+handler = new AmHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseIsocDotAm()
+ {
+ $query = 'isoc.am';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'isoc.am',
+ 'created' => '2000-01-01',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/AppHandlerTest.php b/tests/Handlers/TLD/AppHandlerTest.php
new file mode 100644
index 00000000..9d12ae1a
--- /dev/null
+++ b/tests/Handlers/TLD/AppHandlerTest.php
@@ -0,0 +1,96 @@
+handler = new AppHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ * @throws \Exception
+ */
+ public function parseGoogleDotApp()
+ {
+ $query = 'google.app';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.app',
+ 'changed' => '2018-04-09',
+ 'created' => '2018-03-29',
+ 'expires' => '2019-03-29',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ * @throws \Exception
+ */
+ public function parseGodaddyDotApp()
+ {
+ $query = 'google.app';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.app',
+ 'changed' => '2018-04-09',
+ 'created' => '2018-03-29',
+ 'expires' => '2019-03-29',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/AsiaHandlerTest.php b/tests/Handlers/TLD/AsiaHandlerTest.php
new file mode 100644
index 00000000..18de181b
--- /dev/null
+++ b/tests/Handlers/TLD/AsiaHandlerTest.php
@@ -0,0 +1,64 @@
+handler = new AsiaHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseNicDotAsia()
+ {
+ $query = 'nic.asia';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'nic.asia',
+ 'changed' => '2025-04-14',
+ 'created' => '2020-02-28',
+ 'expires' => '2026-02-28',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/AtHandlerTest.php b/tests/Handlers/TLD/AtHandlerTest.php
new file mode 100644
index 00000000..8dc1a2ad
--- /dev/null
+++ b/tests/Handlers/TLD/AtHandlerTest.php
@@ -0,0 +1,62 @@
+handler = new AtHandler();
+ $this->handler->atepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function nicDotAt()
+ {
+ $query = 'nic.at';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ // 'name' => 'nic.at',
+ 'changed' => '2020-04-27',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/AuHandlerTest.php b/tests/Handlers/TLD/AuHandlerTest.php
new file mode 100644
index 00000000..607e3676
--- /dev/null
+++ b/tests/Handlers/TLD/AuHandlerTest.php
@@ -0,0 +1,62 @@
+handler = new AuHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseTelstraDotComDotAu()
+ {
+ $query = 'telstra.com.au';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'telstra.com.au',
+ 'changed' => '2025-05-10',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/BeHandlerTest.php b/tests/Handlers/TLD/BeHandlerTest.php
new file mode 100644
index 00000000..6e61c939
--- /dev/null
+++ b/tests/Handlers/TLD/BeHandlerTest.php
@@ -0,0 +1,63 @@
+handler = new BeHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseNicDotBe()
+ {
+ $query = 'nic.be';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'nic.be',
+ // 'changed' => '2018-01-24',
+ 'created' => '1998-04-01',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/BhHandlerTest.php b/tests/Handlers/TLD/BhHandlerTest.php
new file mode 100644
index 00000000..aa23a173
--- /dev/null
+++ b/tests/Handlers/TLD/BhHandlerTest.php
@@ -0,0 +1,64 @@
+handler = new BhHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseNicDotBh()
+ {
+ $query = 'nic.bh';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'NIC.BH',
+ 'changed' => '2023-08-31',
+ 'created' => '2019-04-24',
+ 'expires' => '2029-04-24',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/BizHandlerTest.php b/tests/Handlers/TLD/BizHandlerTest.php
new file mode 100644
index 00000000..395ed3b9
--- /dev/null
+++ b/tests/Handlers/TLD/BizHandlerTest.php
@@ -0,0 +1,64 @@
+handler = new BizHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseNeulevelDotBiz()
+ {
+ $query = 'neulevel.biz';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'neulevel.biz',
+ 'changed' => '2025-10-24',
+ 'created' => '2001-09-30',
+ 'expires' => '2025-11-06',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/BrHandlerTest.php b/tests/Handlers/TLD/BrHandlerTest.php
new file mode 100644
index 00000000..70540537
--- /dev/null
+++ b/tests/Handlers/TLD/BrHandlerTest.php
@@ -0,0 +1,63 @@
+handler = new BrHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseRegistroDotBr()
+ {
+ $query = 'registro.br';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'registro.br',
+ 'changed' => '2018-04-02',
+ 'created' => '1999-02-21',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/CaHandlerTest.php b/tests/Handlers/TLD/CaHandlerTest.php
new file mode 100644
index 00000000..14d4ef64
--- /dev/null
+++ b/tests/Handlers/TLD/CaHandlerTest.php
@@ -0,0 +1,97 @@
+handler = new CaHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotCa()
+ {
+ $query = 'google.ca';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $this->assertEquals('google.ca', $actual['regrinfo']['domain']['name']);
+ $this->assertEquals('2020-04-28', $actual['regrinfo']['domain']['changed']);
+ $this->assertEquals('2000-10-04', $actual['regrinfo']['domain']['created']);
+ $this->assertEquals('2021-04-28', $actual['regrinfo']['domain']['expires']);
+ $this->assertEquals('yes', $actual['regrinfo']['registered']);
+
+ $this->assertArrayHasKey('rawdata', $actual);
+ $this->assertEquals($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseCiraDotCa()
+ {
+ $query = 'cira.ca';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $this->assertEquals('cira.ca', $actual['regrinfo']['domain']['name']);
+ $this->assertEquals('2025-11-06', $actual['regrinfo']['domain']['changed']);
+ $this->assertEquals('1998-02-05', $actual['regrinfo']['domain']['created']);
+ $this->assertEquals('2050-02-05', $actual['regrinfo']['domain']['expires']);
+ $this->assertEquals('yes', $actual['regrinfo']['registered']);
+
+ $this->assertArrayHasKey('rawdata', $actual);
+ $this->assertEquals($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/CatHandlerTest.php b/tests/Handlers/TLD/CatHandlerTest.php
new file mode 100644
index 00000000..edeb7c14
--- /dev/null
+++ b/tests/Handlers/TLD/CatHandlerTest.php
@@ -0,0 +1,96 @@
+handler = new CatHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotCat()
+ {
+ $query = 'google.cat';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'registered' => 'no',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseDominisDotCat()
+ {
+ $query = 'dominis.cat';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'registered' => 'no',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/ChHandlerTest.php b/tests/Handlers/TLD/ChHandlerTest.php
new file mode 100644
index 00000000..655066e7
--- /dev/null
+++ b/tests/Handlers/TLD/ChHandlerTest.php
@@ -0,0 +1,143 @@
+handler = new ChHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotCh()
+ {
+ $query = 'google.ch';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.ch',
+ 'changed' => '2020-01-13',
+ 'created' => '2006-02-13',
+ 'expires' => '2021-02-14',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseCreartDotCh()
+ {
+ $query = 'creart.ch';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'CREART.CH',
+ 'changed' => '2020-08-03',
+ 'created' => '2011-06-14',
+ 'expires' => '2021-06-14',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseBlaueskreuzDotCh()
+ {
+ $query = 'blaueskreuz.ch';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'BLAUESKREUZ.CH',
+ 'changed' => '2020-08-03',
+ 'created' => '2011-06-14',
+ 'expires' => '2021-06-14',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/ClHandlerTest.php b/tests/Handlers/TLD/ClHandlerTest.php
new file mode 100644
index 00000000..01c4807e
--- /dev/null
+++ b/tests/Handlers/TLD/ClHandlerTest.php
@@ -0,0 +1,78 @@
+handler = new ClHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotCl()
+ {
+ $query = 'google.cl';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.cl',
+ // 'changed' => '2020-01-13',
+ 'created' => '2002-10-22',
+ 'expires' => '2026-11-20',
+ ],
+ // 'registered' => 'yes', // Currently broken
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ $this->assertEquals($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/CnHandlerTest.php b/tests/Handlers/TLD/CnHandlerTest.php
new file mode 100644
index 00000000..787031b0
--- /dev/null
+++ b/tests/Handlers/TLD/CnHandlerTest.php
@@ -0,0 +1,108 @@
+handler = new CnHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotCn()
+ {
+ $query = 'google.cn';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.cn',
+ // 'changed' => '2020-01-13',
+ 'created' => '2003-03-17',
+ 'expires' => '2026-03-17',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseChinaDotCn()
+ {
+ $query = 'china.cn';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'china.cn',
+ // 'changed' => '2020-08-03',
+ 'created' => '2003-03-10',
+ 'expires' => '2028-05-08',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/CoHandlerTest.php b/tests/Handlers/TLD/CoHandlerTest.php
new file mode 100644
index 00000000..9c2f08a0
--- /dev/null
+++ b/tests/Handlers/TLD/CoHandlerTest.php
@@ -0,0 +1,96 @@
+handler = new CoHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotCo()
+ {
+ $query = 'google.co';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'registered' => 'no',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseNicDotCo()
+ {
+ $query = 'nic.co';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'registered' => 'no',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/CoZaHandlerTest.php b/tests/Handlers/TLD/CoZaHandlerTest.php
new file mode 100644
index 00000000..0e9b1e5e
--- /dev/null
+++ b/tests/Handlers/TLD/CoZaHandlerTest.php
@@ -0,0 +1,96 @@
+handler = new CoZaHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotCoDotZa()
+ {
+ $query = 'google.co.za';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseSexDotCoDotZa()
+ {
+ $query = 'sex.co.za';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/CoopHandlerTest.php b/tests/Handlers/TLD/CoopHandlerTest.php
new file mode 100644
index 00000000..6fd7f33a
--- /dev/null
+++ b/tests/Handlers/TLD/CoopHandlerTest.php
@@ -0,0 +1,144 @@
+handler = new CoopHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ * @throws \Exception
+ */
+ public function parseSmileDotCoop(): void
+ {
+ $query = 'smile.coop';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'smile.coop',
+ 'handle' => 'D7878757-CNIC',
+ 'changed' => '2024-12-28',
+ 'created' => '2001-07-10',
+ 'expires' => '2026-01-30',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ * @throws \Exception
+ */
+ public function parseNicDotCoop(): void
+ {
+ $query = 'nic.coop';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'nic.coop',
+ 'handle' => 'DO_59f76c35d72c849fba8b632e12102b0d-COOP',
+ 'changed' => '2024-02-26',
+ 'created' => '2022-11-07',
+ 'expires' => '2032-11-07',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ * @throws \Exception
+ */
+ public function parseDomainsDotCoop(): void
+ {
+ $query = 'domains.coop';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'domains.coop',
+ 'handle' => 'D7881481-CNIC',
+ 'changed' => '2024-06-02',
+ 'created' => '2002-07-09',
+ 'expires' => '2029-07-09',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/CzHandlerTest.php b/tests/Handlers/TLD/CzHandlerTest.php
new file mode 100644
index 00000000..d4dde98d
--- /dev/null
+++ b/tests/Handlers/TLD/CzHandlerTest.php
@@ -0,0 +1,108 @@
+handler = new CzHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotCz()
+ {
+ $query = 'google.cz';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.cz',
+ 'changed' => '2018-04-23',
+ 'created' => '2000-07-21',
+ 'expires' => '2026-07-22',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseNicDotCz()
+ {
+ $query = 'nic.cz';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'nic.cz',
+ 'changed' => '2020-11-17',
+ 'created' => '1997-10-30',
+ 'expires' => '2027-03-15',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/DeHandlerTest.php b/tests/Handlers/TLD/DeHandlerTest.php
new file mode 100644
index 00000000..8478b910
--- /dev/null
+++ b/tests/Handlers/TLD/DeHandlerTest.php
@@ -0,0 +1,195 @@
+handler = new DeHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parse4EverDotDe()
+ {
+ $query = '4ever.de';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => '4ever.de',
+ 'nserver' => [
+ 0 => 'ns1.detebe.org',
+ 1 => 'ns2.detebe.org',
+ 2 => 'ns.4ever.de 193.200.137.137',
+ 3 => 'ns.does.not-exist.de',
+ ],
+ 'status' => 'connect',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotDe()
+ {
+ $query = 'google.de';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.de',
+ 'nserver' => [
+ 0 => 'ns1.google.com',
+ 1 => 'ns2.google.com',
+ 2 => 'ns3.google.com',
+ 3 => 'ns4.google.com',
+ ],
+ 'status' => 'connect',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseDenicDotDe()
+ {
+ $query = 'denic.de';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'denic.de',
+ 'nserver' => [
+ 0 => 'ns1.denic.de 77.67.63.106 2001:668:1f:11:0:0:0:106',
+ 1 => 'ns2.denic.de 81.91.164.6 2a02:568:0:2:0:0:0:54',
+ 2 => 'ns3.denic.de 195.243.137.27 2003:8:14:0:0:0:0:106',
+ 3 => 'ns4.denic.net',
+ ],
+ 'status' => 'connect',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseDomainInConnectStatus()
+ {
+ $query = 'humblebundle.de';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'humblebundle.de',
+ 'nserver' => [
+ 0 => 'ns1.redirectdom.com',
+ 1 => 'ns2.redirectdom.com',
+ ],
+ 'status' => 'connect',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseDomainInFreeStatus()
+ {
+ $query = 'a2ba91bff88c6983f6af010c41236206df64001d.de';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'a2ba91bff88c6983f6af010c41236206df64001d.de',
+ ],
+ 'registered' => 'no',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/DevHandlerTest.php b/tests/Handlers/TLD/DevHandlerTest.php
new file mode 100644
index 00000000..cb53095b
--- /dev/null
+++ b/tests/Handlers/TLD/DevHandlerTest.php
@@ -0,0 +1,79 @@
+handler = new DevHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseOstapDotDev()
+ {
+ $query = 'ostap.dev';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'registered' => 'no',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+
+ // $this->assertEquals(null, $actual['regrinfo']['domain']['name']);
+ // $this->assertEquals('2024-06-07', $actual['regrinfo']['domain']['changed']);
+ // $this->assertEquals('2019-02-28', $actual['regrinfo']['domain']['created']);
+ // $this->assertEquals('2025-02-28', $actual['regrinfo']['domain']['expires']);
+ // $this->assertEquals('yes', $actual['regrinfo']['registered']);
+ //
+ // $this->assertArrayHasKey('rawdata', $actual);
+ // $this->assertEquals($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/DkHandlerTest.php b/tests/Handlers/TLD/DkHandlerTest.php
new file mode 100644
index 00000000..16c1bae5
--- /dev/null
+++ b/tests/Handlers/TLD/DkHandlerTest.php
@@ -0,0 +1,78 @@
+handler = new DkHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotDk()
+ {
+ $query = 'google.dk';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'domain' => 'google.dk',
+ 'registered' => '1999-01-10',
+ 'expires' => '2019-03-31',
+ 'status' => 'Active',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/EduHandlerTest.php b/tests/Handlers/TLD/EduHandlerTest.php
new file mode 100644
index 00000000..242b4a67
--- /dev/null
+++ b/tests/Handlers/TLD/EduHandlerTest.php
@@ -0,0 +1,77 @@
+handler = new EduHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseBerkeleyDotEdu()
+ {
+ $query = 'berkeley.edu';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'berkeley.edu',
+ 'changed' => '2025-09-11',
+ 'created' => '1985-04-24',
+ ],
+ // 'registered' => 'yes', // Currently broken
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ $this->assertEquals($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/EuHandlerTest.php b/tests/Handlers/TLD/EuHandlerTest.php
new file mode 100644
index 00000000..2e6ebcdf
--- /dev/null
+++ b/tests/Handlers/TLD/EuHandlerTest.php
@@ -0,0 +1,108 @@
+handler = new EuHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotEu()
+ {
+ $query = 'google.eu';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ // 'domain' => [
+ // 'name' => 'google.eu',
+ // 'changed' => '2020-01-13',
+ // 'created' => '2003-03-17',
+ // 'expires' => '2022-03-17',
+ // ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseEuridDotEu()
+ {
+ $query = 'eurid.eu';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ // 'domain' => [
+ // 'name' => 'eurid.eu',
+ // 'changed' => '2020-08-03',
+ // 'created' => '2003-03-10',
+ // 'expires' => '2023-05-08',
+ // ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/FiHandlerTest.php b/tests/Handlers/TLD/FiHandlerTest.php
new file mode 100644
index 00000000..d7c47d22
--- /dev/null
+++ b/tests/Handlers/TLD/FiHandlerTest.php
@@ -0,0 +1,108 @@
+handler = new FiHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotFi()
+ {
+ $query = 'google.fi';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.fi',
+ 'created' => '2006-06-30',
+ 'expires' => '2026-07-04',
+ 'changed' => '2025-06-02',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseFicoraDotFi()
+ {
+ $query = 'ficora.fi';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'ficora.fi',
+ 'created' => '2001-06-29',
+ 'changed' => '2023-06-09',
+ 'expires' => '2029-08-31',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/FjHandlerTest.php b/tests/Handlers/TLD/FjHandlerTest.php
new file mode 100644
index 00000000..d5cb6d30
--- /dev/null
+++ b/tests/Handlers/TLD/FjHandlerTest.php
@@ -0,0 +1,78 @@
+handler = new FjHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseFijiDotGovDotFj(): void
+ {
+ $query = 'fiji.gov.fj';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ // 'domain' => [
+ // 'name' => 'fiji.gov.fj',
+ // // 'changed' => '2020-08-03',
+ // // 'created' => '2003-03-10',
+ // 'expires' => '2020-12-31',
+ // ],
+ 'registered' => 'no',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/FmHandlerTest.php b/tests/Handlers/TLD/FmHandlerTest.php
new file mode 100644
index 00000000..e89127c1
--- /dev/null
+++ b/tests/Handlers/TLD/FmHandlerTest.php
@@ -0,0 +1,108 @@
+handler = new FmHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotFm()
+ {
+ $query = 'google.fm';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'GOOGLE.FM',
+ 'changed' => '2025-09-02',
+ 'created' => '2000-09-05',
+ 'expires' => '2026-09-04',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseDotDotFm()
+ {
+ $query = 'dot.fm';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'DOT.FM',
+ 'changed' => '2023-08-31',
+ 'created' => '1998-06-16',
+ 'expires' => '2099-04-29',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/FrHandlerTest.php b/tests/Handlers/TLD/FrHandlerTest.php
new file mode 100644
index 00000000..124e497d
--- /dev/null
+++ b/tests/Handlers/TLD/FrHandlerTest.php
@@ -0,0 +1,138 @@
+handler = new FrHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotFr()
+ {
+ $query = 'google.fr';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.fr',
+ 'expires' => '2026-12-30',
+ 'created' => '2000-07-26',
+ 'changed' => '2025-11-28',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseLemonadeDotFr()
+ {
+ $query = 'lemonade.fr';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'lemonade.fr',
+ 'expires' => '2026-07-30',
+ 'created' => '2023-07-30',
+ 'changed' => '2025-08-31',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseNicDotFr()
+ {
+ $query = 'nic.fr';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'nic.fr',
+ 'created' => '1995-01-01',
+ 'changed' => '2024-07-18',
+ 'expires' => '2029-12-31',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/HuHandlerTest.php b/tests/Handlers/TLD/HuHandlerTest.php
new file mode 100644
index 00000000..90bbff02
--- /dev/null
+++ b/tests/Handlers/TLD/HuHandlerTest.php
@@ -0,0 +1,108 @@
+handler = new HuHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotHu()
+ {
+ $query = 'google.hu';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.hu',
+ // 'changed' => '2020-01-13',
+ 'created' => '2000-03-03',
+ // 'expires' => '2022-03-17',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseNicDotHu()
+ {
+ $query = 'nic.hu';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'nic.hu',
+ // 'changed' => '2020-08-03',
+ 'created' => '1996-06-27',
+ // 'expires' => '2023-05-08',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/IeHandlerTest.php b/tests/Handlers/TLD/IeHandlerTest.php
new file mode 100644
index 00000000..e58a39b1
--- /dev/null
+++ b/tests/Handlers/TLD/IeHandlerTest.php
@@ -0,0 +1,96 @@
+handler = new IeHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotIe()
+ {
+ $query = 'google.ie';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'registered' => 'no',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseDomainregistryDotIe()
+ {
+ $query = 'domainregistry.ie';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'registered' => 'no',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/IlHandlerTest.php b/tests/Handlers/TLD/IlHandlerTest.php
new file mode 100644
index 00000000..592d5776
--- /dev/null
+++ b/tests/Handlers/TLD/IlHandlerTest.php
@@ -0,0 +1,108 @@
+handler = new IlHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseTapuzDotCoDotIl()
+ {
+ $query = 'tapuz.co.il';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'query' => 'tapuz.co.il',
+ 'changed' => '2021-09-13',
+ // 'expires' => '2020-06-11',
+ 'validity' => '13-09-2026',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseVenetaCucineCoIl()
+ {
+ $query = 'venetacucine.co.il';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'domain' => 'venetacucine.co.il',
+ // 'created' => '2003-03-10',
+ 'changed' => '2011-02-17',
+ // 'expires' => '2020-06-11',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/KiwiHandlerTest.php b/tests/Handlers/TLD/KiwiHandlerTest.php
new file mode 100644
index 00000000..193f882a
--- /dev/null
+++ b/tests/Handlers/TLD/KiwiHandlerTest.php
@@ -0,0 +1,96 @@
+handler = new KiwiHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseHelloDotKiwi()
+ {
+ $query = 'hello.kiwi';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'hello.kiwi',
+ 'created' => '2014-02-06',
+ 'changed' => '2023-09-11',
+ 'expires' => '2026-10-31',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('regyinfo', $actual);
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotKiwi()
+ {
+ $query = 'google.kiwi';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.kiwi',
+ 'changed' => '2025-02-26',
+ 'created' => '2014-03-25',
+ 'expires' => '2026-03-25',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('regyinfo', $actual);
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/LondonHandlerTest.php b/tests/Handlers/TLD/LondonHandlerTest.php
new file mode 100644
index 00000000..070a89a2
--- /dev/null
+++ b/tests/Handlers/TLD/LondonHandlerTest.php
@@ -0,0 +1,97 @@
+handler = new LondonHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseNicDotLondon()
+ {
+ $query = 'nic.london';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $this->assertEquals('nic.london', $actual['regrinfo']['domain']['name']);
+ $this->assertEquals('2020-02-25', $actual['regrinfo']['domain']['changed']);
+ $this->assertEquals('2014-02-25', $actual['regrinfo']['domain']['created']);
+ $this->assertEquals('2021-02-25', $actual['regrinfo']['domain']['expires']);
+ $this->assertEquals('yes', $actual['regrinfo']['registered']);
+
+ $this->assertArrayHasKey('rawdata', $actual);
+ $this->assertEquals($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseDomainsDotLondon()
+ {
+ $query = 'domains.london';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $this->assertEquals('domains.london', $actual['regrinfo']['domain']['name']);
+ $this->assertEquals('2020-02-16', $actual['regrinfo']['domain']['changed']);
+ $this->assertEquals('2015-02-23', $actual['regrinfo']['domain']['created']);
+ $this->assertEquals('2021-02-23', $actual['regrinfo']['domain']['expires']);
+ $this->assertEquals('yes', $actual['regrinfo']['registered']);
+
+ $this->assertArrayHasKey('rawdata', $actual);
+ $this->assertEquals($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/NoHandlerTest.php b/tests/Handlers/TLD/NoHandlerTest.php
new file mode 100644
index 00000000..855ad9ae
--- /dev/null
+++ b/tests/Handlers/TLD/NoHandlerTest.php
@@ -0,0 +1,106 @@
+handler = new NoHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotNo()
+ {
+ $query = 'google.no';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.no',
+ 'created' => '2001-02-26',
+ 'changed' => '2018-06-22',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseNoridDotNo()
+ {
+ $query = 'norid.no';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'norid.no',
+ 'created' => '1999-11-15',
+ 'changed' => '2018-05-24',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/OrgHandlerTest.php b/tests/Handlers/TLD/OrgHandlerTest.php
new file mode 100644
index 00000000..e3c8cc3f
--- /dev/null
+++ b/tests/Handlers/TLD/OrgHandlerTest.php
@@ -0,0 +1,109 @@
+handler = new OrgHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotOrg()
+ {
+ $query = 'google.org';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'GOOGLE.ORG',
+ 'changed' => '2017-09-18',
+ 'created' => '1998-10-21',
+ 'expires' => '2018-10-20',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseDatesProperly()
+ {
+ $query = 'scottishrecoveryconsortium.org';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'SCOTTISHRECOVERYCONSORTIUM.ORG',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+
+ $this->assertEquals('2020-01-13', $actual['regrinfo']['domain']['changed'], 'Incorrect change date');
+ $this->assertEquals('2012-10-01', $actual['regrinfo']['domain']['created'], 'Incorrect created date');
+ $this->assertEquals('2020-10-01', $actual['regrinfo']['domain']['expires'], 'Incorrect expiration date');
+ }
+}
diff --git a/tests/Handlers/TLD/PhHandlerTest.php b/tests/Handlers/TLD/PhHandlerTest.php
new file mode 100644
index 00000000..460e7001
--- /dev/null
+++ b/tests/Handlers/TLD/PhHandlerTest.php
@@ -0,0 +1,94 @@
+handler = new PhHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseCityEscapeDotPh()
+ {
+ $query = 'cityescape.ph';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $this->assertEquals('cityescape.ph', $actual['regrinfo']['domain']['name']);
+ $this->assertEquals('2024-01-30', $actual['regrinfo']['domain']['changed']);
+ $this->assertEquals('1990-09-14', $actual['regrinfo']['domain']['created']);
+ // $this->assertEquals('2021-02-25', $actual['regrinfo']['domain']['expires']);
+ $this->assertEquals('yes', $actual['regrinfo']['registered']);
+
+ $this->assertArrayHasKey('rawdata', $actual);
+ $this->assertEquals($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ public function parseDotDotPh()
+ {
+ $query = 'dot.ph';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $this->assertEquals('dot.ph', $actual['regrinfo']['domain']['name']);
+ $this->assertEquals('2016-07-25', $actual['regrinfo']['domain']['changed']);
+ $this->assertEquals('2000-08-09', $actual['regrinfo']['domain']['created']);
+ $this->assertEquals('2025-08-09', $actual['regrinfo']['domain']['expires']);
+ $this->assertEquals('yes', $actual['regrinfo']['registered']);
+
+ $this->assertArrayHasKey('rawdata', $actual);
+ $this->assertEquals($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/RuHandlerTest.php b/tests/Handlers/TLD/RuHandlerTest.php
new file mode 100644
index 00000000..4c8f7a4e
--- /dev/null
+++ b/tests/Handlers/TLD/RuHandlerTest.php
@@ -0,0 +1,109 @@
+handler = new RuHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotRu()
+ {
+ $query = 'google.ru';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'GOOGLE.RU',
+ 'created' => '2004-03-03',
+ // 'changed' => '2017-09-18',
+ 'expires' => '2021-03-04',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * Warning: for this test is used "рег.рф.txt", but this file broke "Composer" for macOS.
+ *
+ * @test
+ */
+ public function parsePerDotPhi(): void
+ {
+ $query = 'рег.рф';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'XN--C1AD6A.XN--P1AI',
+ 'created' => '2009-12-11',
+ 'expires' => '2026-12-11',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/SeHandlerTest.php b/tests/Handlers/TLD/SeHandlerTest.php
new file mode 100644
index 00000000..a9b93c14
--- /dev/null
+++ b/tests/Handlers/TLD/SeHandlerTest.php
@@ -0,0 +1,78 @@
+handler = new SeHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotDk()
+ {
+ $query = 'google.se';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.se',
+ 'created' => '2003-08-27',
+ 'changed' => '2017-09-18',
+ 'expires' => '2018-10-20',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/TodayHandlerTest.php b/tests/Handlers/TLD/TodayHandlerTest.php
new file mode 100644
index 00000000..9be2299d
--- /dev/null
+++ b/tests/Handlers/TLD/TodayHandlerTest.php
@@ -0,0 +1,72 @@
+handler = new TodayHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseModxDotToday()
+ {
+ $query = 'modx.today';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $this->assertEquals('modx.today', $actual['regrinfo']['domain']['name']);
+ // $this->assertEquals('2023-06-23', $actual['regrinfo']['domain']['changed']);
+ // $this->assertEquals('2014-05-09', $actual['regrinfo']['domain']['created']);
+ // $this->assertEquals('2024-05-09', $actual['regrinfo']['domain']['expires']);
+ $this->assertEquals('no', $actual['regrinfo']['registered']);
+
+ $this->assertArrayHasKey('rawdata', $actual);
+ $this->assertEquals($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/UkHandlerTest.php b/tests/Handlers/TLD/UkHandlerTest.php
new file mode 100644
index 00000000..8f4c0760
--- /dev/null
+++ b/tests/Handlers/TLD/UkHandlerTest.php
@@ -0,0 +1,134 @@
+handler = new UkHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseVibrantDigitalFutureDotUk()
+ {
+ $query = 'vibrantdigitalfuture.uk';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'created' => '2024-10-24',
+ 'expires' => '2025-10-24',
+ 'changed' => '2025-10-31',
+ ],
+ 'registered' => 'no',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotCoDotUk()
+ {
+ $query = 'google.co.uk';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ // 'name' => 'google.co.uk',
+ 'created' => '1999-02-14',
+ 'expires' => '2026-02-14',
+ 'changed' => '2025-01-13',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseOlsnsDotCoDotUk()
+ {
+ $query = 'olsns.co.uk';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ // 'name' => 'olsns.co.uk',
+ 'created' => '2001-02-21',
+ 'expires' => '2026-02-21',
+ 'changed' => '2025-02-19',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/UsHandlerTest.php b/tests/Handlers/TLD/UsHandlerTest.php
new file mode 100644
index 00000000..6bca7cb4
--- /dev/null
+++ b/tests/Handlers/TLD/UsHandlerTest.php
@@ -0,0 +1,108 @@
+handler = new UsHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotUs()
+ {
+ $query = 'google.us';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.us',
+ 'changed' => '2025-03-22',
+ 'created' => '2002-04-19',
+ 'expires' => '2026-04-18',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseNeustarDotUs()
+ {
+ $query = 'neustar.us';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'neustar.us',
+ 'changed' => '2025-06-02',
+ 'created' => '2002-04-18',
+ 'expires' => '2026-04-17',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/TLD/WsHandlerTest.php b/tests/Handlers/TLD/WsHandlerTest.php
new file mode 100644
index 00000000..e17335e9
--- /dev/null
+++ b/tests/Handlers/TLD/WsHandlerTest.php
@@ -0,0 +1,108 @@
+handler = new WsHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseGoogleDotWs()
+ {
+ $query = 'google.ws';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'google.ws',
+ 'changed' => '2020-02-01',
+ 'created' => '2002-03-03',
+ 'expires' => '2021-03-03',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+
+ /**
+ * @test
+ */
+ public function parseSamoanicDotWs()
+ {
+ $query = 'samoanic.ws';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'SAMOANIC.WS',
+ 'changed' => '2025-03-09',
+ 'created' => '2000-03-09',
+ 'expires' => '2026-03-09',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ $this->assertArrayHasKey('rawdata', $actual);
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/Handlers/gTLD/AfternicHandlerTest.php b/tests/Handlers/gTLD/AfternicHandlerTest.php
new file mode 100644
index 00000000..941946d7
--- /dev/null
+++ b/tests/Handlers/gTLD/AfternicHandlerTest.php
@@ -0,0 +1,74 @@
+handler = new AfternicHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ /**
+ * @test
+ */
+ public function parseBuydomainsDotCom()
+ {
+ $query = 'buydomains.com';
+
+ $fixture = $this->loadFixture($query);
+
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'BUYDOMAINS.COM',
+ // 'changed' => '2021-11-16',
+ 'created' => '1997-03-30',
+ 'expires' => '2029-03-31',
+ ],
+ ];
+
+ Assert::assertArraySubset($expected, $actual, 'Whois data may have changed');
+ }
+}
diff --git a/tests/Handlers/gTLD/GtldHandlerTest.php b/tests/Handlers/gTLD/GtldHandlerTest.php
new file mode 100644
index 00000000..1770e1f7
--- /dev/null
+++ b/tests/Handlers/gTLD/GtldHandlerTest.php
@@ -0,0 +1,74 @@
+handler = new GtldHandler();
+ $this->handler->deepWhois = false;
+ }
+
+ public function testParseGoogleDotCom()
+ {
+ $query = 'google.com';
+
+ $fixture = $this->loadFixture($query);
+ $data = [
+ 'rawdata' => $fixture,
+ 'regyinfo' => [],
+ ];
+
+ $actual = $this->handler->parse($data, $query);
+
+ $expected = [
+ 'domain' => [
+ 'name' => 'GOOGLE.COM',
+ 'changed' => '2011-07-20',
+ 'created' => '1997-09-15',
+ 'expires' => '2020-09-14',
+ ],
+ 'registered' => 'yes',
+ ];
+
+ Assert::assertArraySubset($expected, $actual['regrinfo'], 'Whois data may have changed');
+ Assert::assertArraySubset($fixture, $actual['rawdata'], 'Fixture data may be out of date');
+ }
+}
diff --git a/tests/IpToolsTest.php b/tests/IpToolsTest.php
deleted file mode 100644
index c4cbabf8..00000000
--- a/tests/IpToolsTest.php
+++ /dev/null
@@ -1,46 +0,0 @@
-assertTrue($ipTools->validIp($ip));
- }
-
- public function validIpsProvider()
- {
- return array(
- array('123.123.123.123'),
- array('1a80:1f45::ebb:12'),
- );
- }
-
- /**
- * @dataProvider invalidIpsProvider
- */
- public function testInvalidIp($ip)
- {
- $ipTools = new IpTools;
- $this->assertFalse($ipTools->validIp($ip));
- }
-
- public function invalidIpsProvider()
- {
- return array(
- array(''),
- array('169.254.255.200'),
- array('172.17.255.100'),
- array('123.a15.255.100'),
- array('fd80::1'),
- array('fc80:19c::1'),
- array('1a80:1f45::ebm:12'),
- array('[1a80:1f45::ebb:12]'),
- );
- }
-}
diff --git a/tests/ParserTest.php b/tests/ParserTest.php
new file mode 100644
index 00000000..40981c0e
--- /dev/null
+++ b/tests/ParserTest.php
@@ -0,0 +1,196 @@
+assertEquals($expected, $actual);
+ }
+
+ public function get_dateProvider(): array
+ {
+ return [
+ 'nic.ag' => [
+ 'date' => '1998-05-02T04:00:00Z',
+ 'format' => 'ymd',
+ 'expected' => '1998-05-02',
+ ],
+ 'nic.at' => [
+ 'date' => '20121116 16:58:21',
+ 'format' => 'Ymd',
+ 'expected' => '2012-11-16',
+ ],
+ 'telstra.com.au' => [
+ 'date' => '11-May-2016 05:18:45 UTC',
+ 'format' => 'mdy',
+ 'expected' => '2016-05-11',
+ ],
+ 'registro.br' => [
+ 'date' => '19971217',
+ 'format' => 'Ymd',
+ 'expected' => '1997-12-17',
+ ],
+ 'registro.br-2' => [
+ 'date' => '19990221 #142485',
+ 'format' => 'Ymd',
+ 'expected' => '1999-02-21',
+ ],
+ 'cira.ca' => [
+ 'date' => '1998/02/05',
+ 'format' => 'Ymd',
+ 'expected' => '1998-02-05',
+ ],
+ 'nic.co' => [
+ 'date' => '2010-04-23T09:12:48Z',
+ 'format' => 'mdy',
+ 'expected' => '2010-04-23',
+ ],
+ 'day smaller than month' => [
+ 'date' => '2010-06-02T01:32:58Z',
+ 'format' => 'ymd',
+ 'expected' => '2010-06-02',
+ ],
+ 'nic.cz' => [
+ 'date' => '06.03.2002 18:11:00',
+ 'format' => 'dmy',
+ 'expected' => '2002-03-06',
+ ],
+ 'nic.cz-2' => [
+ 'date' => '15.03.2027 18:11:00',
+ 'format' => 'dmy',
+ 'expected' => '2027-03-15',
+ ],
+ 'nic.fr' => [
+ 'date' => '23/08/2005 hostmaster@nic.fr',
+ 'format' => 'dmY',
+ 'expected' => '2005-08-23',
+ ],
+ 'nic.hu' => [
+ 'date' => '1996.06.27 13:36:21',
+ 'format' => 'ymd',
+ 'expected' => '1996-06-27',
+ ],
+ 'domainregistry.ie' => [
+ 'date' => '01-January-2025',
+ 'format' => 'Ymd',
+ 'expected' => '2025-01-01',
+ ],
+ 'isnic.is' => [
+ 'date' => 'November 6 2000',
+ 'format' => 'mdy',
+ 'expected' => '2000-11-06',
+ ],
+ 'dns.lu' => [
+ 'date' => '31/05/1995',
+ 'format' => 'dmy',
+ 'expected' => '1995-05-31',
+ ],
+ 'olsns.co.uk' => [
+ 'date' => '21-Feb-2001',
+ 'format' => 'dmy',
+ 'expected' => '2001-02-21',
+ ],
+ 'dominis.cat' => [
+ 'date' => '2017-07-29T11:00:47.438Z',
+ 'format' => 'mdy',
+ 'expected' => '2017-07-29',
+ ],
+ 'google.ws' => [
+ 'date' => '2021-03-03T00:00:00-0800',
+ 'format' => 'mdy',
+ 'expected' => '2021-03-03',
+ ],
+ ];
+ }
+
+ /**
+ * @test
+ * @group CVE-2015-5243
+ */
+ public function genericParserABlocks(): void
+ {
+ $translate = [
+ 'Registrant Name' => 'owner.name',
+ ];
+
+ $disclaimer = [];
+ $output = AbstractHandler::generic_parser_a_blocks(static::RAW_DATA, $translate, $disclaimer);
+ $this->assertEquals('${k}', $output['main']['owner']['name']);
+ }
+
+ /**
+ * @test
+ * @group CVE-2015-5243
+ */
+ public function genericParserB(): void
+ {
+ $output = AbstractHandler::generic_parser_b(static::RAW_DATA);
+ $this->assertEquals('${k}', $output['owner']['name']);
+ }
+
+ /**
+ * @test
+ * @group CVE-2015-5243
+ */
+ public function getBlocksOne(): void
+ {
+ $items = [
+ 'domain.name' => 'Domain:',
+ ];
+
+ $output = AbstractHandler::getBlocks(static::RAW_DATA, $items);
+ $this->assertEquals('${field}', $output['domain']['name']);
+ }
+
+ /**
+ * @test
+ * @group CVE-2015-5243
+ */
+ public function getBlocksTwo(): void
+ {
+ $items = [
+ 'agent' => 'Registrar:',
+ ];
+
+ $output = AbstractHandler::getBlocks(static::RAW_DATA, $items);
+ $this->assertEquals("Name:\t \${field}", $output['agent'][0]);
+ }
+
+ /**
+ * @test
+ * @group CVE-2015-5243
+ */
+ public function getContact(): void
+ {
+ $output = AbstractHandler::getContact(static::RAW_DATA);
+ $this->assertEquals('${field}', $output['fax']);
+ }
+}
diff --git a/tests/WhoisClientTest.php b/tests/WhoisClientTest.php
index b02798c1..6f1b3f33 100644
--- a/tests/WhoisClientTest.php
+++ b/tests/WhoisClientTest.php
@@ -1,49 +1,68 @@
assertRegExp('/^(\d+)\.(\d+)\.(\d+)(-\w+)*$/', $client->codeVersion);
+ $client = new WhoisClient();
+
+ if (method_exists($this, 'assertMatchesRegularExpression')) {
+ $this->assertMatchesRegularExpression('/^(\d+)\.(\d+)\.(\d+)(-\w+)*$/', $client->codeVersion);
+ } else {
+ /*
+ * Deprecated in PHPUnit 9
+ * @noinspection PhpUnitDeprecatedCallsIn10VersionInspection
+ * @noinspection PhpDeprecationInspection
+ */
+ $this->assertRegExp('/^(\d+)\.(\d+)\.(\d+)(-\w+)*$/', $client->codeVersion);
+ }
}
/**
* @dataProvider serversProvider
+ * @param mixed $server
+ * @param mixed $result
*/
public function testParseServer($server, $result)
{
- $whoisClient = new WhoisClient;
+ $whoisClient = new WhoisClient();
$this->assertEquals($result, $whoisClient->parseServer($server));
}
public function serversProvider()
{
- return array(
- array('http://www.phpwhois.pw:80/', array('scheme' => 'http', 'host' => 'www.phpwhois.pw', 'port' => 80)),
- array('http://www.phpwhois.pw:80', array('scheme' => 'http', 'host' => 'www.phpwhois.pw', 'port' => 80)),
- array('http://www.phpwhois.pw', array('scheme' => 'http', 'host' => 'www.phpwhois.pw')),
- array('www.phpwhois.pw:80', array('host' => 'www.phpwhois.pw', 'port' => 80)),
- array('www.phpwhois.pw:80/', array('host' => 'www.phpwhois.pw', 'port' => 80)),
- array('www.phpwhois.pw', array('host' => 'www.phpwhois.pw')),
- array('www.phpwhois.pw/', array('host' => 'www.phpwhois.pw')),
- array('http://127.0.0.1:80/', array('scheme' => 'http', 'host' => '127.0.0.1', 'port' => 80)),
- array('http://127.0.0.1:80', array('scheme' => 'http', 'host' => '127.0.0.1', 'port' => 80)),
- array('http://127.0.0.1', array('scheme' => 'http', 'host' => '127.0.0.1')),
- array('127.0.0.1:80', array('host' => '127.0.0.1', 'port' => 80)),
- array('127.0.0.1:80/', array('host' => '127.0.0.1', 'port' => 80)),
- array('127.0.0.1', array('host' => '127.0.0.1')),
- array('127.0.0.1/', array('host' => '127.0.0.1')),
- array('http://[1a80:1f45::ebb:12]:80/', array('scheme' => 'http', 'host' => '[1a80:1f45::ebb:12]', 'port' => 80)),
- array('http://[1a80:1f45::ebb:12]:80', array('scheme' => 'http', 'host' => '[1a80:1f45::ebb:12]', 'port' => 80)),
- array('http://[1a80:1f45::ebb:12]', array('scheme' => 'http', 'host' => '[1a80:1f45::ebb:12]')),
- //array('http://1a80:1f45::ebb:12', array('scheme' => 'http', 'host' => '[1a80:1f45::ebb:12]')),
- array('[1a80:1f45::ebb:12]:80', array('host' => '[1a80:1f45::ebb:12]', 'port' => 80)),
- array('[1a80:1f45::ebb:12]:80/', array('host' => '[1a80:1f45::ebb:12]', 'port' => 80)),
- array('1a80:1f45::ebb:12', array('host' => '[1a80:1f45::ebb:12]')),
- array('1a80:1f45::ebb:12/', array('host' => '[1a80:1f45::ebb:12]')),
- );
+ return [
+ ['http://www.phpwhois.pw:80/', ['scheme' => 'http', 'host' => 'www.phpwhois.pw', 'port' => 80]],
+ ['http://www.phpwhois.pw:80', ['scheme' => 'http', 'host' => 'www.phpwhois.pw', 'port' => 80]],
+ ['http://www.phpwhois.pw', ['scheme' => 'http', 'host' => 'www.phpwhois.pw']],
+ ['www.phpwhois.pw:80', ['host' => 'www.phpwhois.pw', 'port' => 80]],
+ ['www.phpwhois.pw:80/', ['host' => 'www.phpwhois.pw', 'port' => 80]],
+ ['www.phpwhois.pw', ['host' => 'www.phpwhois.pw']],
+ ['www.phpwhois.pw/', ['host' => 'www.phpwhois.pw']],
+ ['http://127.0.0.1:80/', ['scheme' => 'http', 'host' => '127.0.0.1', 'port' => 80]],
+ ['http://127.0.0.1:80', ['scheme' => 'http', 'host' => '127.0.0.1', 'port' => 80]],
+ ['http://127.0.0.1', ['scheme' => 'http', 'host' => '127.0.0.1']],
+ ['127.0.0.1:80', ['host' => '127.0.0.1', 'port' => 80]],
+ ['127.0.0.1:80/', ['host' => '127.0.0.1', 'port' => 80]],
+ ['127.0.0.1', ['host' => '127.0.0.1']],
+ ['127.0.0.1/', ['host' => '127.0.0.1']],
+ ['http://[1a80:1f45::ebb:12]:80/', ['scheme' => 'http', 'host' => '[1a80:1f45::ebb:12]', 'port' => 80]],
+ ['http://[1a80:1f45::ebb:12]:80', ['scheme' => 'http', 'host' => '[1a80:1f45::ebb:12]', 'port' => 80]],
+ ['http://[1a80:1f45::ebb:12]', ['scheme' => 'http', 'host' => '[1a80:1f45::ebb:12]']],
+ // ['http://1a80:1f45::ebb:12', ['scheme' => 'http', 'host' => '[1a80:1f45::ebb:12]']],
+ ['[1a80:1f45::ebb:12]:80', ['host' => '[1a80:1f45::ebb:12]', 'port' => 80]],
+ ['[1a80:1f45::ebb:12]:80/', ['host' => '[1a80:1f45::ebb:12]', 'port' => 80]],
+ ['1a80:1f45::ebb:12', ['host' => '[1a80:1f45::ebb:12]']],
+ ['1a80:1f45::ebb:12/', ['host' => '[1a80:1f45::ebb:12]']],
+ ];
}
}
diff --git a/tests/WhoisTest.php b/tests/WhoisTest.php
index 3a34fe32..85f8b2e1 100644
--- a/tests/WhoisTest.php
+++ b/tests/WhoisTest.php
@@ -1,35 +1,44 @@
lookup('phpwhois.pw');
+ $whois = new Whois();
+ $result = $whois->lookup('google.com');
$this->assertEquals('yes', $result['regrinfo']['registered']);
}
/**
* @dataProvider domainsProvider
+ * @param mixed $type
+ * @param mixed $domain
*/
public function testQtype($type, $domain)
{
- $whois = new Whois;
+ $whois = new Whois();
$this->assertEquals($type, $whois->getQueryType($domain));
}
public function domainsProvider()
{
- return array(
- array(Whois::QTYPE_DOMAIN, 'www.google.com'),
- array(Whois::QTYPE_DOMAIN, 'президент.рф'),
- array(Whois::QTYPE_IPV4, '212.212.12.12'),
- array(Whois::QTYPE_UNKNOWN, '127.0.0.1'),
- array(Whois::QTYPE_IPV6, '1a80:1f45::ebb:12'),
- array(Whois::QTYPE_UNKNOWN, 'fc80:19c::1'),
- array(Whois::QTYPE_AS, 'ABCD_EF-GH:IJK'),
- );
+ return [
+ [Whois::QTYPE_DOMAIN, 'www.google.com'],
+ [Whois::QTYPE_DOMAIN, 'президент.рф'],
+ [Whois::QTYPE_IPV4, '212.212.12.12'],
+ [Whois::QTYPE_UNKNOWN, '127.0.0.1'],
+ [Whois::QTYPE_IPV6, '1a80:1f45::ebb:12'],
+ [Whois::QTYPE_UNKNOWN, 'fc80:19c::1'],
+ [Whois::QTYPE_AS, 'ABCD_EF-GH:IJK'],
+ ];
}
}
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
deleted file mode 100644
index 8c85a891..00000000
--- a/tests/bootstrap.php
+++ /dev/null
@@ -1,5 +0,0 @@
->> Last update of WHOIS database: 2025-11-30T17:10:06Z <<<
+
+Terms of Use: Access to WHOIS information is provided to assist persons in determining the contents of a domain name registration record in the registry database. The data in this record is provided by Identity Digital or the Registry Operator for informational purposes only, and accuracy is not guaranteed. This service is intended only for query-based access. You agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data to (a) allow, enable, or otherwise support the transmission by e-mail, telephone, or facsimile of mass unsolicited, commercial advertising or solicitations to entities other than the data recipient's own existing customers; or (b) enable high volume, automated, electronic processes that send queries or data to the systems of Registry Operator, a Registrar, or Identity Digital except as reasonably necessary to register domain names or modify existing registrations. When using the Whois service, please consider the following: The Whois service is not a replacement for standard EPP commands to the SRS service. Whois is not considered authoritative for registered domain objects. The Whois service may be scheduled for downtime during production or OT&E maintenance periods. Queries to the Whois services are throttled. If too many queries are received from a single IP address within a specified time, the service will begin to reject further queries for a period of time to prevent disruption of Whois service access. Abuse of the Whois system through data mining is mitigated by detecting and limiting bulk query access from single sources. Where applicable, the presence of a [Non-Public Data] tag indicates that such data is not made publicly available due to applicable data privacy laws or requirements. Should you wish to contact the registrant, please refer to the Whois records available through the registrar URL listed above. Access to non-public data may be provided, upon request, where it can be reasonably confirmed that the requester holds a specific legitimate interest and a proper legal basis for accessing the withheld data. Access to this data provided by Identity Digital can be requested by submitting a request via the form found at https://www.identity.digital/about/policies/whois-layered-access/. The Registrar of Record identified in this output may have an RDDS service that can be queried for additional information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. Identity Digital Inc. and Registry Operator reserve the right to modify these terms at any time. By submitting this query, you agree to abide by this policy.
\ No newline at end of file
diff --git a/tests/fixtures/alldomains.com.txt b/tests/fixtures/alldomains.com.txt
new file mode 100644
index 00000000..bb5289fe
--- /dev/null
+++ b/tests/fixtures/alldomains.com.txt
@@ -0,0 +1,58 @@
+ Domain Name: ALLDOMAINS.COM
+ Registry Domain ID: 1895111_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.domain.com
+ Registrar URL: http://www.domain.com
+ Updated Date: 2023-09-13T14:02:18Z
+ Creation Date: 1996-06-13T04:00:00Z
+ Registry Expiry Date: 2029-06-12T04:00:00Z
+ Registrar: Domain.com - Network Solutions, LLC
+ Registrar IANA ID: 886
+ Registrar Abuse Contact Email: domain.operations@web.com
+ Registrar Abuse Contact Phone: +1.8003337680
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Name Server: NS1.ALLDOMAINS.COM
+ Name Server: NS2.ALLDOMAINS.COM
+ Name Server: NS3.ALLDOMAINS.COM
+ Name Server: NS4.ALLDOMAINS.COM
+ Name Server: NS5.ALLDOMAINS.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/antiquea.com.txt b/tests/fixtures/antiquea.com.txt
new file mode 100644
index 00000000..f37c2be3
--- /dev/null
+++ b/tests/fixtures/antiquea.com.txt
@@ -0,0 +1,53 @@
+ Domain Name: ANTIQUEA.COM
+ Registry Domain ID: 2218343949_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.web.com
+ Registrar URL: http://www.networksolutions.com
+ Updated Date: 2025-02-28T03:18:52Z
+ Creation Date: 2018-01-25T19:11:12Z
+ Registry Expiry Date: 2026-01-25T19:11:12Z
+ Registrar: SNAPNAMES 1, LLC
+ Registrar IANA ID: 708
+ Registrar Abuse Contact Email: abuse@web.com
+ Registrar Abuse Contact Phone: +1.8003337680
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: NS1.AFTERNIC.COM
+ Name Server: NS2.AFTERNIC.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/arnes.si.txt b/tests/fixtures/arnes.si.txt
new file mode 100644
index 00000000..0db05508
--- /dev/null
+++ b/tests/fixtures/arnes.si.txt
@@ -0,0 +1,52 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is ARNES whois database
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Rights restricted by copyright.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The WHOIS service offered by Arnes, .si Registry, is
+% provided for information purposes only. It allows persons
+% to check whether a specific domain name is still available
+% or not and to obtain information related to the registration
+% records of existing domain names.
+%
+% This WHOIS service accepts and displays only ASCII characters.
+
+% By submitting a query to our WHOIS lookup service, you agree
+% to the restrictions on the use of WHOIS and WHOIS data as follows:
+% o You may not allow, enable or otherwise support
+% the transmission of unsolicited, commercial advertising
+% or other solicitations, whether via email or otherwise;
+% o You may not use the information to target advertising
+% in any possible way;
+% o You may not cause inconvenience the domain name holders
+% in any possible way by sending them messages
+% (whether by automated, electronic processes capable of
+% enabling high volumes or other possible means);
+% o You may not copy, extract and/or publish contents
+% of the WHOIS database.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+domain: arnes.si
+registrar: Arnes
+registrar-url: https://www.arnes.si/organizacije/#domene-si
+nameserver: nanos.arnes.si (193.2.1.105)
+nameserver: niobe.ijs.si (193.2.4.24,2001:1470:ff80::24)
+nameserver: ns4.arnes.eu
+nameserver: ns8.arnes.eu
+nameserver: si-ns.anycast.pch.net
+nameserver: aa.arnes.si (193.2.1.87,2001:1470:8000::87)
+registrant: G31071
+status: ok
+created: 1992-01-01
+expire: 2026-06-06
+source: ARNES
+
+Domain holder:
+NOT DISCLOSED
+
+Tech:
+NOT DISCLOSED
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Full domain details are available here http://www.registry.si
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ No newline at end of file
diff --git a/tests/fixtures/ascio.com.txt b/tests/fixtures/ascio.com.txt
new file mode 100644
index 00000000..192d1cd6
--- /dev/null
+++ b/tests/fixtures/ascio.com.txt
@@ -0,0 +1,56 @@
+ Domain Name: ASCIO.COM
+ Registry Domain ID: 6919846_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.ascio.com
+ Registrar URL: http://www.ascio.com
+ Updated Date: 2025-06-01T07:12:34Z
+ Creation Date: 1999-05-31T10:46:31Z
+ Registry Expiry Date: 2026-05-31T10:47:06Z
+ Registrar: Ascio Technologies, Inc. Danmark - Filial af Ascio technologies, Inc. USA
+ Registrar IANA ID: 106
+ Registrar Abuse Contact Email: abuse@ascio.com
+ Registrar Abuse Contact Phone: +1.4165350123
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+ Name Server: NS1.TUCOWS.COM
+ Name Server: NS2.TUCOWS.COM
+ Name Server: NS3.TUCOWS.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/berkeley.edu.txt b/tests/fixtures/berkeley.edu.txt
new file mode 100644
index 00000000..b61a25c7
--- /dev/null
+++ b/tests/fixtures/berkeley.edu.txt
@@ -0,0 +1,60 @@
+This Registry database contains ONLY .EDU domains.
+The data in the EDUCAUSE Whois database is provided
+by EDUCAUSE for information purposes in order to
+assist in the process of obtaining information about
+or related to .edu domain registration records.
+
+The EDUCAUSE Whois database is authoritative for the
+.EDU domain.
+
+A Web interface for the .EDU EDUCAUSE Whois Server is
+available at: http://whois.educause.edu
+
+By submitting a Whois query, you agree that this information
+will not be used to allow, enable, or otherwise support
+the transmission of unsolicited commercial advertising or
+solicitations via e-mail. The use of electronic processes to
+harvest information from this server is generally prohibited
+except as reasonably necessary to register or modify .edu
+domain names.
+
+-------------------------------------------------------------
+
+Domain Name: BERKELEY.EDU
+
+Registrant:
+ University of California at Berkeley
+ Information Services & Technology
+ Telecommunications - 2484 Shattuck #4894
+ Berkeley, CA 94720-4894
+ USA
+
+Administrative Contact:
+ Domain Admin
+ University of California at Berkeley
+ Information Services & Technology
+ Telecommunications - 2484 Shattuck #4894
+ Berkeley, CA 94720-4894
+ USA
+ +1.5106649000
+ noc@berkeley.edu
+
+Technical Contact:
+ Domain Admin
+ University of California at Berkeley
+ Information Services & Technology
+ Telecommunications - 2484 Shattuck #4894
+ Berkeley, CA 94720-4894
+ USA
+ +1.5106649000
+ noc@berkeley.edu
+
+Name Servers:
+ ADNS1.BERKELEY.EDU
+ ADNS2.BERKELEY.EDU
+ ADNS3.BERKELEY.EDU
+
+Domain record activated: 24-Apr-1985
+Domain record last updated: 11-Sep-2025
+Domain expires: 31-Jul-2027
+
\ No newline at end of file
diff --git a/tests/fixtures/blaueskreuz.ch.txt b/tests/fixtures/blaueskreuz.ch.txt
new file mode 100644
index 00000000..e5d3a2de
--- /dev/null
+++ b/tests/fixtures/blaueskreuz.ch.txt
@@ -0,0 +1,10 @@
+Lookup - Internet Domains
+EN DEFRITToggle navigationInternet DomainsLookupRegistrarsLegal InfoSecuritySupportStatisticsAbout UsEN DEFRITDomain Name Lookup
+Check availability of .ch domain namesLookupRDAPDomain CheckInformation ServiceRequest for informationRequest for information by authoritiesDomain Name Lookup
+
+Is the domain name you want still available? Who is the registrar of a registered domain name? You can check the registration of domain names with the endings .ch and .li here. For .li, enter the domain name including the extension. If the domain name is registered you will see the registrar and technical information.
+Examples: switch.ch - admin.ch Javascript must be activated to use the Domain Name Search. .chlook up×Security questionPlease enter the characters displayed below in the input field.look up
+The Domain Name Lookup is subject to the provisions of our Acceptable Use Policy.
+Please note: Since 1 January 2021, personal data associated with registered domain names is no longer disclosed. Information about holders of domain names can only be obtained in exceptional cases. More infoLookupRDAPDomain CheckInformation ServiceRequest for informationRequest for information by authoritiesRegistrars for .ch
+
+Registering new .ch domain names: Please select a registrar. Domain names that are already registered: Please contact the registrar administering your domain name for any changes.List of all registrarsLegal noticeImprint© 2025 for content at Switchvar _paq = _paq || [];_paq.push(['trackPageView']);_paq.push(['enableLinkTracking']);(function() {var u=(("https:" == document.location.protocol) ? "https" : "http") + "://www.switch.ch/tracker/";_paq.push(['setTrackerUrl', u+'piwik.php']);_paq.push(['setSiteId', 2]);var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript';g.defer=true; g.async=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);})();
diff --git a/tests/fixtures/buydomains.com.txt b/tests/fixtures/buydomains.com.txt
new file mode 100644
index 00000000..f0e81af0
--- /dev/null
+++ b/tests/fixtures/buydomains.com.txt
@@ -0,0 +1,54 @@
+ Domain Name: BUYDOMAINS.COM
+ Registry Domain ID: 3034762_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.domainadministration.com
+ Registrar URL: http://www.domainadministration.com
+ Updated Date: 2021-11-16T20:20:47Z
+ Creation Date: 1997-03-30T05:00:00Z
+ Registry Expiry Date: 2029-03-31T04:00:00Z
+ Registrar: DomainAdministration.com, LLC
+ Registrar IANA ID: 996
+ Registrar Abuse Contact Email: domain.operations@web.com
+ Registrar Abuse Contact Phone: +1.8777228662
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: LEE.NS.CLOUDFLARE.COM
+ Name Server: SARAH.NS.CLOUDFLARE.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/china.cn.txt b/tests/fixtures/china.cn.txt
new file mode 100644
index 00000000..93d78243
--- /dev/null
+++ b/tests/fixtures/china.cn.txt
@@ -0,0 +1,15 @@
+Domain Name: china.cn
+ROID: 20030310s10001s00012979-cn
+Domain Status: ok
+Registrant: 中国互联网新闻中心
+Registrant Contact Email: songzh@china.org.cn
+Sponsoring Registrar: 北京国科云计算技术有限公司(原北京中科三方网络技术有限公司)
+Name Server: cl1.sfndns.cn
+Name Server: cl2.sfndns.cn
+Name Server: cl1.sfndns.com
+Name Server: cl2.sfndns.com
+Name Server: ns1.china.org.cn
+Name Server: ns1.china-online.com.cn
+Registration Time: 2003-03-10 19:06:46
+Expiration Time: 2028-05-08 17:08:03
+DNSSEC: unsigned
\ No newline at end of file
diff --git a/tests/fixtures/cira.ca.txt b/tests/fixtures/cira.ca.txt
new file mode 100644
index 00000000..5727c4c2
--- /dev/null
+++ b/tests/fixtures/cira.ca.txt
@@ -0,0 +1,84 @@
+Domain Name: cira.ca
+Registry Domain ID: D436-CIRA
+Registrar WHOIS Server: whois.ca.fury.ca
+Registrar URL: http://www.cira.ca
+Updated Date: 2025-11-06T15:32:19Z
+Creation Date: 1998-02-05T05:00:00Z
+Registry Expiry Date: 2050-02-05T05:00:00Z
+Registrar: CIRA Default Registrar
+Registrar IANA ID: not applicable
+Registrar Abuse Contact Email:
+Registrar Abuse Contact Phone:
+Registrar Abuse Contact Phone Ext:
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Registry Registrant ID: R101-CIRA
+Registrant Name: Spencer Callaghan
+Registrant Organization: Canadian Internet Registration Authority (NFP) / Autorité Canadienne pour les enregistrements Internet (OSBL)
+Registrant Street: 319 McRae Avenue, Suite 700
+Registrant City: Ottawa
+Registrant State/Province: ON
+Registrant Postal Code: K1Z0B9
+Registrant Country: CA
+Registrant Phone: +1.6132375335
+Registrant Phone Ext:
+Registrant Fax:
+Registrant Fax Ext:
+Registrant Email: domains@cira.ca
+Registry Admin ID: C847977-CIRA
+Admin Name: Spencer Callaghan
+Admin Organization: CIRA
+Admin Street: Canadian Internet Registration Authority, 319 McRae Avenue, Suite 700
+Admin City: Ottawa
+Admin State/Province: ON
+Admin Postal Code: K1Z0B9
+Admin Country: CA
+Admin Phone: +1.6132375335
+Admin Phone Ext:
+Admin Fax:
+Admin Fax Ext:
+Admin Email: domains@cira.ca
+Registry Tech ID: C858875-CIRA
+Tech Name: Address Reply To
+Tech Organization:
+Tech Street: 319 McRae Avenue, Suite 700
+Tech City: Ottawa
+Tech State/Province: ON
+Tech Postal Code: K1Z0B9
+Tech Country: CA
+Tech Phone: +1.6132375335
+Tech Phone Ext:
+Tech Fax:
+Tech Fax Ext:
+Tech Email: domains@cira.ca
+Registry Billing ID:
+Billing Name:
+Billing Organization:
+Billing Street:
+Billing City:
+Billing State/Province:
+Billing Postal Code:
+Billing Country:
+Billing Phone:
+Billing Phone Ext:
+Billing Fax:
+Billing Fax Ext:
+Billing Email:
+Name Server: ns1.d-zone.ca
+Name Server: ns2.d-zone.ca
+Name Server: ns3.cira.ca
+Name Server: ns4.cira.ca
+DNSSEC: signedDelegation
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2025-12-08T10:37:53Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+%
+% Use of CIRA's WHOIS service is governed by the Terms of Use in its Legal
+% Notice, available at https://www.cira.ca/en/resources/documents/about/website-terms-use
+%
+% (c) 2025 Canadian Internet Registration Authority, (http://www.cira.ca/)
\ No newline at end of file
diff --git a/tests/fixtures/cityescape.ph.txt b/tests/fixtures/cityescape.ph.txt
new file mode 100644
index 00000000..99e97e33
--- /dev/null
+++ b/tests/fixtures/cityescape.ph.txt
@@ -0,0 +1,48 @@
+% IANA WHOIS server
+% for more information on IANA, visit http://www.iana.org
+% This query returned 1 object
+
+refer:
+
+domain: PH
+
+organisation: PH Domain Foundation
+address: 27/F Jollibee Plaza
+address: F. Ortigas Ave. Ortigas Center
+address: Pasig Metro Manila 1600
+address: Philippines (the)
+
+contact: administrative
+name: DOTPH Administrative Contact
+organisation: DotPH
+address: Room 1101, 11/F, Tai Yau Building
+address: 181 Johnston Road
+address: Wanchai
+address: Hong Kong
+phone: +85258033011
+e-mail: admin@dot.ph
+
+contact: technical
+name: DOTPH Technical Contact
+organisation: DotPH
+address: Room 1101, 11/F, Tai Yau Building
+address: 181 Johnston Road
+address: Wanchai
+address: Hong Kong
+phone: +639088698750
+e-mail: sysadmin@dot.ph
+
+nserver: 1.NS.PH 206.51.255.1 2620:171:805:ad2:7068:0:0:1
+nserver: NS2.CUHK.EDU.HK 137.189.6.21 2405:3000:3:6:0:0:0:15
+nserver: NS4.APNIC.NET 2001:dd8:12:0:0:0:0:53 202.12.31.53
+nserver: PH.COMMUNITYDNS.NET 194.0.1.23 2001:678:4:0:0:0:0:17
+ds-rdata: 29122 13 2 0ed5c93074522f903dbb7fbad2866cbe7cb67f15f0e5b54013340b57c1bcd509
+
+whois:
+
+status: ACTIVE
+remarks: Registration information: http://dot.ph
+
+created: 1990-09-14
+changed: 2024-01-30
+source: IANA
diff --git a/tests/fixtures/corenic.com.txt b/tests/fixtures/corenic.com.txt
new file mode 100644
index 00000000..8c11295a
--- /dev/null
+++ b/tests/fixtures/corenic.com.txt
@@ -0,0 +1,56 @@
+ Domain Name: CORENIC.COM
+ Registry Domain ID: 1572100_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.corehub.net
+ Registrar URL: http://corehub.net
+ Updated Date: 2025-09-14T07:28:22Z
+ Creation Date: 1997-09-22T04:00:00Z
+ Registry Expiry Date: 2026-09-13T16:23:05Z
+ Registrar: COREhub, S.R.L.
+ Registrar IANA ID: 15
+ Registrar Abuse Contact Email: abuse@corehub.net
+ Registrar Abuse Contact Phone: +34935275235
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Name Server: DNS.GLOBVILL.DE
+ Name Server: NS2.KNIPP.DE
+ Name Server: NS3.KNIPP.DE
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/creart.ch.txt b/tests/fixtures/creart.ch.txt
new file mode 100644
index 00000000..e5d3a2de
--- /dev/null
+++ b/tests/fixtures/creart.ch.txt
@@ -0,0 +1,10 @@
+Lookup - Internet Domains
+EN DEFRITToggle navigationInternet DomainsLookupRegistrarsLegal InfoSecuritySupportStatisticsAbout UsEN DEFRITDomain Name Lookup
+Check availability of .ch domain namesLookupRDAPDomain CheckInformation ServiceRequest for informationRequest for information by authoritiesDomain Name Lookup
+
+Is the domain name you want still available? Who is the registrar of a registered domain name? You can check the registration of domain names with the endings .ch and .li here. For .li, enter the domain name including the extension. If the domain name is registered you will see the registrar and technical information.
+Examples: switch.ch - admin.ch Javascript must be activated to use the Domain Name Search. .chlook up×Security questionPlease enter the characters displayed below in the input field.look up
+The Domain Name Lookup is subject to the provisions of our Acceptable Use Policy.
+Please note: Since 1 January 2021, personal data associated with registered domain names is no longer disclosed. Information about holders of domain names can only be obtained in exceptional cases. More infoLookupRDAPDomain CheckInformation ServiceRequest for informationRequest for information by authoritiesRegistrars for .ch
+
+Registering new .ch domain names: Please select a registrar. Domain names that are already registered: Please contact the registrar administering your domain name for any changes.List of all registrarsLegal noticeImprint© 2025 for content at Switchvar _paq = _paq || [];_paq.push(['trackPageView']);_paq.push(['enableLinkTracking']);(function() {var u=(("https:" == document.location.protocol) ? "https" : "http") + "://www.switch.ch/tracker/";_paq.push(['setTrackerUrl', u+'piwik.php']);_paq.push(['setSiteId', 2]);var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript';g.defer=true; g.async=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);})();
diff --git a/tests/fixtures/create-fixture.bat b/tests/fixtures/create-fixture.bat
new file mode 100644
index 00000000..d7a16f0c
--- /dev/null
+++ b/tests/fixtures/create-fixture.bat
@@ -0,0 +1,3 @@
+@ECHO OFF
+whois %1 > %1.txt
+git add %1.txt
diff --git a/tests/fixtures/cscglobal.com.txt b/tests/fixtures/cscglobal.com.txt
new file mode 100644
index 00000000..95f95291
--- /dev/null
+++ b/tests/fixtures/cscglobal.com.txt
@@ -0,0 +1,58 @@
+ Domain Name: CSCGLOBAL.COM
+ Registry Domain ID: 149297886_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.corporatedomains.com
+ Registrar URL: http://cscdbs.com
+ Updated Date: 2025-03-30T05:12:38Z
+ Creation Date: 2005-04-03T23:15:45Z
+ Registry Expiry Date: 2026-04-03T23:15:45Z
+ Registrar: CSC Corporate Domains, Inc.
+ Registrar IANA ID: 299
+ Registrar Abuse Contact Email: domainabuse@cscglobal.com
+ Registrar Abuse Contact Phone: 8887802723
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+ Name Server: UDNS1.CSCUDNS.COM
+ Name Server: UDNS2.CSCUDNS.ORG
+ DNSSEC: signedDelegation
+ DNSSEC DS Data: 61513 13 2 662A1398C93E9B64CEEBDC3208B3B00C98A3C703739381A900FF6001B516053A
+ DNSSEC DS Data: 61513 13 1 3AC5D5A5C2909C3CB5C2E6D60713734B9B7B76AC
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/denic.de.txt b/tests/fixtures/denic.de.txt
new file mode 100644
index 00000000..e97eac84
--- /dev/null
+++ b/tests/fixtures/denic.de.txt
@@ -0,0 +1,25 @@
+% Restricted rights.
+%
+% Terms and Conditions of Use
+%
+% The above data may only be used within the scope of technical or
+% administrative necessities of Internet operation or to remedy legal
+% problems.
+% The use for other purposes, in particular for advertising, is not permitted.
+%
+% The DENIC whois service on port 43 doesn't disclose any information concerning
+% the domain holder, general request and abuse contact.
+% This information can be obtained through use of our web-based whois service
+% available at the DENIC website:
+% http://www.denic.de/en/domains/whois-service/web-whois.html
+%
+%
+
+Domain: denic.de
+Nserver: ns1.denic.de 77.67.63.106 2001:668:1f:11:0:0:0:106
+Nserver: ns2.denic.de 81.91.164.6 2a02:568:0:2:0:0:0:54
+Nserver: ns3.denic.de 195.243.137.27 2003:8:14:0:0:0:0:106
+Nserver: ns4.denic.net
+Dnskey: 257 3 8 AwEAAb/xrM2MD+xm84YNYby6TxkMaC6PtzF2bB9WBB7ux7iqzhViob4GKvQ6L7CkXjyAxfKbTzrdvXoAPpsAPW4pkThReDAVp3QxvUKrkBM8/uWRF3wpaUoPsAHm1dbcL9aiW3lqlLMZjDEwDfU6lxLcPg9d14fq4dc44FvPx6aYcymkgJoYvR6P1wECpxqlEAR2K1cvMtqCqvVESBQV/EUtWiALNuwR2PbhwtBWJd+e8BdFI7OLkit4uYYux6Yu35uyGQ==
+Status: connect
+Changed: 2024-12-19T13:33:43+01:00
\ No newline at end of file
diff --git a/tests/fixtures/directi.com.txt b/tests/fixtures/directi.com.txt
new file mode 100644
index 00000000..f186a439
--- /dev/null
+++ b/tests/fixtures/directi.com.txt
@@ -0,0 +1,57 @@
+ Domain Name: DIRECTI.COM
+ Registry Domain ID: 2488723_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.PublicDomainRegistry.com
+ Registrar URL: http://www.publicdomainregistry.com
+ Updated Date: 2025-09-03T14:59:12Z
+ Creation Date: 1997-08-11T04:00:00Z
+ Registry Expiry Date: 2026-09-24T23:23:52Z
+ Registrar: PDR Ltd. d/b/a PublicDomainRegistry.com
+ Registrar IANA ID: 303
+ Registrar Abuse Contact Email: abuse-contact@publicdomainregistry.com
+ Registrar Abuse Contact Phone: +1.2013775952
+ Domain Status: ok https://icann.org/epp#ok
+ Name Server: ASIA1.AKAM.NET
+ Name Server: EUR2.AKAM.NET
+ Name Server: EUR4.AKAM.NET
+ Name Server: EUR6.AKAM.NET
+ Name Server: USC4.AKAM.NET
+ Name Server: USC5.AKAM.NET
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/directnic.com.txt b/tests/fixtures/directnic.com.txt
new file mode 100644
index 00000000..0b393cd6
--- /dev/null
+++ b/tests/fixtures/directnic.com.txt
@@ -0,0 +1,59 @@
+ Domain Name: DIRECTNIC.COM
+ Registry Domain ID: 19525357_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.directnic.com
+ Registrar URL: http://www.directnic.com
+ Updated Date: 2024-11-15T23:28:48Z
+ Creation Date: 2000-02-09T23:22:12Z
+ Registry Expiry Date: 2027-02-09T23:22:12Z
+ Registrar: DNC Holdings, Inc.
+ Registrar IANA ID: 291
+ Registrar Abuse Contact Email: abuse@directnic.com
+ Registrar Abuse Contact Phone: +1.5043550081
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Name Server: NS1.DNSIMPLE.COM
+ Name Server: NS2.DNSIMPLE-EDGE.NET
+ Name Server: NS3.DNSIMPLE.COM
+ Name Server: NS4.DNSIMPLE-EDGE.ORG
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/dnc.org.nz.txt b/tests/fixtures/dnc.org.nz.txt
new file mode 100644
index 00000000..ccbbf03b
--- /dev/null
+++ b/tests/fixtures/dnc.org.nz.txt
@@ -0,0 +1,45 @@
+Domain Name: dnc.org.nz
+Registrar URL: https://dnc.org.nz
+Updated Date: 2025-11-22T11:02:44Z
+Creation Date: 2002-04-22T12:00:00Z
+Original Created: 2002-04-22T12:00:00Z
+Registrar: Domain Name Commission Limited
+Domain Status: ok https://icann.org/epp#ok
+Domain Status: autoRenewPeriod https://icann.org/epp#autoRenewPeriod
+Name Server: amy.ns.cloudflare.com
+Name Server: dom.ns.cloudflare.com
+DNSSEC: signedDelegation
+URL of the Domain Name Commission Limited Inaccuracy Complaint Form: https://dnc.org.nz/enquiry-form/
+>>> Last update of WHOIS database: 2025-11-30T17:08:52Z <<<
+
+% Terms of Use
+%
+% By submitting a WHOIS query you are entering into an agreement with Domain
+% Name Commission Ltd on the following terms and conditions, and subject to
+% all relevant .nz Policies and procedures as found at https://dnc.org.nz/.
+%
+% It is prohibited to:
+% - Send high volume WHOIS queries with the effect of downloading part of or
+% all of the .nz Register or collecting register data or records;
+% - Access the .nz Register in bulk through the WHOIS service (ie. where a
+% user is able to access WHOIS data other than by sending individual queries
+% to the database);
+% - Use WHOIS data to allow, enable, or otherwise support mass unsolicited
+% commercial advertising, or mass solicitations to registrants or to
+% undertake market research via direct mail, electronic mail, SMS, telephone
+% or any other medium;
+% - Use WHOIS data in contravention of any applicable data and privacy laws,
+% including the Unsolicited Electronic Messages Act 2007;
+% - Store or compile WHOIS data to build up a secondary register of
+% information;
+% - Publish historical or non-current versions of WHOIS data; and
+% - Publish any WHOIS data in bulk.
+%
+% Copyright Domain Name Commission Limited (a company wholly-owned by Internet
+% New Zealand Incorporated) which may enforce its rights against any person or
+% entity that undertakes any prohibited activity without its written
+% permission.
+%
+% The WHOIS service is provided by Internet New Zealand Incorporated.
+%
+% Additional information may be available at https://www.dnc.org.nz
\ No newline at end of file
diff --git a/tests/fixtures/dns.lu.txt b/tests/fixtures/dns.lu.txt
new file mode 100644
index 00000000..8536a4d0
--- /dev/null
+++ b/tests/fixtures/dns.lu.txt
@@ -0,0 +1,41 @@
+% Access to RESTENA DNS-LU WHOIS information is provided to assist persons
+% in determining the content of a domain name registration record in the LU
+% registration database. The data in this record is provided by RESTENA DNS-LU
+% for information purposes only, and RESTENA DNS-LU does not guarantee its
+% accuracy. Compilation, repackaging, dissemination or other use of the
+% WHOIS database in its entirety, or of a substantial part thereof, is not
+% allowed without the prior written permission of RESTENA DNS-LU.
+%
+% By submitting a WHOIS query, you agree to abide by this policy. You acknowledge
+% that the use of the WHOIS database is regulated by the ACCEPTABLE USE POLICY
+% (http://www.dns.lu/en/support/domainname-availability/whois-gateway/), that you are aware of its
+% content, and that you accept its terms and conditions.
+%
+% You agree especially that you will use this data only for lawful purposes and
+% that you will not use this data to:
+% (1) allow, enable, or otherwise support the transmission of mass unsolicited,
+% commercial advertising or solicitations via e-mail (spam); or
+% (2) enable high volume, automated, electronic processes that apply to
+% RESTENA DNS-LU (or its systems).
+%
+% All rights reserved.
+%
+% WHOIS dns.lu
+domainname: dns.lu
+domaintype: ACTIVE
+nserver: ns1.dns.lu [158.64.229.18,2001:a18:4:1::18]
+nserver: k.dns.lu [194.0.1.13,2001:678:4::d]
+nserver: i.dns.lu [194.146.106.66,2001:67c:1010:16::53]
+nserver: g.dns.lu [194.0.23.5,2001:678:1b:5::5]
+nserver: p.dns.lu [194.0.42.42,2001:678:60::42:42]
+ownertype: ORGANISATION
+org-country: LU
+registrar-name: Fondation Restena
+registrar-email: info@my.lu
+registrar-url: https://my.lu
+registrar-country: LU
+%
+% More details on the domain may be available at below whois-web URL.
+% Next to possible further data a form to contact domain operator or
+% request further details is available.
+whois-web: https://www.dns.lu/en/support/domainname-availability/whois-gateway/
diff --git a/tests/fixtures/dns.pt.txt b/tests/fixtures/dns.pt.txt
new file mode 100644
index 00000000..655a7b5a
--- /dev/null
+++ b/tests/fixtures/dns.pt.txt
@@ -0,0 +1,25 @@
+Domain: dns.pt
+Domain Status: Registered
+Creation Date: 03/10/1991 00:00:00
+Expiration Date: 31/12/2026 23:59:00
+Owner Name: Associação DNS.PT
+Owner Address: Rua Eça de Queirós 29
+Owner Locality: Lisboa
+Owner ZipCode: 1050-095
+Owner Locality ZipCode: LISBOA
+Owner Country Code: PT
+Owner Email: secretariado@pt.pt,request@pt.pt
+Admin Name: Associação DNS.PT
+Admin Address: Rua Eça de Queirós 29
+Admin Locality: Lisboa
+Admin ZipCode: 1050-095
+Admin Locality ZipCode: LISBOA
+Admin Country Code: PT
+Admin Email: secretariado@pt.pt,request@pt.pt
+Name Server: b.dns.pt | IPv4: 194.0.25.23 and IPv6: 2001:678:20::23
+Name Server: c.dns.pt | IPv4: 204.61.216.105 and IPv6: 2001:500:14:6105:ad::1
+Name Server: dns01.dns.pt | IPv4: 185.39.208.12 and IPv6: 2a04:6d80::12
+Name Server: dns02.dns.pt | IPv4: 185.39.209.4 and IPv6: 2a04:6d81::4
+Name Server: europe1.dnsnode.net | IPv4: and IPv6:
+Name Server: nsp.dnsnode.net | IPv4: and IPv6:
+dns.pt IN DS 13 2 8EFD52C77334BA92ACE2AA2940149934D229459AF6277F7324E1BC14ACB5C337
\ No newline at end of file
diff --git a/tests/fixtures/domain-registry.nl.txt b/tests/fixtures/domain-registry.nl.txt
new file mode 100644
index 00000000..392d54a4
--- /dev/null
+++ b/tests/fixtures/domain-registry.nl.txt
@@ -0,0 +1,25 @@
+Domain name: domain-registry.nl
+Status: active
+
+Registrar:
+ Stichting Internet Domeinregistratie Nederland
+ Meander 501
+ 6825MD Arnhem
+ Netherlands
+
+Abuse Contact:
+ +31.263525555
+ abuse@sidn.nl
+
+DNSSEC: yes
+
+Domain nameservers:
+ ns5.sidn.nl
+ ns4.sidn.nl
+ ns3.sidn.nl
+
+Creation Date: 1994-09-29
+
+Updated Date: 2025-02-07
+
+Record maintained by: SIDN BV
\ No newline at end of file
diff --git a/tests/fixtures/domain.me.txt b/tests/fixtures/domain.me.txt
new file mode 100644
index 00000000..368b83a8
--- /dev/null
+++ b/tests/fixtures/domain.me.txt
@@ -0,0 +1,63 @@
+Domain Name: domain.me
+Registry Domain ID: REDACTED
+Registrar WHOIS Server: whois.godaddy.com
+Registrar URL: http://www.godaddy.com/domains/search.aspx?ci=8990
+Updated Date: 2025-10-03T12:39:08Z
+Creation Date: 2008-04-29T17:53:06Z
+Registry Expiry Date: 2026-04-29T17:53:06Z
+Registrar: GoDaddy.com, LLC
+Registrar IANA ID: 146
+Registrar Abuse Contact Email: abuse@godaddy.com
+Registrar Abuse Contact Phone: +1.4806242505
+Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Registry Registrant ID: REDACTED
+Registrant Name: REDACTED
+Registrant Organization: Domains By Proxy, LLC
+Registrant Street: REDACTED
+Registrant City: REDACTED
+Registrant State/Province: Arizona
+Registrant Postal Code: REDACTED
+Registrant Country: US
+Registrant Phone: REDACTED
+Registrant Phone Ext: REDACTED
+Registrant Fax: REDACTED
+Registrant Fax Ext: REDACTED
+Registrant Email: REDACTED
+Registry Admin ID: REDACTED
+Admin Name: REDACTED
+Admin Organization: REDACTED
+Admin Street: REDACTED
+Admin City: REDACTED
+Admin State/Province: REDACTED
+Admin Postal Code: REDACTED
+Admin Country: REDACTED
+Admin Phone: REDACTED
+Admin Phone Ext: REDACTED
+Admin Fax: REDACTED
+Admin Fax Ext: REDACTED
+Admin Email: REDACTED
+Registry Tech ID: REDACTED
+Tech Name: REDACTED
+Tech Organization: REDACTED
+Tech Street: REDACTED
+Tech City: REDACTED
+Tech State/Province: REDACTED
+Tech Postal Code: REDACTED
+Tech Country: REDACTED
+Tech Phone: REDACTED
+Tech Phone Ext: REDACTED
+Tech Fax: REDACTED
+Tech Fax Ext: REDACTED
+Tech Email: REDACTED
+Name Server: pdns07.domaincontrol.com
+Name Server: pdns08.domaincontrol.com
+DNSSEC: signedDelegation
+URL of the ICANN Whois Inaccuracy Complaint Form: https://icann.org/wicf/
+>>> Last update of WHOIS database: 2025-11-30T17:10:08Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+Terms of Use: Access to WHOIS information is provided to assist persons in determining the contents of a domain name registration record in the registry database. The data in this record is provided by Identity Digital or the Registry Operator for informational purposes only, and accuracy is not guaranteed. This service is intended only for query-based access. You agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data to (a) allow, enable, or otherwise support the transmission by e-mail, telephone, or facsimile of mass unsolicited, commercial advertising or solicitations to entities other than the data recipient's own existing customers; or (b) enable high volume, automated, electronic processes that send queries or data to the systems of Registry Operator, a Registrar, or Identity Digital except as reasonably necessary to register domain names or modify existing registrations. When using the Whois service, please consider the following: The Whois service is not a replacement for standard EPP commands to the SRS service. Whois is not considered authoritative for registered domain objects. The Whois service may be scheduled for downtime during production or OT&E maintenance periods. Queries to the Whois services are throttled. If too many queries are received from a single IP address within a specified time, the service will begin to reject further queries for a period of time to prevent disruption of Whois service access. Abuse of the Whois system through data mining is mitigated by detecting and limiting bulk query access from single sources. Where applicable, the presence of a [Non-Public Data] tag indicates that such data is not made publicly available due to applicable data privacy laws or requirements. Should you wish to contact the registrant, please refer to the Whois records available through the registrar URL listed above. Access to non-public data may be provided, upon request, where it can be reasonably confirmed that the requester holds a specific legitimate interest and a proper legal basis for accessing the withheld data. Access to this data provided by Identity Digital can be requested by submitting a request via the form found at https://www.identity.digital/about/policies/whois-layered-access/. The Registrar of Record identified in this output may have an RDDS service that can be queried for additional information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. Identity Digital Inc. and Registry Operator reserve the right to modify these terms at any time. By submitting this query, you agree to abide by this policy.
\ No newline at end of file
diff --git a/tests/fixtures/domainbank.com.txt b/tests/fixtures/domainbank.com.txt
new file mode 100644
index 00000000..250f66e4
--- /dev/null
+++ b/tests/fixtures/domainbank.com.txt
@@ -0,0 +1,55 @@
+ Domain Name: DOMAINBANK.COM
+ Registry Domain ID: 1666737_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.domain.com
+ Registrar URL: http://www.domain.com
+ Updated Date: 2025-06-28T04:15:19Z
+ Creation Date: 1998-07-28T04:00:00Z
+ Registry Expiry Date: 2026-07-27T04:00:00Z
+ Registrar: Domain.com - Network Solutions, LLC
+ Registrar IANA ID: 886
+ Registrar Abuse Contact Email: domain.operations@web.com
+ Registrar Abuse Contact Phone: +1.8003337680
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Name Server: DNS1.DOMAINBANK.COM
+ Name Server: DNS2.DOMAINBANK.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/domaincontender.com.txt b/tests/fixtures/domaincontender.com.txt
new file mode 100644
index 00000000..3daf5a87
--- /dev/null
+++ b/tests/fixtures/domaincontender.com.txt
@@ -0,0 +1,57 @@
+ Domain Name: DOMAINCONTENDER.COM
+ Registry Domain ID: 103253789_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.directnic.com
+ Registrar URL: http://www.directnic.com
+ Updated Date: 2025-07-25T07:05:16Z
+ Creation Date: 2003-09-08T17:56:46Z
+ Registry Expiry Date: 2026-09-08T17:56:46Z
+ Registrar: DNC Holdings, Inc.
+ Registrar IANA ID: 291
+ Registrar Abuse Contact Email: abuse@directnic.com
+ Registrar Abuse Contact Phone: +1.5043550081
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Name Server: NS1.ANYDNS.COM
+ Name Server: NS2.ANYDNS.COM
+ Name Server: NS3.ANYDNS.COM
+ Name Server: NS4.ANYDNS.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/domainpeople.com.txt b/tests/fixtures/domainpeople.com.txt
new file mode 100644
index 00000000..33da9dbd
--- /dev/null
+++ b/tests/fixtures/domainpeople.com.txt
@@ -0,0 +1,53 @@
+ Domain Name: DOMAINPEOPLE.COM
+ Registry Domain ID: 13313640_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.domainpeople.com
+ Registrar URL: http://www.domainpeople.com
+ Updated Date: 2025-06-09T17:15:02Z
+ Creation Date: 1999-11-16T14:09:52Z
+ Registry Expiry Date: 2027-11-16T14:09:52Z
+ Registrar: DomainPeople, Inc.
+ Registrar IANA ID: 65
+ Registrar Abuse Contact Email: abuse@domainpeople.com
+ Registrar Abuse Contact Phone: +1.8664678929
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: NS1.SOLVPS.COM
+ Name Server: NS2.SOLVPS.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/domainregistry.ie.txt b/tests/fixtures/domainregistry.ie.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/fixtures/domains.coop.txt b/tests/fixtures/domains.coop.txt
new file mode 100644
index 00000000..6f271e1c
--- /dev/null
+++ b/tests/fixtures/domains.coop.txt
@@ -0,0 +1,62 @@
+Domain Name: domains.coop
+Registry Domain ID: D7881481-CNIC
+Registrar WHOIS Server: http://whois.domains.coop/
+Registrar URL: http://www.domains.coop/
+Updated Date: 2024-06-02T14:29:00.967Z
+Creation Date: 2002-07-09T10:21:51.000Z
+Registry Expiry Date: 2029-07-09T23:59:59.000Z
+Registrar: Domains.coop Limited
+Registrar IANA ID: 465
+Registrar Abuse Contact Email: violetta@domains.coop
+Registrar Abuse Contact Phone: +44.1865403136
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Registry Registrant ID: REDACTED FOR PRIVACY
+Registrant Name: REDACTED FOR PRIVACY
+Registrant Organization: Domains.coop Limited
+Registrant Street: REDACTED FOR PRIVACY
+Registrant City: REDACTED FOR PRIVACY
+Registrant State/Province: Oxfordshire
+Registrant Postal Code: REDACTED FOR PRIVACY
+Registrant Country: GB
+Registrant Phone: REDACTED FOR PRIVACY
+Registrant Fax: REDACTED FOR PRIVACY
+Registrant Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Name Server: ns0.centralnic-dns.com
+Name Server: ns1.centralnic-dns.com
+Name Server: ns2.centralnic-dns.com
+Name Server: ns3.centralnic-dns.com
+Name Server: ns4.centralnic-dns.com
+Name Server: ns5.centralnic-dns.com
+DNSSEC: unsigned
+URL of the ICANN RDDS Inaccuracy Complaint Form: https://icann.org/wicf
+
+>>> Last update of WHOIS database: 2025-11-30T17:10:03.239Z <<<
+
+For more information on domain status codes, please visit https://icann.org/epp
+
+The WHOIS information provided in this page has been redacted
+in compliance with ICANN's Temporary Specification for gTLD
+Registration Data.
+
+The data in this record is provided by Tucows Registry for informational
+purposes only, and it does not guarantee its accuracy. Tucows Registry is
+authoritative for whois information in top-level domains it operates
+under contract with the Internet Corporation for Assigned Names and
+Numbers. Whois information from other top-level domains is provided by
+a third-party under license to Tucows Registry.
+
+This service is intended only for query-based access. By using this
+service, you agree that you will use any data presented only for lawful
+purposes and that, under no circumstances will you use (a) data
+acquired for the purpose of allowing, enabling, or otherwise supporting
+the transmission by e-mail, telephone, facsimile or other
+communications mechanism of mass unsolicited, commercial advertising
+or solicitations to entities other than your existing customers; or
+(b) this service to enable high volume, automated, electronic processes
+that send queries or data to the systems of any Registrar or any
+Registry except as reasonably necessary to register domain names or
+modify existing domain name registrations.
+
+Tucows Registry reserves the right to modify these terms at any time. By
+submitting this query, you agree to abide by this policy. All rights
+reserved.
\ No newline at end of file
diff --git a/tests/fixtures/domains.london.txt b/tests/fixtures/domains.london.txt
new file mode 100644
index 00000000..f8ea557f
--- /dev/null
+++ b/tests/fixtures/domains.london.txt
@@ -0,0 +1,79 @@
+Connecting to LONDON.whois-servers.net...
+
+WHOIS Server:
+Registrar URL:
+Updated Date: 2020-02-16T06:17:51Z
+Creation Date: 2015-02-23T15:30:07Z
+Registry Expiry Date: 2021-02-23T15:30:07Z
+Registrar: Mesh Digital Limited
+Registrar IANA ID: 1390
+Registrar Abuse Contact Email: primary.contact@hosteuropegroup.comm
+Registrar Abuse Contact Phone: +44.1483304030
+Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Registry Registrant ID: REDACTED FOR PRIVACY
+Registrant Name: REDACTED FOR PRIVACY
+Registrant Organization: REDACTED FOR PRIVACY
+Registrant Street: REDACTED FOR PRIVACY
+Registrant Street: REDACTED FOR PRIVACY
+Registrant Street: REDACTED FOR PRIVACY
+Registrant City: REDACTED FOR PRIVACY
+Registrant State/Province: London
+Registrant Postal Code: REDACTED FOR PRIVACY
+Registrant Country: GB
+Registrant Phone: REDACTED FOR PRIVACY
+Registrant Fax: REDACTED FOR PRIVACY
+Registrant Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Registry Admin ID: REDACTED FOR PRIVACY
+Admin Name: REDACTED FOR PRIVACY
+Admin Organization: REDACTED FOR PRIVACY
+Admin Street: REDACTED FOR PRIVACY
+Admin Street: REDACTED FOR PRIVACY
+Admin Street: REDACTED FOR PRIVACY
+Admin City: REDACTED FOR PRIVACY
+Admin State/Province: REDACTED FOR PRIVACY
+Admin Postal Code: REDACTED FOR PRIVACY
+Admin Country: REDACTED FOR PRIVACY
+Admin Phone: REDACTED FOR PRIVACY
+Admin Fax: REDACTED FOR PRIVACY
+Admin Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Registry Tech ID: REDACTED FOR PRIVACY
+Tech Name: REDACTED FOR PRIVACY
+Tech Organization: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech City: REDACTED FOR PRIVACY
+Tech State/Province: REDACTED FOR PRIVACY
+Tech Postal Code: REDACTED FOR PRIVACY
+Tech Country: REDACTED FOR PRIVACY
+Tech Phone: REDACTED FOR PRIVACY
+Tech Fax: REDACTED FOR PRIVACY
+Tech Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Registry Billing ID: REDACTED FOR PRIVACY
+Billing Name: REDACTED FOR PRIVACY
+Billing Organization: REDACTED FOR PRIVACY
+Billing Street: REDACTED FOR PRIVACY
+Billing Street: REDACTED FOR PRIVACY
+Billing Street: REDACTED FOR PRIVACY
+Billing City: REDACTED FOR PRIVACY
+Billing State/Province: REDACTED FOR PRIVACY
+Billing Postal Code: REDACTED FOR PRIVACY
+Billing Country: REDACTED FOR PRIVACY
+Billing Phone: REDACTED FOR PRIVACY
+Billing Fax: REDACTED FOR PRIVACY
+Billing Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Name Server: ns1.dreamhost.com.
+Name Server: ns3.dreamhost.com.
+Name Server: ns2.dreamhost.com.
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2020-05-31T16:09:59Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+Terms and Conditions
+The whois information provided on this site is intended to provide you with the relevant contact information for a domain name registrant and the identity of certain administrative and technical contacts associated with that domain name. The data in this record is provided by Minds + Machines Registry, a subsidiary of Minds + Machines Group Limited, formerly Top Level Domain Holdings Limited ("the Company"), for informational purposes only. Accuracy is not guaranteed. The Company is the authoritative source for whois information in top-level domains it operates under contract with the Internet Corporation for Assigned Names and Numbers. This service is intended only for query-based access. Note that the lack of a whois record for a particular domain does not indicate that the name is available for registration. By using this service, you agree that you will use any data presented for lawful purposes only and that under no circumstances will you use (a) data acquired for the purpose of allowing, enabling, or otherwise supporting the transmission by email, telephone, facsimile, or other communications mechanisms mass unsolicited, commercial, advertising, or solicitations to entities other than your existing customers; or (b) this service to enable high volume, automated, electronic processes that send queries or data to the systems of any registrar or any registry except as reasonably necessary to register domain names or to modify existing domain name registrations. The Company reserves the right to modify these terms at any time. By submitting this query, you agree to abide by this policy. All rights reserved.
+
+Connecting to ...
diff --git a/tests/fixtures/domaintools.com.txt b/tests/fixtures/domaintools.com.txt
new file mode 100644
index 00000000..b01ade85
--- /dev/null
+++ b/tests/fixtures/domaintools.com.txt
@@ -0,0 +1,55 @@
+ Domain Name: DOMAINTOOLS.COM
+ Registry Domain ID: 1697312_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.enom.com
+ Registrar URL: http://www.enomdomains.com
+ Updated Date: 2020-01-09T23:06:29Z
+ Creation Date: 1998-08-02T04:00:00Z
+ Registry Expiry Date: 2027-08-01T04:00:00Z
+ Registrar: eNom, LLC
+ Registrar IANA ID: 48
+ Registrar Abuse Contact Email: abuse@enom.com
+ Registrar Abuse Contact Phone: +1.4165350123
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: DNS1.P04.NSONE.NET
+ Name Server: DNS2.P04.NSONE.NET
+ Name Server: DNS3.P04.NSONE.NET
+ Name Server: DNS4.P04.NSONE.NET
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/dominis.cat.txt b/tests/fixtures/dominis.cat.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/fixtures/domreg.lt.txt b/tests/fixtures/domreg.lt.txt
new file mode 100644
index 00000000..8f20a5fe
--- /dev/null
+++ b/tests/fixtures/domreg.lt.txt
@@ -0,0 +1,36 @@
+% Hello, this is the DOMREG whois service.
+%
+% By submitting a query you agree not to use the information made
+% available to:
+% - allow, enable or otherwise support the transmission of unsolicited,
+% commercial advertising or other solicitations whether via email or
+% otherwise;
+% - target advertising in any possible way;
+% - to cause nuisance in any possible way to the registrants by sending
+% (whether by automated, electronic processes capable of enabling
+% high volumes or other possible means) messages to them.
+%
+% Version 0.4
+%
+% For more information please visit https://whois.lt
+%
+Domain: domreg.lt
+Status: registered
+Registered: 1999-10-17
+Expires: 2026-10-17
+%
+Registrar: Kauno technologijos universitetas
+Registrar website: https://www.domains.lt
+Registrar email: hostmaster@domains.lt
+%
+Contact organization: Kauno technologijos universitetas
+Contact email: hostmaster@domreg.lt
+%
+Contact organization: Kauno technologijos universitetas Informacinių technologijų departamentas
+Contact email: tomas@domreg.lt
+%
+Nameserver: ns1.domreg.lt [185.150.40.44 2a07:ab40::44]
+Nameserver: ns2.domreg.lt [83.171.8.8 2001:778:0:8::8]
+Nameserver: nsa.domreg.lt [185.150.42.1 2a07:ab42::1]
+%
+DS: 16058 13 2 394180ADA8735B74D6D08679CC961DA41559D311F9BC1D704E1714B2C4B5EC1B
\ No newline at end of file
diff --git a/tests/fixtures/dot.fm.txt b/tests/fixtures/dot.fm.txt
new file mode 100644
index 00000000..040413ce
--- /dev/null
+++ b/tests/fixtures/dot.fm.txt
@@ -0,0 +1,41 @@
+Domain Name: DOT.FM
+Registry Domain ID: D34854269-CNIC
+Registrar WHOIS Server: whois.nic.fm
+Registrar URL: https://brsmedia.fm
+Updated Date: 2023-08-31T16:50:32.0Z
+Creation Date: 1998-06-16T23:59:59.0Z
+Registry Expiry Date: 2099-04-29T23:59:59.0Z
+Registrar: BRS Media Inc.
+Registrar IANA ID: 9999
+Domain Status: ok https://icann.org/epp#ok
+Registrant Email: https://whois.nic.fm/contact/dot.fm/registrant
+Tech Email: https://whois.nic.fm/contact/dot.fm/tech
+Name Server: NS3.IDNZ.NET
+Name Server: NS1.IDNZ.NET
+Name Server: NS2.IDNZ.NET
+DNSSEC: unsigned
+Registrar Abuse Contact Email: registry@brsmedia.com
+Registrar Abuse Contact Phone: +1.4156774027
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2025-11-30T17:08:21.0Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+>>> IMPORTANT INFORMATION ABOUT THE DEPLOYMENT OF RDAP: please visit
+https://www.centralnicregistry.com/support/information/rdap <<<
+
+The registration data available in this service is limited. Additional
+data may be available at https://lookup.icann.org
+
+The Whois and RDAP services are provided by CentralNic, and contain
+information pertaining to Internet domain names registered by our
+our customers. By using this service you are agreeing (1) not to use any
+information presented here for any purpose other than determining
+ownership of domain names, (2) not to store or reproduce this data in
+any way, (3) not to use any high-volume, automated, electronic processes
+to obtain data from this service. Abuse of this service is monitored and
+actions in contravention of these terms will result in being permanently
+blacklisted. All data is (c) CentralNic Ltd (https://www.centralnicregistry.com)
+
+Access to the Whois and RDAP services is rate limited. For more
+information, visit https://centralnicregistry.com/policies/whois-guidance.
\ No newline at end of file
diff --git a/tests/fixtures/dot.ph.txt b/tests/fixtures/dot.ph.txt
new file mode 100644
index 00000000..99e97e33
--- /dev/null
+++ b/tests/fixtures/dot.ph.txt
@@ -0,0 +1,48 @@
+% IANA WHOIS server
+% for more information on IANA, visit http://www.iana.org
+% This query returned 1 object
+
+refer:
+
+domain: PH
+
+organisation: PH Domain Foundation
+address: 27/F Jollibee Plaza
+address: F. Ortigas Ave. Ortigas Center
+address: Pasig Metro Manila 1600
+address: Philippines (the)
+
+contact: administrative
+name: DOTPH Administrative Contact
+organisation: DotPH
+address: Room 1101, 11/F, Tai Yau Building
+address: 181 Johnston Road
+address: Wanchai
+address: Hong Kong
+phone: +85258033011
+e-mail: admin@dot.ph
+
+contact: technical
+name: DOTPH Technical Contact
+organisation: DotPH
+address: Room 1101, 11/F, Tai Yau Building
+address: 181 Johnston Road
+address: Wanchai
+address: Hong Kong
+phone: +639088698750
+e-mail: sysadmin@dot.ph
+
+nserver: 1.NS.PH 206.51.255.1 2620:171:805:ad2:7068:0:0:1
+nserver: NS2.CUHK.EDU.HK 137.189.6.21 2405:3000:3:6:0:0:0:15
+nserver: NS4.APNIC.NET 2001:dd8:12:0:0:0:0:53 202.12.31.53
+nserver: PH.COMMUNITYDNS.NET 194.0.1.23 2001:678:4:0:0:0:0:17
+ds-rdata: 29122 13 2 0ed5c93074522f903dbb7fbad2866cbe7cb67f15f0e5b54013340b57c1bcd509
+
+whois:
+
+status: ACTIVE
+remarks: Registration information: http://dot.ph
+
+created: 1990-09-14
+changed: 2024-01-30
+source: IANA
diff --git a/tests/fixtures/dotregistrar.com.txt b/tests/fixtures/dotregistrar.com.txt
new file mode 100644
index 00000000..b9b50f21
--- /dev/null
+++ b/tests/fixtures/dotregistrar.com.txt
@@ -0,0 +1,55 @@
+ Domain Name: DOTREGISTRAR.COM
+ Registry Domain ID: 3555161_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.domain.com
+ Registrar URL: http://www.domain.com
+ Updated Date: 2025-01-12T04:47:24Z
+ Creation Date: 1999-02-10T05:00:00Z
+ Registry Expiry Date: 2026-02-10T05:00:00Z
+ Registrar: Domain.com - Network Solutions, LLC
+ Registrar IANA ID: 886
+ Registrar Abuse Contact Email: domain.operations@web.com
+ Registrar Abuse Contact Phone: +1.8003337680
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Name Server: NS1.DOTREGISTRAR.NET
+ Name Server: NS2.DOTREGISTRAR.NET
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/dotster.com.txt b/tests/fixtures/dotster.com.txt
new file mode 100644
index 00000000..586918e2
--- /dev/null
+++ b/tests/fixtures/dotster.com.txt
@@ -0,0 +1,54 @@
+ Domain Name: DOTSTER.COM
+ Registry Domain ID: 15098175_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.domain.com
+ Registrar URL: http://www.domain.com
+ Updated Date: 2023-10-20T01:05:05Z
+ Creation Date: 1999-12-12T05:50:06Z
+ Registry Expiry Date: 2027-12-12T05:50:06Z
+ Registrar: Domain.com - Network Solutions, LLC
+ Registrar IANA ID: 886
+ Registrar Abuse Contact Email: domain.operations@web.com
+ Registrar Abuse Contact Phone: +1.8003337680
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Name Server: NS1.DOTSTER.COM
+ Name Server: NS2.DOTSTER.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/dreamhost.com.txt b/tests/fixtures/dreamhost.com.txt
new file mode 100644
index 00000000..5c9a3f25
--- /dev/null
+++ b/tests/fixtures/dreamhost.com.txt
@@ -0,0 +1,54 @@
+ Domain Name: DREAMHOST.COM
+ Registry Domain ID: 494018_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.dreamhost.com
+ Registrar URL: http://www.DreamHost.com
+ Updated Date: 2025-08-21T10:17:08Z
+ Creation Date: 1997-09-23T04:00:00Z
+ Registry Expiry Date: 2026-09-22T04:00:00Z
+ Registrar: DreamHost, LLC
+ Registrar IANA ID: 431
+ Registrar Abuse Contact Email: domain-abuse@dreamhost.com
+ Registrar Abuse Contact Phone: +1.7148729370
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: NS1.DREAMHOST.COM
+ Name Server: NS2.DREAMHOST.COM
+ Name Server: NS3.DREAMHOST.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/encirca.com.txt b/tests/fixtures/encirca.com.txt
new file mode 100644
index 00000000..b1862074
--- /dev/null
+++ b/tests/fixtures/encirca.com.txt
@@ -0,0 +1,58 @@
+ Domain Name: ENCIRCA.COM
+ Registry Domain ID: 4570310_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.encirca.com
+ Registrar URL: http://www.encirca.com
+ Updated Date: 2025-01-09T16:10:11Z
+ Creation Date: 1999-03-22T05:00:00Z
+ Registry Expiry Date: 2032-03-22T04:00:00Z
+ Registrar: EnCirca, Inc.
+ Registrar IANA ID: 455
+ Registrar Abuse Contact Email: abuse-2014-2@encirca.com
+ Registrar Abuse Contact Phone: +1.781.942.9975
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+ Name Server: DNSSEC1.ENCIRCA.NET
+ Name Server: DNSSEC2.ENCIRCA.NET
+ DNSSEC: signedDelegation
+ DNSSEC DS Data: 32914 8 2 BB32861E995CAFD7587923DB76F0A03A4A92496F324262744801AF575449AB43
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/enom.com.txt b/tests/fixtures/enom.com.txt
new file mode 100644
index 00000000..c4b0db03
--- /dev/null
+++ b/tests/fixtures/enom.com.txt
@@ -0,0 +1,59 @@
+ Domain Name: ENOM.COM
+ Registry Domain ID: 3066175_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.enom.com
+ Registrar URL: http://www.enomdomains.com
+ Updated Date: 2024-05-16T19:55:12Z
+ Creation Date: 1997-10-24T04:00:00Z
+ Registry Expiry Date: 2030-09-21T17:45:09Z
+ Registrar: eNom, LLC
+ Registrar IANA ID: 48
+ Registrar Abuse Contact Email: abuse@enom.com
+ Registrar Abuse Contact Phone: +1.4165350123
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+ Name Server: NS1.ENOM.COM
+ Name Server: NS2.ENOM.COM
+ Name Server: NS3.ENOM.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/eurid.eu.txt b/tests/fixtures/eurid.eu.txt
new file mode 100644
index 00000000..2590b324
--- /dev/null
+++ b/tests/fixtures/eurid.eu.txt
@@ -0,0 +1,76 @@
+% The WHOIS service offered by EURid and the access to the records
+% in the EURid WHOIS database are provided for information purposes
+% only. It allows persons to check whether a specific domain name
+% is still available or not and to obtain information related to
+% the registration records of existing domain names.
+%
+% EURid cannot, under any circumstances, be held liable in case the
+% stored information would prove to be wrong, incomplete or not
+% accurate in any sense.
+%
+% By submitting a query, you agree not to use the information made
+% available to:
+%
+% - allow, enable or otherwise support the transmission of unsolicited,
+% commercial advertising or other solicitations whether via email or
+% otherwise;
+% - target advertising in any possible way;
+% - cause nuisance in any possible way by sending messages to registrants,
+% whether by automated, electronic processes capable of enabling
+% high volumes or by other possible means.
+%
+% Without prejudice to the above, it is explicitly forbidden to extract,
+% copy and/or use or re-utilise in any form and by any means
+% (electronically or not) the whole or a quantitatively or qualitatively
+% substantial part of the contents of the WHOIS database without prior
+% and explicit permission by EURid, nor in any attempt hereof, to apply
+% automated, electronic processes to EURid (or its systems).
+%
+% You agree that any reproduction and/or transmission of data for
+% commercial purposes will always be considered as the extraction of a
+% substantial part of the content of the WHOIS database.
+%
+% By submitting the query, you agree to abide by this policy and accept
+% that EURid can take measures to limit the use of its WHOIS services
+% to protect the privacy of its registrants or the integrity
+% of the database.
+%
+% The EURid WHOIS service on port 43 (textual WHOIS) never discloses
+% any information concerning the registrant.
+% Registrant and on-site contact information can be obtained through use of the
+% web-based WHOIS service available from the EURid website www.eurid.eu
+%
+% WHOIS eurid.eu
+Domain: eurid.eu
+Script: LATIN
+
+Registrant:
+ NOT DISCLOSED!
+ Visit www.eurid.eu for the web-based WHOIS.
+
+Technical:
+ Organisation: EURid vzw
+ Language: en
+ Email: tech@eurid.eu
+
+Registrar:
+ Name: EURid vzw
+ Website: https://www.eurid.eu
+
+Name servers:
+ ns2.eurid.eu (2001:67c:40:3937::252)
+ ns2.eurid.eu (185.36.6.252)
+ ns1.eurid.eu (2001:67c:9c:3937::252)
+ ns1.eurid.eu (185.36.4.252)
+ ns4.eurid.eu (2001:67c:40:3937::253)
+ ns4.eurid.eu (185.36.6.253)
+ ns3.eurid.eu (185.36.4.253)
+ ns3.eurid.eu (2001:67c:9c:3937::253)
+ nsp.netnod.se
+ nsx.eurid.eu (185.151.141.1)
+ nsx.eurid.eu (2a02:568:fe00::6575)
+
+Keys:
+ flags:KSK protocol:3 algorithm:RSA_SHA256 pubKey:AwEAAcOQldGtC33GLx8s335UscKMPlWjDXCqbhR2QyAYcfS4CZS6YHg3A1Zz/K3VurTZF68aSaRkNupZuEgt4jozE3v4+t+2qOfiATvoOCrf74hWduBPwk9Go0z7FVlDkok1/qMQmqOtih8TFP85b+w6F/uyLMZS1JowMDUzRurmHJVoT4lW9+OCdrhuQFK9vU24Y8BmacoRy6mWBCFlysizlOIodwmquOf5A+3Nz0B3TLCK4fIYJYVxCUVlpRJ7uaBS+GLD7afuxkEesReYHgPWZFSDMbXk9Ugh+qUi8tEKKFls9TM3lK9BPBcciXUhI1bRJSHftqcNpMmLqg/79SwoWGc=
+
+Please visit www.eurid.eu for more info.
\ No newline at end of file
diff --git a/tests/fixtures/example.com.txt b/tests/fixtures/example.com.txt
new file mode 100644
index 00000000..9fabf152
--- /dev/null
+++ b/tests/fixtures/example.com.txt
@@ -0,0 +1,57 @@
+ Domain Name: EXAMPLE.COM
+ Registry Domain ID: 2336799_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.iana.org
+ Registrar URL: http://res-dom.iana.org
+ Updated Date: 2025-11-25T18:49:24Z
+ Creation Date: 1995-08-14T04:00:00Z
+ Registry Expiry Date: 2026-08-13T04:00:00Z
+ Registrar: RESERVED-Internet Assigned Numbers Authority
+ Registrar IANA ID: 376
+ Registrar Abuse Contact Email:
+ Registrar Abuse Contact Phone:
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Name Server: A.IANA-SERVERS.NET
+ Name Server: B.IANA-SERVERS.NET
+ DNSSEC: signedDelegation
+ DNSSEC DS Data: 2371 13 2 C988EC423E3880EB8DD8A46FE06CA230EE23F35B578D64E78B29C3E1C83D245A
+ DNSSEC DS Data: 370 13 2 BE74359954660069D5C63D200C39F5603827D7DD02B56F120EE9F3A86764247C
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/example.org.txt b/tests/fixtures/example.org.txt
new file mode 100644
index 00000000..e7588176
--- /dev/null
+++ b/tests/fixtures/example.org.txt
@@ -0,0 +1,24 @@
+Domain Name: example.org
+Registry Domain ID: REDACTED
+Registrar WHOIS Server:
+Registrar URL:
+Updated Date: 2025-10-14T04:00:54Z
+Creation Date: 1995-08-31T04:00:00Z
+Registry Expiry Date: 2026-08-30T04:00:00Z
+Registrar: ICANN
+Registrar IANA ID: 376
+Registrar Abuse Contact Email: cbath@pir.org
+Registrar Abuse Contact Phone: +1.1234567890
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverRenewProhibited https://icann.org/epp#serverRenewProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Name Server: a.iana-servers.net
+Name Server: b.iana-servers.net
+DNSSEC: signedDelegation
+URL of the ICANN Whois Inaccuracy Complaint Form: https://icann.org/wicf/
+>>> Last update of WHOIS database: 2025-11-30T17:10:11Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+Terms of Use: Access to Public Interest Registry WHOIS information is provided to assist persons in determining the contents of a domain name registration record in the Public Interest Registry registry database. The data in this record is provided by Public Interest Registry for informational purposes only, and Public Interest Registry does not guarantee its accuracy. This service is intended only for query-based access. You agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data to (a) allow, enable, or otherwise support the transmission by e-mail, telephone, or facsimile of mass unsolicited, commercial advertising or solicitations to entities other than the data recipient's own existing customers; or (b) enable high volume, automated, electronic processes that send queries or data to the systems of Registry Operator, a Registrar, or Identity Digital except as reasonably necessary to register domain names or modify existing registrations. All rights reserved. Public Interest Registry reserves the right to modify these terms at any time. By submitting this query, you agree to abide by this policy. The Registrar of Record identified in this output may have an RDDS service that can be queried for additional information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
\ No newline at end of file
diff --git a/tests/fixtures/fabulous.com.txt b/tests/fixtures/fabulous.com.txt
new file mode 100644
index 00000000..302d4710
--- /dev/null
+++ b/tests/fixtures/fabulous.com.txt
@@ -0,0 +1,57 @@
+ Domain Name: FABULOUS.COM
+ Registry Domain ID: 1102173_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.fabulous.com
+ Registrar URL: http://www.fabulous.com
+ Updated Date: 2024-11-19T22:09:27Z
+ Creation Date: 1997-03-16T05:00:00Z
+ Registry Expiry Date: 2026-12-07T14:41:47Z
+ Registrar: Sea Wasp, LLC
+ Registrar IANA ID: 411
+ Registrar Abuse Contact Email: abuse@fabulous.com
+ Registrar Abuse Contact Phone: +1.5045078209
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Name Server: NS1.DNSIMPLE.COM
+ Name Server: NS2.DNSIMPLE-EDGE.NET
+ Name Server: NS3.DNSIMPLE.COM
+ Name Server: NS4.DNSIMPLE-EDGE.ORG
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/fastdomain.com.txt b/tests/fixtures/fastdomain.com.txt
new file mode 100644
index 00000000..d749fc59
--- /dev/null
+++ b/tests/fixtures/fastdomain.com.txt
@@ -0,0 +1,53 @@
+ Domain Name: FASTDOMAIN.COM
+ Registry Domain ID: 91958491_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.fastdomain.com
+ Registrar URL: https://www.bluehost.com
+ Updated Date: 2024-10-09T18:55:15Z
+ Creation Date: 2002-11-07T05:49:33Z
+ Registry Expiry Date: 2033-11-07T05:49:33Z
+ Registrar: Bluehost Inc.
+ Registrar IANA ID: 1154
+ Registrar Abuse Contact Email: domain.operations@web.com
+ Registrar Abuse Contact Phone: +1.8777228662
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: CODY.NS.CLOUDFLARE.COM
+ Name Server: ERIN.NS.CLOUDFLARE.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/ficora.fi.txt b/tests/fixtures/ficora.fi.txt
new file mode 100644
index 00000000..9ad661c2
--- /dev/null
+++ b/tests/fixtures/ficora.fi.txt
@@ -0,0 +1,42 @@
+
+domain.............: ficora.fi
+status.............: Registered
+created............: 29.6.2001 09:25:00
+expires............: 31.8.2029 00:00:00
+available..........: 30.9.2029 00:00:00
+modified...........: 9.6.2023 09:54:30
+RegistryLock.......: no
+
+Nameservers
+
+nserver............: ns2.traficom.fi [87.239.125.187] [2a00:13f0:0:1002:125:184:0:3] [OK]
+nserver............: ns-secondary.funet.fi [128.214.248.132] [2001:708:10:55::53] [OK]
+nserver............: nsp.dnsnode.net [OK]
+nserver............: ns2.z.fi [OK]
+nserver............: ns1.z.fi [OK]
+nserver............: ns1.traficom.fi [87.239.125.186] [2a00:13f0:0:1002:125:184:0:2] [OK]
+
+DNSSEC
+
+dnssec.............: no
+
+Holder
+
+name...............: Liikenne- ja viestintvirasto Traficom
+register number....: 2924753-3
+address............: PL 320
+postal.............: 00059
+city...............: TRAFICOM
+country............: Finland
+phone..............:
+holder email.......:
+
+Registrar
+
+registrar..........: Liikenne- ja viestintvirasto Traficom
+
+>>> Last update of WHOIS database: 8.12.2025 12:30:16 (EET) <<<
+
+
+Copyright (c) Finnish Transport and Communications Agency Traficom
+
\ No newline at end of file
diff --git a/tests/fixtures/fiji.gov.fj.txt b/tests/fixtures/fiji.gov.fj.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/fixtures/gandi.net.txt b/tests/fixtures/gandi.net.txt
new file mode 100644
index 00000000..02392f17
--- /dev/null
+++ b/tests/fixtures/gandi.net.txt
@@ -0,0 +1,63 @@
+ Domain Name: GANDI.NET
+ Registry Domain ID: 6683836_DOMAIN_NET-VRSN
+ Registrar WHOIS Server: whois.gandi.net
+ Registrar URL: http://www.gandi.net
+ Updated Date: 2025-03-22T13:14:46Z
+ Creation Date: 1999-05-21T14:09:21Z
+ Registry Expiry Date: 2026-05-21T14:09:56Z
+ Registrar: Gandi SAS
+ Registrar IANA ID: 81
+ Registrar Abuse Contact Email: abuse@support.gandi.net
+ Registrar Abuse Contact Phone: +33.170377661
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+ Name Server: DNS0.GANDI.NET
+ Name Server: DNS1.GANDI.NET
+ Name Server: DNS2.GANDI.NET
+ Name Server: DNS3.GANDI.NET
+ Name Server: DNS4.GANDI.NET
+ Name Server: DNS6.GANDI.NET
+ Name Server: E.GANDI-NS.FR
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/godaddy.com.txt b/tests/fixtures/godaddy.com.txt
new file mode 100644
index 00000000..42fef620
--- /dev/null
+++ b/tests/fixtures/godaddy.com.txt
@@ -0,0 +1,65 @@
+ Domain Name: GODADDY.COM
+ Registry Domain ID: 4013247_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.godaddy.com
+ Registrar URL: http://www.godaddy.com
+ Updated Date: 2023-10-26T20:31:51Z
+ Creation Date: 1999-03-02T05:00:00Z
+ Registry Expiry Date: 2032-11-01T11:59:59Z
+ Registrar: GoDaddy.com, LLC
+ Registrar IANA ID: 146
+ Registrar Abuse Contact Email: abuse@godaddy.com
+ Registrar Abuse Contact Phone: 480-624-2505
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+ Name Server: A1-245.AKAM.NET
+ Name Server: A11-64.AKAM.NET
+ Name Server: A20-65.AKAM.NET
+ Name Server: A6-66.AKAM.NET
+ Name Server: A8-67.AKAM.NET
+ Name Server: A9-67.AKAM.NET
+ Name Server: CNS1.GODADDY.COM
+ Name Server: CNS2.GODADDY.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/google.ae.txt b/tests/fixtures/google.ae.txt
new file mode 100644
index 00000000..45af6e95
--- /dev/null
+++ b/tests/fixtures/google.ae.txt
@@ -0,0 +1,18 @@
+Domain Name: google.ae
+Registrar ID: markmonitor
+Registrar Name: MarkMonitor
+Status: clientDeleteProhibited
+Status: clientUpdateProhibited
+
+Registrant Contact ID: MMR-171195
+Registrant Contact Name: Domain Administrator
+Registrant Contact Email: Visit whois.aeda.net.ae for Web based WhoIs
+Registrant Contact Organisation: Google LLC
+
+Tech Contact ID: MMR-171195
+Tech Contact Name: Domain Administrator
+Tech Contact Email: Visit whois.aeda.net.ae for Web based WhoIs
+Tech Contact Organisation: Google LLC
+
+Name Server: ns1.google.com
+Name Server: ns2.google.com
\ No newline at end of file
diff --git a/tests/fixtures/google.app.smitty.txt b/tests/fixtures/google.app.smitty.txt
new file mode 100644
index 00000000..81608b6a
--- /dev/null
+++ b/tests/fixtures/google.app.smitty.txt
@@ -0,0 +1,87 @@
+Domain Name: google.app
+Registry Domain ID: 2C5A4BAFF-APP
+Registrar WHOIS Server: whois.nic.google
+Registrar URL: http://www.markmonitor.com
+Updated Date: 2018-04-09T14:29:14Z
+Creation Date: 2018-03-29T16:02:13Z
+Registry Expiry Date: 2019-03-29T16:02:13Z
+Registrar: MarkMonitor Inc.
+Registrar IANA ID: 292
+Registrar Abuse Contact Email: abusecomplaints@markmonitor.com
+Registrar Abuse Contact Phone: +1.2083895740
+Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Registry Registrant ID: REDACTED FOR PRIVACY
+Registrant Name: REDACTED FOR PRIVACY
+Registrant Organization: Google LLC
+Registrant Street: REDACTED FOR PRIVACY
+Registrant City: REDACTED FOR PRIVACY
+Registrant State/Province: CA
+Registrant Postal Code: REDACTED FOR PRIVACY
+Registrant Country: US
+Registrant Phone: REDACTED FOR PRIVACY
+Registrant Fax: REDACTED FOR PRIVACY
+Registrant Email: REDACTED FOR PRIVACY
+Registry Admin ID: REDACTED FOR PRIVACY
+Admin Name: REDACTED FOR PRIVACY
+Admin Organization: REDACTED FOR PRIVACY
+Admin Street: REDACTED FOR PRIVACY
+Admin City: REDACTED FOR PRIVACY
+Admin State/Province: REDACTED FOR PRIVACY
+Admin Postal Code: REDACTED FOR PRIVACY
+Admin Country: REDACTED FOR PRIVACY
+Admin Phone: REDACTED FOR PRIVACY
+Admin Fax: REDACTED FOR PRIVACY
+Admin Email: REDACTED FOR PRIVACY
+Registry Tech ID: REDACTED FOR PRIVACY
+Tech Name: REDACTED FOR PRIVACY
+Tech Organization: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech City: REDACTED FOR PRIVACY
+Tech State/Province: REDACTED FOR PRIVACY
+Tech Postal Code: REDACTED FOR PRIVACY
+Tech Country: REDACTED FOR PRIVACY
+Tech Phone: REDACTED FOR PRIVACY
+Tech Fax: REDACTED FOR PRIVACY
+Tech Email: REDACTED FOR PRIVACY
+Registry Billing ID: REDACTED FOR PRIVACY
+Billing Name: REDACTED FOR PRIVACY
+Billing Organization: REDACTED FOR PRIVACY
+Billing Street: REDACTED FOR PRIVACY
+Billing City: REDACTED FOR PRIVACY
+Billing State/Province: REDACTED FOR PRIVACY
+Billing Postal Code: REDACTED FOR PRIVACY
+Billing Country: REDACTED FOR PRIVACY
+Billing Phone: REDACTED FOR PRIVACY
+Billing Fax: REDACTED FOR PRIVACY
+Billing Email: REDACTED FOR PRIVACY
+Name Server: ns1.googledomains.com
+Name Server: ns2.googledomains.com
+Name Server: ns3.googledomains.com
+Name Server: ns4.googledomains.com
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2018-07-19T19:41:42Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+Please query the WHOIS server of the owning registrar identified in this
+output for information on how to contact the Registrant, Admin, or Tech
+contact of the queried domain name.
+
+WHOIS information is provided by Charleston Road Registry Inc. (CRR) solely
+for query-based, informational purposes. By querying our WHOIS database, you
+are agreeing to comply with these terms
+(https://www.registry.google/about/whois-disclaimer.html) and acknowledge
+that your information will be used in accordance with CRR's Privacy Policy
+(https://www.registry.google/about/privacy.html), so please read those
+documents carefully. Any information provided is "as is" without any
+guarantee of accuracy. You may not use such information to (a) allow,
+enable, or otherwise support the transmission of mass unsolicited,
+commercial advertising or solicitations; (b) enable high volume, automated,
+electronic processes that access the systems of CRR or any ICANN-Accredited
+Registrar, except as reasonably necessary to register domain names or modify
+existing registrations; or (c) engage in or support unlawful behavior. CRR
+reserves the right to restrict or deny your access to the Whois database,
+and may modify these terms at any time.
diff --git a/tests/fixtures/google.app.txt b/tests/fixtures/google.app.txt
new file mode 100644
index 00000000..48b4708d
--- /dev/null
+++ b/tests/fixtures/google.app.txt
@@ -0,0 +1,113 @@
+% IANA WHOIS server
+% for more information on IANA, visit http://www.iana.org
+% This query returned 1 object
+
+refer: whois.nic.google
+
+domain: APP
+
+organisation: Charleston Road Registry Inc.
+address: 1600 Amphitheatre Parkway Mountain View, CA 94043
+address: United States
+
+contact: administrative
+name: Domains Policy and Compliance
+organisation: Google Inc.
+address: 601 N. 34th Street
+address: Seattle, WA 98103
+address: United States
+phone: 1 202 642 2325
+fax-no: 1 650 492 5631
+e-mail: iana-contact@google.com
+
+contact: technical
+name: Richard Roberto
+organisation: Google Inc
+address: 76 9th Avenue, 4th Floor
+address: New York, NY 10011
+address: United States
+phone: 1 212 565 2633
+fax-no: 1 650 492 5631
+e-mail: crr-tech@google.com
+
+nserver: NS-TLD1.CHARLESTONROADREGISTRY.COM 2001:4860:4802:32:0:0:0:69 216.239.32.105
+nserver: NS-TLD2.CHARLESTONROADREGISTRY.COM 2001:4860:4802:34:0:0:0:69 216.239.34.105
+nserver: NS-TLD3.CHARLESTONROADREGISTRY.COM 2001:4860:4802:36:0:0:0:69 216.239.36.105
+nserver: NS-TLD4.CHARLESTONROADREGISTRY.COM 2001:4860:4802:38:0:0:0:69 216.239.38.105
+nserver: NS-TLD5.CHARLESTONROADREGISTRY.COM 2001:4860:4805:0:0:0:0:69 216.239.60.105
+ds-rdata: 23684 8 2 3a5cc8a31e02c94aba6461912fabb7e9f5e34957bb6114a55a864d96aec31836
+
+whois: whois.nic.google
+
+status: ACTIVE
+remarks: Registration information: http://www.registry.google
+
+created: 2015-06-25
+changed: 2018-06-09
+source: IANA
+
+Domain Name: google.app
+Registry Domain ID: 2C5A4BAFF-APP
+Registrar WHOIS Server: whois.nic.google
+Registrar URL: http://www.markmonitor.com
+Updated Date: 2018-04-09T14:29:14Z
+Creation Date: 2018-03-29T16:02:13Z
+Registry Expiry Date: 2019-03-29T16:02:13Z
+Registrar: MarkMonitor Inc.
+Registrar IANA ID: 292
+Registrar Abuse Contact Email: abusecomplaints@markmonitor.com
+Registrar Abuse Contact Phone: +1.2083895740
+Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Registry Registrant ID: REDACTED FOR PRIVACY
+Registrant Name: REDACTED FOR PRIVACY
+Registrant Organization: Google LLC
+Registrant Street: REDACTED FOR PRIVACY
+Registrant City: REDACTED FOR PRIVACY
+Registrant State/Province: CA
+Registrant Postal Code: REDACTED FOR PRIVACY
+Registrant Country: US
+Registrant Phone: REDACTED FOR PRIVACY
+Registrant Fax: REDACTED FOR PRIVACY
+Registrant Email: REDACTED FOR PRIVACY
+Registry Admin ID: REDACTED FOR PRIVACY
+Admin Name: REDACTED FOR PRIVACY
+Admin Organization: REDACTED FOR PRIVACY
+Admin Street: REDACTED FOR PRIVACY
+Admin City: REDACTED FOR PRIVACY
+Admin State/Province: REDACTED FOR PRIVACY
+Admin Postal Code: REDACTED FOR PRIVACY
+Admin Country: REDACTED FOR PRIVACY
+Admin Phone: REDACTED FOR PRIVACY
+Admin Fax: REDACTED FOR PRIVACY
+Admin Email: REDACTED FOR PRIVACY
+Registry Tech ID: REDACTED FOR PRIVACY
+Tech Name: REDACTED FOR PRIVACY
+Tech Organization: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech City: REDACTED FOR PRIVACY
+Tech State/Province: REDACTED FOR PRIVACY
+Tech Postal Code: REDACTED FOR PRIVACY
+Tech Country: REDACTED FOR PRIVACY
+Tech Phone: REDACTED FOR PRIVACY
+Tech Fax: REDACTED FOR PRIVACY
+Tech Email: REDACTED FOR PRIVACY
+Registry Billing ID: REDACTED FOR PRIVACY
+Billing Name: REDACTED FOR PRIVACY
+Billing Organization: REDACTED FOR PRIVACY
+Billing Street: REDACTED FOR PRIVACY
+Billing City: REDACTED FOR PRIVACY
+Billing State/Province: REDACTED FOR PRIVACY
+Billing Postal Code: REDACTED FOR PRIVACY
+Billing Country: REDACTED FOR PRIVACY
+Billing Phone: REDACTED FOR PRIVACY
+Billing Fax: REDACTED FOR PRIVACY
+Billing Email: REDACTED FOR PRIVACY
+Name Server: ns1.googledomains.com
+Name Server: ns2.googledomains.com
+Name Server: ns3.googledomains.com
+Name Server: ns4.googledomains.com
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2018-07-20T20:25:45Z <<<
\ No newline at end of file
diff --git a/tests/fixtures/google.ca.txt b/tests/fixtures/google.ca.txt
new file mode 100644
index 00000000..2223d787
--- /dev/null
+++ b/tests/fixtures/google.ca.txt
@@ -0,0 +1,253 @@
+Connecting to CA.whois-servers.net...
+
+WHOIS Server: whois.ca.fury.ca
+Registrar URL: Markmonitor.com
+Updated Date: 2020-04-28T04:00:30Z
+Creation Date: 2000-10-04T02:21:23Z
+Registry Expiry Date: 2021-04-28T04:00:00Z
+Registrar: MarkMonitor International Canada Ltd.
+Registrar IANA ID:
+Registrar Abuse Contact Email:
+Registrar Abuse Contact Phone:
+Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Registry Registrant ID: 59969059-CIRA
+Registrant Name: Google LLC - TMA868122
+Registrant Organization:
+Registrant Street: 1600 Amphitheatre Parkway
+Registrant City: Mountain View
+Registrant State/Province: CA
+Registrant Postal Code: 94043
+Registrant Country: US
+Registrant Phone: +1.6502530000
+Registrant Phone Ext:
+Registrant Fax:
+Registrant Fax Ext:
+Registrant Email: dns-admin@google.com
+Registry Admin ID: 59969161-CIRA
+Admin Name: Lauren Johnston
+Admin Organization: Google LLC
+Admin Street: 1600 Amphitheatre Parkway
+Admin City: Mountain View
+Admin State/Province: CA
+Admin Postal Code: 94043
+Admin Country: US
+Admin Phone: +1.6502530000
+Admin Phone Ext:
+Admin Fax:
+Admin Fax Ext:
+Admin Email: dns-admin@google.com
+Registry Tech ID: 59969161-CIRA
+Tech Name: Lauren Johnston
+Tech Organization: Google LLC
+Tech Street: 1600 Amphitheatre Parkway
+Tech City: Mountain View
+Tech State/Province: CA
+Tech Postal Code: 94043
+Tech Country: US
+Tech Phone: +1.6502530000
+Tech Phone Ext:
+Tech Fax:
+Tech Fax Ext:
+Tech Email: dns-admin@google.com
+Registry Billing ID:
+Billing Name:
+Billing Organization:
+Billing Street:
+Billing City:
+Billing State/Province:
+Billing Postal Code:
+Billing Country:
+Billing Phone:
+Billing Phone Ext:
+Billing Fax:
+Billing Fax Ext:
+Billing Email:
+Name Server: ns1.google.com
+Name Server: ns2.google.com
+Name Server: ns3.google.com
+Name Server: ns4.google.com
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2020-05-31T13:22:20Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+%
+% Use of CIRA's WHOIS service is governed by the Terms of Use in its Legal
+% Notice, available at http://www.cira.ca/legal-notice/?lang=en
+%
+% (c) 2020 Canadian Internet Registration Authority, (http://www.cira.ca/)
+Connecting to whois.ca.fury.ca...
+
+WHOIS Server: whois.ca.fury.ca
+Registrar URL: Markmonitor.com
+Updated Date: 2020-04-28T04:00:30Z
+Creation Date: 2000-10-04T02:21:23Z
+Registry Expiry Date: 2021-04-28T04:00:00Z
+Registrar: MarkMonitor International Canada Ltd.
+Registrar IANA ID:
+Registrar Abuse Contact Email:
+Registrar Abuse Contact Phone:
+Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Registry Registrant ID: 59969059-CIRA
+Registrant Name: Google LLC - TMA868122
+Registrant Organization:
+Registrant Street: 1600 Amphitheatre Parkway
+Registrant City: Mountain View
+Registrant State/Province: CA
+Registrant Postal Code: 94043
+Registrant Country: US
+Registrant Phone: +1.6502530000
+Registrant Phone Ext:
+Registrant Fax:
+Registrant Fax Ext:
+Registrant Email: dns-admin@google.com
+Registry Admin ID: 59969161-CIRA
+Admin Name: Lauren Johnston
+Admin Organization: Google LLC
+Admin Street: 1600 Amphitheatre Parkway
+Admin City: Mountain View
+Admin State/Province: CA
+Admin Postal Code: 94043
+Admin Country: US
+Admin Phone: +1.6502530000
+Admin Phone Ext:
+Admin Fax:
+Admin Fax Ext:
+Admin Email: dns-admin@google.com
+Registry Tech ID: 59969161-CIRA
+Tech Name: Lauren Johnston
+Tech Organization: Google LLC
+Tech Street: 1600 Amphitheatre Parkway
+Tech City: Mountain View
+Tech State/Province: CA
+Tech Postal Code: 94043
+Tech Country: US
+Tech Phone: +1.6502530000
+Tech Phone Ext:
+Tech Fax:
+Tech Fax Ext:
+Tech Email: dns-admin@google.com
+Registry Billing ID:
+Billing Name:
+Billing Organization:
+Billing Street:
+Billing City:
+Billing State/Province:
+Billing Postal Code:
+Billing Country:
+Billing Phone:
+Billing Phone Ext:
+Billing Fax:
+Billing Fax Ext:
+Billing Email:
+Name Server: ns1.google.com
+Name Server: ns2.google.com
+Name Server: ns3.google.com
+Name Server: ns4.google.com
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2020-05-31T13:22:20Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+%
+% Use of CIRA's WHOIS service is governed by the Terms of Use in its Legal
+% Notice, available at http://www.cira.ca/legal-notice/?lang=en
+%
+% (c) 2020 Canadian Internet Registration Authority, (http://www.cira.ca/)
+
+Domain Name: google.ca
+Registry Domain ID: D73081-CIRA
+Registrar WHOIS Server: whois.ca.fury.ca
+Registrar URL: Markmonitor.com
+Updated Date: 2020-04-28T04:00:30Z
+Creation Date: 2000-10-04T02:21:23Z
+Registry Expiry Date: 2021-04-28T04:00:00Z
+Registrar: MarkMonitor International Canada Ltd.
+Registrar IANA ID:
+Registrar Abuse Contact Email:
+Registrar Abuse Contact Phone:
+Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Registry Registrant ID: 59969059-CIRA
+Registrant Name: Google LLC - TMA868122
+Registrant Organization:
+Registrant Street: 1600 Amphitheatre Parkway
+Registrant City: Mountain View
+Registrant State/Province: CA
+Registrant Postal Code: 94043
+Registrant Country: US
+Registrant Phone: +1.6502530000
+Registrant Phone Ext:
+Registrant Fax:
+Registrant Fax Ext:
+Registrant Email: dns-admin@google.com
+Registry Admin ID: 59969161-CIRA
+Admin Name: Lauren Johnston
+Admin Organization: Google LLC
+Admin Street: 1600 Amphitheatre Parkway
+Admin City: Mountain View
+Admin State/Province: CA
+Admin Postal Code: 94043
+Admin Country: US
+Admin Phone: +1.6502530000
+Admin Phone Ext:
+Admin Fax:
+Admin Fax Ext:
+Admin Email: dns-admin@google.com
+Registry Tech ID: 59969161-CIRA
+Tech Name: Lauren Johnston
+Tech Organization: Google LLC
+Tech Street: 1600 Amphitheatre Parkway
+Tech City: Mountain View
+Tech State/Province: CA
+Tech Postal Code: 94043
+Tech Country: US
+Tech Phone: +1.6502530000
+Tech Phone Ext:
+Tech Fax:
+Tech Fax Ext:
+Tech Email: dns-admin@google.com
+Registry Billing ID:
+Billing Name:
+Billing Organization:
+Billing Street:
+Billing City:
+Billing State/Province:
+Billing Postal Code:
+Billing Country:
+Billing Phone:
+Billing Phone Ext:
+Billing Fax:
+Billing Fax Ext:
+Billing Email:
+Name Server: ns1.google.com
+Name Server: ns2.google.com
+Name Server: ns3.google.com
+Name Server: ns4.google.com
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2020-05-31T13:22:20Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+%
+% Use of CIRA's WHOIS service is governed by the Terms of Use in its Legal
+% Notice, available at http://www.cira.ca/legal-notice/?lang=en
+%
+% (c) 2020 Canadian Internet Registration Authority, (http://www.cira.ca/)
diff --git a/tests/fixtures/google.cat.txt b/tests/fixtures/google.cat.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/fixtures/google.ch.txt b/tests/fixtures/google.ch.txt
new file mode 100644
index 00000000..44f57f6a
--- /dev/null
+++ b/tests/fixtures/google.ch.txt
@@ -0,0 +1,6 @@
+Connecting to CH.whois-servers.net...
+
+Requests of this client are not permitted. Please use https://www.nic.ch/whois/ for queries.
+
+
+Connecting to is client are not permitted. Please use https://www.nic.ch/whois/ for queries....
diff --git a/tests/fixtures/google.cl.txt b/tests/fixtures/google.cl.txt
new file mode 100644
index 00000000..bb12512f
--- /dev/null
+++ b/tests/fixtures/google.cl.txt
@@ -0,0 +1,17 @@
+Registrant name: Google LLC
+Registrant organisation: Google LLC
+Registrar name: MarkMonitor Inc.
+Registrar URL: https://markmonitor.com/
+Creation date: 2002-10-22 17:48:23 CLST
+Expiration date: 2026-11-20 14:48:02 CLST
+Name server: ns1.google.com
+Name server: ns2.google.com
+Name server: ns3.google.com
+Name server: ns4.google.com
+
+%%
+%% For communication with domain contacts please use website.
+%% See https://www.nic.cl/registry/Whois.do?d=google.cl
+%%
+%% Registry Abuse Contact Email: abuse@nic.cl
+%%
\ No newline at end of file
diff --git a/tests/fixtures/google.cn.txt b/tests/fixtures/google.cn.txt
new file mode 100644
index 00000000..b3dc1b7f
--- /dev/null
+++ b/tests/fixtures/google.cn.txt
@@ -0,0 +1,17 @@
+Domain Name: google.cn
+ROID: 20030311s10001s00033735-cn
+Domain Status: clientDeleteProhibited
+Domain Status: serverDeleteProhibited
+Domain Status: serverUpdateProhibited
+Domain Status: clientTransferProhibited
+Domain Status: serverTransferProhibited
+Registrant: 北京谷翔信息技术有限公司
+Registrant Contact Email: dns-admin@google.com
+Sponsoring Registrar: 厦门易名科技股份有限公司
+Name Server: ns2.google.com
+Name Server: ns1.google.com
+Name Server: ns3.google.com
+Name Server: ns4.google.com
+Registration Time: 2003-03-17 12:20:05
+Expiration Time: 2026-03-17 12:48:36
+DNSSEC: unsigned
\ No newline at end of file
diff --git a/tests/fixtures/google.co.jp.txt b/tests/fixtures/google.co.jp.txt
new file mode 100644
index 00000000..ea03efb2
--- /dev/null
+++ b/tests/fixtures/google.co.jp.txt
@@ -0,0 +1,24 @@
+[ JPRS database provides information on network administration. Its use is ]
+[ restricted to network administration purposes. For further information, ]
+[ use 'whois -h whois.jprs.jp help'. To suppress Japanese output, add'/e' ]
+[ at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'. ]
+Domain Information: [ドメイン情報]
+a. [ドメイン名] GOOGLE.CO.JP
+e. [そしきめい] ぐーぐるごうどうかいしゃ
+f. [組織名] グーグル合同会社
+g. [Organization] Google Japan G.K.
+k. [組織種別] 合同会社
+l. [Organization Type] GK
+m. [登録担当者] YN47525JP
+n. [技術連絡担当者] SH36113JP
+p. [ネームサーバ] ns1.google.com
+p. [ネームサーバ] ns2.google.com
+p. [ネームサーバ] ns3.google.com
+p. [ネームサーバ] ns4.google.com
+s. [署名鍵]
+[状態] Connected (2026/03/31)
+[ロック状態] AgentChangeLocked
+[登録年月日] 2001/03/22
+[接続年月日] 2001/03/22
+[最終更新] 2025/04/01 01:02:57 (JST)
+
\ No newline at end of file
diff --git a/tests/fixtures/google.co.txt b/tests/fixtures/google.co.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/fixtures/google.co.uk.txt b/tests/fixtures/google.co.uk.txt
new file mode 100644
index 00000000..84c9c2ab
--- /dev/null
+++ b/tests/fixtures/google.co.uk.txt
@@ -0,0 +1,40 @@
+
+ Domain name:
+ google.co.uk
+
+ Data validation:
+ Nominet was able to match the registrant's name and address against a 3rd party data source on 24-May-2021
+
+ Registrar:
+ Markmonitor Inc. [Tag = MARKMONITOR]
+ URL: https://www.markmonitor.com
+
+ Relevant dates:
+ Registered on: 14-Feb-1999
+ Expiry date: 14-Feb-2026
+ Last updated: 13-Jan-2025
+
+ Registration status:
+ Registered until expiry date.
+
+ Name servers:
+ ns1.google.com
+ ns2.google.com
+ ns3.google.com
+ ns4.google.com
+
+ WHOIS lookup made at 17:09:10 30-Nov-2025
+
+--
+This WHOIS information is provided for free by Nominet UK the central registry
+for .uk domain names. This information and the .uk WHOIS are:
+
+ Copyright Nominet UK 1996 - 2025.
+
+You may not access the .uk WHOIS or use any data from it except as permitted
+by the terms of use available in full at https://www.nominet.uk/whoisterms,
+which includes restrictions on: (A) use of the data for advertising, or its
+repackaging, recompilation, redistribution or reuse (B) obscuring, removing
+or hiding any or all of this notice and (C) exceeding query rate or volume
+limits. The data is provided on an 'as-is' basis and may lag behind the
+register. Access may be withdrawn or restricted at any time.
\ No newline at end of file
diff --git a/tests/fixtures/google.co.za.txt b/tests/fixtures/google.co.za.txt
new file mode 100644
index 00000000..070ceddb
--- /dev/null
+++ b/tests/fixtures/google.co.za.txt
@@ -0,0 +1,43 @@
+document.documentElement.className = 'js';let jqueryParams=[],jQuery=function(r){return jqueryParams=[...jqueryParams,r],jQuery},$=function(r){return jqueryParams=[...jqueryParams,r],$};window.jQuery=jQuery,window.$=jQuery;let customHeadScripts=!1;jQuery.fn=jQuery.prototype={},$.fn=jQuery.prototype={},jQuery.noConflict=function(r){if(window.jQuery)return jQuery=window.jQuery,$=window.jQuery,customHeadScripts=!0,jQuery.noConflict},jQuery.ready=function(r){jqueryParams=[...jqueryParams,r]},$.ready=function(r){jqueryParams=[...jqueryParams,r]},jQuery.load=function(r){jqueryParams=[...jqueryParams,r]},$.load=function(r){jqueryParams=[...jqueryParams,r]},jQuery.fn.ready=function(r){jqueryParams=[...jqueryParams,r]},$.fn.ready=function(r){jqueryParams=[...jqueryParams,r]};Home - ZARC
+{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://zarc.web.za/","url":"https://zarc.web.za/","name":"Home - ZARC","isPartOf":{"@id":"https://zarc.web.za/#website"},"primaryImageOfPage":{"@id":"https://zarc.web.za/#primaryimage"},"image":{"@id":"https://zarc.web.za/#primaryimage"},"thumbnailUrl":"https://zarc.web.za/wp-content/uploads/2025/08/zarc-logo-1-300x300.png","datePublished":"2025-03-26T10:11:00+00:00","dateModified":"2025-11-17T13:31:33+00:00","description":"ZA Registry Consortium (ZARC) is the contracted Registry Operator for South Africa’s second-level domains (SLDs): CO.ZA, ORG.ZA, NET.ZA, and WEB.ZA.","breadcrumb":{"@id":"https://zarc.web.za/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://zarc.web.za/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https://zarc.web.za/#primaryimage","url":"https://zarc.web.za/wp-content/uploads/2025/08/zarc-logo-1.png","contentUrl":"https://zarc.web.za/wp-content/uploads/2025/08/zarc-logo-1.png","width":500,"height":500},{"@type":"BreadcrumbList","@id":"https://zarc.web.za/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home"}]},{"@type":"WebSite","@id":"https://zarc.web.za/#website","url":"https://zarc.web.za/","name":"ZARC","description":"Enhancing Domain Security","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://zarc.web.za/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}.wp-block-audio :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-audio :where(figcaption){color:#ffffffa6}.wp-block-audio{margin:0 0 1em}.wp-block-code{border:1px solid #ccc;border-radius:4px;font-family:Menlo,Consolas,monaco,monospace;padding:.8em 1em}.wp-block-embed :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-embed :where(figcaption){color:#ffffffa6}.wp-block-embed{margin:0 0 1em}.blocks-gallery-caption{color:#555;font-size:13px;text-align:center}.is-dark-theme .blocks-gallery-caption{color:#ffffffa6}:root :where(.wp-block-image figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme :root :where(.wp-block-image figcaption){color:#ffffffa6}.wp-block-image{margin:0 0 1em}.wp-block-pullquote{border-bottom:4px solid;border-top:4px solid;color:currentColor;margin-bottom:1.75em}.wp-block-pullquote cite,.wp-block-pullquote footer,.wp-block-pullquote__citation{color:currentColor;font-size:.8125em;font-style:normal;text-transform:uppercase}.wp-block-quote{border-left:.25em solid;margin:0 0 1.75em;padding-left:1em}.wp-block-quote cite,.wp-block-quote footer{color:currentColor;font-size:.8125em;font-style:normal;position:relative}.wp-block-quote:where(.has-text-align-right){border-left:none;border-right:.25em solid;padding-left:0;padding-right:1em}.wp-block-quote:where(.has-text-align-center){border:none;padding-left:0}.wp-block-quote.is-large,.wp-block-quote.is-style-large,.wp-block-quote:where(.is-style-plain){border:none}.wp-block-search .wp-block-search__label{font-weight:700}.wp-block-search__button{border:1px solid #ccc;padding:.375em .625em}:where(.wp-block-group.has-background){padding:1.25em 2.375em}.wp-block-separator.has-css-opacity{opacity:.4}.wp-block-separator{border:none;border-bottom:2px solid;margin-left:auto;margin-right:auto}.wp-block-separator.has-alpha-channel-opacity{opacity:1}.wp-block-separator:not(.is-style-wide):not(.is-style-dots){width:100px}.wp-block-separator.has-background:not(.is-style-dots){border-bottom:none;height:1px}.wp-block-separator.has-background:not(.is-style-wide):not(.is-style-dots){height:2px}.wp-block-table{margin:0 0 1em}.wp-block-table td,.wp-block-table th{word-break:normal}.wp-block-table :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-table :where(figcaption){color:#ffffffa6}.wp-block-video :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-video :where(figcaption){color:#ffffffa6}.wp-block-video{margin:0 0 1em}:root :where(.wp-block-template-part.has-background){margin-bottom:0;margin-top:0;padding:1.25em 2.375em}:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:root { --wp--style--global--content-size: 823px;--wp--style--global--wide-size: 1080px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;line-height: inherit;padding: calc(0.667em + 2px) calc(1.333em + 2px);text-decoration: none;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}/*!Theme Name: DiviTheme URI: http://www.elegantthemes.com/gallery/divi/Version: 4.27.4Description: Smart. Flexible. Beautiful. Divi is the most powerful theme in our collection.Author: Elegant ThemesAuthor URI: http://www.elegantthemes.comLicense: GNU General Public License v2License URI: http://www.gnu.org/licenses/gpl-2.0.html*/a,abbr,acronym,address,applet,b,big,blockquote,body,center,cite,code,dd,del,dfn,div,dl,dt,em,fieldset,font,form,h1,h2,h3,h4,h5,h6,html,i,iframe,img,ins,kbd,label,legend,li,object,ol,p,pre,q,s,samp,small,span,strike,strong,sub,sup,tt,u,ul,var{margin:0;padding:0;border:0;outline:0;font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}blockquote{margin:20px 0 30px;border-left:5px solid;padding-left:20px}:focus{outline:0}del{text-decoration:line-through}pre{overflow:auto;padding:10px}figure{margin:0}table{border-collapse:collapse;border-spacing:0}article,aside,footer,header,hgroup,nav,section{display:block}body{font-family:Open Sans,Arial,sans-serif;font-size:14px;color:#666;background-color:#fff;line-height:1.7em;font-weight:500;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.page-template-page-template-blank-php #page-container{padding-top:0!important}body.et_cover_background{background-size:cover!important;background-position:top!important;background-repeat:no-repeat!important;background-attachment:fixed}a{color:#2ea3f2}a,a:hover{text-decoration:none}p{padding-bottom:1em}p:not(.has-background):last-of-type{padding-bottom:0}p.et_normal_padding{padding-bottom:1em}strong{font-weight:700}cite,em,i{font-style:italic}code,pre{font-family:Courier New,monospace;margin-bottom:10px}ins{text-decoration:none}sub,sup{height:0;line-height:1;position:relative;vertical-align:baseline}sup{bottom:.8em}sub{top:.3em}dl{margin:0 0 1.5em}dl dt{font-weight:700}dd{margin-left:1.5em}blockquote p{padding-bottom:0}embed,iframe,object,video{max-width:100%}h1,h2,h3,h4,h5,h6{color:#333;padding-bottom:10px;line-height:1em;font-weight:500}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:inherit}h1{font-size:30px}h2{font-size:26px}h3{font-size:22px}h4{font-size:18px}h5{font-size:16px}h6{font-size:14px}input{-webkit-appearance:none}input[type=checkbox]{-webkit-appearance:checkbox}input[type=radio]{-webkit-appearance:radio}input.text,input.title,input[type=email],input[type=password],input[type=tel],input[type=text],select,textarea{background-color:#fff;border:1px solid #bbb;padding:2px;color:#4e4e4e}input.text:focus,input.title:focus,input[type=text]:focus,select:focus,textarea:focus{border-color:#2d3940;color:#3e3e3e}input.text,input.title,input[type=text],select,textarea{margin:0}textarea{padding:4px}button,input,select,textarea{font-family:inherit}img{max-width:100%;height:auto}.clear{clear:both}br.clear{margin:0;padding:0}.pagination{clear:both}#et_search_icon:hover,.et-social-icon a:hover,.et_password_protected_form .et_submit_button,.form-submit .et_pb_buttontton.alt.disabled,.nav-single a,.posted_in a{color:#2ea3f2}.et-search-form,blockquote{border-color:#2ea3f2}#main-content{background-color:#fff}.container{width:80%;max-width:1080px;margin:auto;position:relative}body:not(.et-tb) #main-content .container,body:not(.et-tb-has-header) #main-content .container{padding-top:58px}.et_full_width_page #main-content .container:before{display:none}.main_title{margin-bottom:20px}.et_password_protected_form .et_submit_button:hover,.form-submit .et_pb_button:hover{background:rgba(0,0,0,.05)}.et_button_icon_visible .et_pb_button{padding-right:2em;padding-left:.7em}.et_button_icon_visible .et_pb_button:after{opacity:1;margin-left:0}.et_button_left .et_pb_button:hover:after{left:.15em}.et_button_left .et_pb_button:after{margin-left:0;left:1em}.et_button_icon_visible.et_button_left .et_pb_button,.et_button_left .et_pb_button:hover,.et_button_left .et_pb_module .et_pb_button:hover{padding-left:2em;padding-right:.7em}.et_button_icon_visible.et_button_left .et_pb_button:after,.et_button_left .et_pb_button:hover:after{left:.15em}.et_password_protected_form .et_submit_button:hover,.form-submit .et_pb_button:hover{padding:.3em 1em}.et_button_no_icon .et_pb_button:after{display:none}.et_button_no_icon.et_button_icon_visible.et_button_left .et_pb_button,.et_button_no_icon.et_button_left .et_pb_button:hover,.et_button_no_icon .et_pb_button,.et_button_no_icon .et_pb_button:hover{padding:.3em 1em!important}.et_button_custom_icon .et_pb_button:after{line-height:1.7em}.et_button_custom_icon.et_button_icon_visible .et_pb_button:after,.et_button_custom_icon .et_pb_button:hover:after{margin-left:.3em}#left-area .post_format-post-format-gallery .wp-block-gallery:first-of-type{padding:0;margin-bottom:-16px}.entry-content table:not(.variations){border:1px solid #eee;margin:0 0 15px;text-align:left;width:100%}.entry-content thead th,.entry-content tr th{color:#555;font-weight:700;padding:9px 24px}.entry-content tr td{border-top:1px solid #eee;padding:6px 24px}#left-area ul,.entry-content ul,.et-l--body ul,.et-l--footer ul,.et-l--header ul{list-style-type:disc;padding:0 0 23px 1em;line-height:26px}#left-area ol,.entry-content ol,.et-l--body ol,.et-l--footer ol,.et-l--header ol{list-style-type:decimal;list-style-position:inside;padding:0 0 23px;line-height:26px}#left-area ul li ul,.entry-content ul li ol{padding:2px 0 2px 20px}#left-area ol li ul,.entry-content ol li ol,.et-l--body ol li ol,.et-l--footer ol li ol,.et-l--header ol li ol{padding:2px 0 2px 35px}#left-area ul.wp-block-gallery{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style-type:none;padding:0}#left-area ul.products{padding:0!important;line-height:1.7!important;list-style:none!important}.gallery-item a{display:block}.gallery-caption,.gallery-item a{width:90%}#wpadminbar{z-index:100001}#left-area .post-meta{font-size:14px;padding-bottom:15px}#left-area .post-meta a{text-decoration:none;color:#666}#left-area .et_featured_image{padding-bottom:7px}.single .post{padding-bottom:25px}body.single .et_audio_content{margin-bottom:-6px}.nav-single a{text-decoration:none;color:#2ea3f2;font-size:14px;font-weight:400}.nav-previous{float:left}.nav-next{float:right}.et_password_protected_form p input{background-color:#eee;border:none!important;width:100%!important;border-radius:0!important;font-size:14px;color:#999!important;padding:16px!important;-webkit-box-sizing:border-box;box-sizing:border-box}.et_password_protected_form label{display:none}.et_password_protected_form .et_submit_button{font-family:inherit;display:block;float:right;margin:8px auto 0;cursor:pointer}.post-password-required p.nocomments.container{max-width:100%}.post-password-required p.nocomments.container:before{display:none}.aligncenter,div.post .new-post .aligncenter{display:block;margin-left:auto;margin-right:auto}.wp-caption{border:1px solid #ddd;text-align:center;background-color:#f3f3f3;margin-bottom:10px;max-width:96%;padding:8px}.wp-caption.alignleft{margin:0 30px 20px 0}.wp-caption.alignright{margin:0 0 20px 30px}.wp-caption img{margin:0;padding:0;border:0}.wp-caption p.wp-caption-text{font-size:12px;padding:0 4px 5px;margin:0}.alignright{float:right}.alignleft{float:left}img.alignleft{display:inline;float:left;margin-right:15px}img.alignright{display:inline;float:right;margin-left:15px}.page.et_pb_pagebuilder_layout #main-content{background-color:transparent}body #main-content .et_builder_inner_content>h1,body #main-content .et_builder_inner_content>h2,body #main-content .et_builder_inner_content>h3,body #main-content .et_builder_inner_content>h4,body #main-content .et_builder_inner_content>h5,body #main-content .et_builder_inner_content>h6{line-height:1.4em}body #main-content .et_builder_inner_content>p{line-height:1.7em}.wp-block-pullquote{margin:20px 0 30px}.wp-block-pullquote.has-background blockquote{border-left:none}.wp-block-group.has-background{padding:1.5em 1.5em .5em}@media (min-width:981px){#left-area{width:79.125%;padding-bottom:23px}#main-content .container:before{content:"";position:absolute;top:0;height:100%;width:1px;background-color:#e2e2e2}.et_full_width_page #left-area,.et_no_sidebar #left-area{float:none;width:100%!important}.et_full_width_page #left-area{padding-bottom:0}.et_no_sidebar #main-content .container:before{display:none}}@media (max-width:980px){#page-container{padding-top:80px}.et-tb #page-container,.et-tb-has-header #page-container{padding-top:0!important}#left-area,#sidebar{width:100%!important}#main-content .container:before{display:none!important}.et_full_width_page .et_gallery_item:nth-child(4n+1){clear:none}}@media print{#page-container{padding-top:0!important}}#wp-admin-bar-et-use-visual-builder a:before{font-family:ETmodules!important;content:"\e625";font-size:30px!important;width:28px;margin-top:-3px;color:#974df3!important}#wp-admin-bar-et-use-visual-builder:hover a:before{color:#fff!important}#wp-admin-bar-et-use-visual-builder:hover a,#wp-admin-bar-et-use-visual-builder a:hover{transition:background-color .5s ease;-webkit-transition:background-color .5s ease;-moz-transition:background-color .5s ease;background-color:#7e3bd0!important;color:#fff!important}* html .clearfix,:first-child+html .clearfix{zoom:1}.iphone .et_pb_section_video_bg video::-webkit-media-controls-start-playback-button{display:none!important;-webkit-appearance:none}.et_mobile_device .et_pb_section_parallax .et_pb_parallax_css{background-attachment:scroll}.et-social-facebook a.icon:before{content:"\e093"}.et-social-twitter a.icon:before{content:"\e094"}.et-social-google-plus a.icon:before{content:"\e096"}.et-social-instagram a.icon:before{content:"\e09a"}.et-social-rss a.icon:before{content:"\e09e"}.ai1ec-single-event:after{content:" ";display:table;clear:both}.evcal_event_details .evcal_evdata_cell .eventon_details_shading_bot.eventon_details_shading_bot{z-index:3}.wp-block-divi-layout{margin-bottom:1em}*{-webkit-box-sizing:border-box;box-sizing:border-box}#et-info-email:before,#et-info-phone:before,#et_search_icon:before,.comment-reply-link:after,.et-cart-info span:before,.et-pb-arrow-next:before,.et-pb-arrow-prev:before,.et-social-icon a:before,.et_audio_container .mejs-playpause-button button:before,.et_audio_container .mejs-volume-button button:before,.et_overlay:before,.et_password_protected_form .et_submit_button:after,.et_pb_button:after,.et_pb_contact_reset:after,.et_pb_contact_submit:after,.et_pb_font_icon:before,.et_pb_newsletter_button:after,.et_pb_pricing_table_button:after,.et_pb_promo_button:after,.et_pb_testimonial:before,.et_pb_toggle_title:before,.form-submit .et_pb_button:after,.mobile_menu_bar:before,a.et_pb_more_button:after{font-family:ETmodules!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-shadow:0 0;direction:ltr}.et-pb-icon,.et_pb_custom_button_icon.et_pb_button:after,.et_pb_login .et_pb_custom_button_icon.et_pb_button:after,.et_pb_woo_custom_button_icon .button.et_pb_custom_button_icon.et_pb_button:after,.et_pb_woo_custom_button_icon .button.et_pb_custom_button_icon.et_pb_button:hover:after{content:attr(data-icon)}.et-pb-icon{font-family:ETmodules;speak:none;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;font-size:96px;font-style:normal;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;direction:ltr}#et-ajax-saving{display:none;-webkit-transition:background .3s,-webkit-box-shadow .3s;transition:background .3s,-webkit-box-shadow .3s;transition:background .3s,box-shadow .3s;transition:background .3s,box-shadow .3s,-webkit-box-shadow .3s;-webkit-box-shadow:rgba(0,139,219,.247059) 0 0 60px;box-shadow:0 0 60px rgba(0,139,219,.247059);position:fixed;top:50%;left:50%;width:50px;height:50px;background:#fff;border-radius:50px;margin:-25px 0 0 -25px;z-index:999999;text-align:center}#et-ajax-saving img{margin:9px}.et-safe-mode-indicator,.et-safe-mode-indicator:focus,.et-safe-mode-indicator:hover{-webkit-box-shadow:0 5px 10px rgba(41,196,169,.15);box-shadow:0 5px 10px rgba(41,196,169,.15);background:#29c4a9;color:#fff;font-size:14px;font-weight:600;padding:12px;line-height:16px;border-radius:3px;position:fixed;bottom:30px;right:30px;z-index:999999;text-decoration:none;font-family:Open Sans,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.et_pb_button{font-size:20px;font-weight:500;padding:.3em 1em;line-height:1.7em!important;background-color:transparent;background-size:cover;background-position:50%;background-repeat:no-repeat;border:2px solid;border-radius:3px;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-property:all!important;transition-property:all!important}.et_pb_button,.et_pb_button_inner{position:relative}.et_pb_button:hover,.et_pb_module .et_pb_button:hover{border:2px solid transparent;padding:.3em 2em .3em .7em}.et_pb_button:hover{background-color:hsla(0,0%,100%,.2)}.et_pb_bg_layout_light.et_pb_button:hover,.et_pb_bg_layout_light .et_pb_button:hover{background-color:rgba(0,0,0,.05)}.et_pb_button:after,.et_pb_button:before{font-size:32px;line-height:1em;content:"\35";opacity:0;position:absolute;margin-left:-1em;-webkit-transition:all .2s;transition:all .2s;text-transform:none;-webkit-font-feature-settings:"kern" off;font-feature-settings:"kern" off;font-variant:none;font-style:normal;font-weight:400;text-shadow:none}.et_pb_button.et_hover_enabled:hover:after,.et_pb_button.et_pb_hovered:hover:after{-webkit-transition:none!important;transition:none!important}.et_pb_button:before{display:none}.et_pb_button:hover:after{opacity:1;margin-left:0}.et_pb_column_1_3 h1,.et_pb_column_1_4 h1,.et_pb_column_1_5 h1,.et_pb_column_1_6 h1,.et_pb_column_2_5 h1{font-size:26px}.et_pb_column_1_3 h2,.et_pb_column_1_4 h2,.et_pb_column_1_5 h2,.et_pb_column_1_6 h2,.et_pb_column_2_5 h2{font-size:23px}.et_pb_column_1_3 h3,.et_pb_column_1_4 h3,.et_pb_column_1_5 h3,.et_pb_column_1_6 h3,.et_pb_column_2_5 h3{font-size:20px}.et_pb_column_1_3 h4,.et_pb_column_1_4 h4,.et_pb_column_1_5 h4,.et_pb_column_1_6 h4,.et_pb_column_2_5 h4{font-size:18px}.et_pb_column_1_3 h5,.et_pb_column_1_4 h5,.et_pb_column_1_5 h5,.et_pb_column_1_6 h5,.et_pb_column_2_5 h5{font-size:16px}.et_pb_column_1_3 h6,.et_pb_column_1_4 h6,.et_pb_column_1_5 h6,.et_pb_column_1_6 h6,.et_pb_column_2_5 h6{font-size:15px}.et_pb_bg_layout_dark,.et_pb_bg_layout_dark h1,.et_pb_bg_layout_dark h2,.et_pb_bg_layout_dark h3,.et_pb_bg_layout_dark h4,.et_pb_bg_layout_dark h5,.et_pb_bg_layout_dark h6{color:#fff!important}.et_pb_module.et_pb_text_align_left{text-align:left}.et_pb_module.et_pb_text_align_center{text-align:center}.et_pb_module.et_pb_text_align_right{text-align:right}.et_pb_module.et_pb_text_align_justified{text-align:justify}.clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.et_pb_bg_layout_light .et_pb_more_button{color:#2ea3f2}.et_builder_inner_content{position:relative;z-index:1}header .et_builder_inner_content{z-index:2}.et_pb_css_mix_blend_mode_passthrough{mix-blend-mode:unset!important}.et_pb_image_container{margin:-20px -20px 29px}.et_pb_module_inner{position:relative}.et_hover_enabled_preview{z-index:2}.et_hover_enabled:hover{position:relative;z-index:2}.et_pb_all_tabs,.et_pb_module,.et_pb_posts_nav a,.et_pb_tab,.et_pb_with_background{position:relative;background-size:cover;background-position:50%;background-repeat:no-repeat}.et_pb_background_mask,.et_pb_background_pattern{bottom:0;left:0;position:absolute;right:0;top:0}.et_pb_background_mask{background-size:calc(100% + 2px) calc(100% + 2px);background-repeat:no-repeat;background-position:50%;overflow:hidden}.et_pb_background_pattern{background-position:0 0;background-repeat:repeat}.et_pb_with_border{position:relative;border:0 solid #333}.post-password-required .et_pb_row{padding:0;width:100%}.post-password-required .et_password_protected_form{min-height:0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_password_protected_form h1,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_password_protected_form h1{display:none}.et_pb_no_bg{padding:0!important}.et_overlay.et_pb_inline_icon:before,.et_pb_inline_icon:before{content:attr(data-icon)}.et_pb_more_button{color:inherit;text-shadow:none;text-decoration:none;display:inline-block;margin-top:20px}.et_parallax_bg_wrap{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0}.et_parallax_bg{background-repeat:no-repeat;background-position:top;background-size:cover;position:absolute;bottom:0;left:0;width:100%;height:100%;display:block}.et_parallax_bg.et_parallax_bg__hover,.et_parallax_bg.et_parallax_bg_phone,.et_parallax_bg.et_parallax_bg_tablet,.et_parallax_gradient.et_parallax_gradient__hover,.et_parallax_gradient.et_parallax_gradient_phone,.et_parallax_gradient.et_parallax_gradient_tablet,.et_pb_section_parallax_hover:hover .et_parallax_bg:not(.et_parallax_bg__hover),.et_pb_section_parallax_hover:hover .et_parallax_gradient:not(.et_parallax_gradient__hover){display:none}.et_pb_section_parallax_hover:hover .et_parallax_bg.et_parallax_bg__hover,.et_pb_section_parallax_hover:hover .et_parallax_gradient.et_parallax_gradient__hover{display:block}.et_parallax_gradient{bottom:0;display:block;left:0;position:absolute;right:0;top:0}.et_pb_module.et_pb_section_parallax,.et_pb_posts_nav a.et_pb_section_parallax,.et_pb_tab.et_pb_section_parallax{position:relative}.et_pb_section_parallax .et_pb_parallax_css,.et_pb_slides .et_parallax_bg.et_pb_parallax_css{background-attachment:fixed}body.et-bfb .et_pb_section_parallax .et_pb_parallax_css,body.et-bfb .et_pb_slides .et_parallax_bg.et_pb_parallax_css{background-attachment:scroll;bottom:auto}.et_pb_section_parallax.et_pb_column .et_pb_module,.et_pb_section_parallax.et_pb_row .et_pb_column,.et_pb_section_parallax.et_pb_row .et_pb_module{z-index:9;position:relative}.et_pb_more_button:hover:after{opacity:1;margin-left:0}.et_pb_preload .et_pb_section_video_bg,.et_pb_preload>div{visibility:hidden}.et_pb_preload,.et_pb_section.et_pb_section_video.et_pb_preload{position:relative;background:#464646!important}.et_pb_preload:before{content:"";position:absolute;top:50%;left:50%;background:url(https://zarc.web.za/wp-content/themes/Divi/includes/builder/styles/images/preloader.gif) no-repeat;border-radius:32px;width:32px;height:32px;margin:-16px 0 0 -16px}.box-shadow-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;pointer-events:none}.et_pb_section>.box-shadow-overlay~.et_pb_row{z-index:11}body.safari .section_has_divider{will-change:transform}.et_pb_row>.box-shadow-overlay{z-index:8}.has-box-shadow-overlay{position:relative}.et_clickable{cursor:pointer}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}.et_multi_view_hidden,.et_multi_view_hidden_image{display:none!important}@keyframes multi-view-image-fade{0%{opacity:0}10%{opacity:.1}20%{opacity:.2}30%{opacity:.3}40%{opacity:.4}50%{opacity:.5}60%{opacity:.6}70%{opacity:.7}80%{opacity:.8}90%{opacity:.9}to{opacity:1}}.et_multi_view_image__loading{visibility:hidden}.et_multi_view_image__loaded{-webkit-animation:multi-view-image-fade .5s;animation:multi-view-image-fade .5s}#et-pb-motion-effects-offset-tracker{visibility:hidden!important;opacity:0;position:absolute;top:0;left:0}.et-pb-before-scroll-animation{opacity:0}header.et-l.et-l--header:after{clear:both;display:block;content:""}.et_pb_module{-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes fadeBottom{0%{opacity:0;-webkit-transform:translateY(10%);transform:translateY(10%)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeBottom{0%{opacity:0;-webkit-transform:translateY(10%);transform:translateY(10%)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fadeLeft{0%{opacity:0;-webkit-transform:translateX(-10%);transform:translateX(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeLeft{0%{opacity:0;-webkit-transform:translateX(-10%);transform:translateX(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeRight{0%{opacity:0;-webkit-transform:translateX(10%);transform:translateX(10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeRight{0%{opacity:0;-webkit-transform:translateX(10%);transform:translateX(10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeTop{0%{opacity:0;-webkit-transform:translateY(-10%);transform:translateY(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeTop{0%{opacity:0;-webkit-transform:translateY(-10%);transform:translateY(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.et-waypoint:not(.et_pb_counters){opacity:0}@media (min-width:981px){.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_column .et_pb_module.et-last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_column .et_pb_module:last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_row_inner .et_pb_column .et_pb_module.et-last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_row_inner .et_pb_column .et_pb_module:last-child,.et_pb_section div.et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_pb_section div.et_pb_row .et_pb_column .et_pb_module:last-child{margin-bottom:0}}@media (max-width:980px){.et_overlay.et_pb_inline_icon_tablet:before,.et_pb_inline_icon_tablet:before{content:attr(data-icon-tablet)}.et_parallax_bg.et_parallax_bg_tablet_exist,.et_parallax_gradient.et_parallax_gradient_tablet_exist{display:none}.et_parallax_bg.et_parallax_bg_tablet,.et_parallax_gradient.et_parallax_gradient_tablet{display:block}.et_pb_column .et_pb_module{margin-bottom:30px}.et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_pb_row .et_pb_column .et_pb_module:last-child,.et_section_specialty .et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_section_specialty .et_pb_row .et_pb_column .et_pb_module:last-child{margin-bottom:0}.et_pb_more_button{display:inline-block!important}.et_pb_bg_layout_light_tablet.et_pb_button,.et_pb_bg_layout_light_tablet.et_pb_module.et_pb_button,.et_pb_bg_layout_light_tablet .et_pb_more_button{color:#2ea3f2}.et_pb_bg_layout_light_tablet .et_pb_forgot_password a{color:#666}.et_pb_bg_layout_light_tablet h1,.et_pb_bg_layout_light_tablet h2,.et_pb_bg_layout_light_tablet h3,.et_pb_bg_layout_light_tablet h4,.et_pb_bg_layout_light_tablet h5,.et_pb_bg_layout_light_tablet h6{color:#333!important}.et_pb_module .et_pb_bg_layout_light_tablet.et_pb_button{color:#2ea3f2!important}.et_pb_bg_layout_light_tablet{color:#666!important}.et_pb_bg_layout_dark_tablet,.et_pb_bg_layout_dark_tablet h1,.et_pb_bg_layout_dark_tablet h2,.et_pb_bg_layout_dark_tablet h3,.et_pb_bg_layout_dark_tablet h4,.et_pb_bg_layout_dark_tablet h5,.et_pb_bg_layout_dark_tablet h6{color:#fff!important}.et_pb_bg_layout_dark_tablet.et_pb_button,.et_pb_bg_layout_dark_tablet.et_pb_module.et_pb_button,.et_pb_bg_layout_dark_tablet .et_pb_more_button{color:inherit}.et_pb_bg_layout_dark_tablet .et_pb_forgot_password a{color:#fff}.et_pb_module.et_pb_text_align_left-tablet{text-align:left}.et_pb_module.et_pb_text_align_center-tablet{text-align:center}.et_pb_module.et_pb_text_align_right-tablet{text-align:right}.et_pb_module.et_pb_text_align_justified-tablet{text-align:justify}}@media (max-width:767px){.et_pb_more_button{display:inline-block!important}.et_overlay.et_pb_inline_icon_phone:before,.et_pb_inline_icon_phone:before{content:attr(data-icon-phone)}.et_parallax_bg.et_parallax_bg_phone_exist,.et_parallax_gradient.et_parallax_gradient_phone_exist{display:none}.et_parallax_bg.et_parallax_bg_phone,.et_parallax_gradient.et_parallax_gradient_phone{display:block}.et-hide-mobile{display:none!important}.et_pb_bg_layout_light_phone.et_pb_button,.et_pb_bg_layout_light_phone.et_pb_module.et_pb_button,.et_pb_bg_layout_light_phone .et_pb_more_button{color:#2ea3f2}.et_pb_bg_layout_light_phone .et_pb_forgot_password a{color:#666}.et_pb_bg_layout_light_phone h1,.et_pb_bg_layout_light_phone h2,.et_pb_bg_layout_light_phone h3,.et_pb_bg_layout_light_phone h4,.et_pb_bg_layout_light_phone h5,.et_pb_bg_layout_light_phone h6{color:#333!important}.et_pb_module .et_pb_bg_layout_light_phone.et_pb_button{color:#2ea3f2!important}.et_pb_bg_layout_light_phone{color:#666!important}.et_pb_bg_layout_dark_phone,.et_pb_bg_layout_dark_phone h1,.et_pb_bg_layout_dark_phone h2,.et_pb_bg_layout_dark_phone h3,.et_pb_bg_layout_dark_phone h4,.et_pb_bg_layout_dark_phone h5,.et_pb_bg_layout_dark_phone h6{color:#fff!important}.et_pb_bg_layout_dark_phone.et_pb_button,.et_pb_bg_layout_dark_phone.et_pb_module.et_pb_button,.et_pb_bg_layout_dark_phone .et_pb_more_button{color:inherit}.et_pb_module .et_pb_bg_layout_dark_phone.et_pb_button{color:#fff!important}.et_pb_bg_layout_dark_phone .et_pb_forgot_password a{color:#fff}.et_pb_module.et_pb_text_align_left-phone{text-align:left}.et_pb_module.et_pb_text_align_center-phone{text-align:center}.et_pb_module.et_pb_text_align_right-phone{text-align:right}.et_pb_module.et_pb_text_align_justified-phone{text-align:justify}}@media (max-width:479px){a.et_pb_more_button{display:block}}@media (min-width:768px) and (max-width:980px){[data-et-multi-view-load-tablet-hidden=true]:not(.et_multi_view_swapped){display:none!important}}@media (max-width:767px){[data-et-multi-view-load-phone-hidden=true]:not(.et_multi_view_swapped){display:none!important}}.et_pb_menu.et_pb_menu--style-inline_centered_logo .et_pb_menu__menu nav ul{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}@-webkit-keyframes multi-view-image-fade{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}50%{-webkit-transform:scale(1.01);transform:scale(1.01);opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@font-face{font-family:ETmodules;font-display:block;src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.eot);src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.eot?#iefix) format("embedded-opentype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.woff) format("woff"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.ttf) format("truetype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.svg#ETmodules) format("svg");font-weight:400;font-style:normal}@media (min-width:981px){.et_pb_gutters3 .et_pb_column,.et_pb_gutters3.et_pb_row .et_pb_column{margin-right:5.5%}.et_pb_gutters3 .et_pb_column_4_4,.et_pb_gutters3.et_pb_row .et_pb_column_4_4{width:100%}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_module{margin-bottom:2.75%}.et_pb_gutters3 .et_pb_column_3_4,.et_pb_gutters3.et_pb_row .et_pb_column_3_4{width:73.625%}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_module{margin-bottom:3.735%}.et_pb_gutters3 .et_pb_column_2_3,.et_pb_gutters3.et_pb_row .et_pb_column_2_3{width:64.833%}.et_pb_gutters3 .et_pb_column_2_3 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_module{margin-bottom:4.242%}.et_pb_gutters3 .et_pb_column_3_5,.et_pb_gutters3.et_pb_row .et_pb_column_3_5{width:57.8%}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_module{margin-bottom:4.758%}.et_pb_gutters3 .et_pb_column_1_2,.et_pb_gutters3.et_pb_row .et_pb_column_1_2{width:47.25%}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_module{margin-bottom:5.82%}.et_pb_gutters3 .et_pb_column_2_5,.et_pb_gutters3.et_pb_row .et_pb_column_2_5{width:36.7%}.et_pb_gutters3 .et_pb_column_2_5 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_module{margin-bottom:7.493%}.et_pb_gutters3 .et_pb_column_1_3,.et_pb_gutters3.et_pb_row .et_pb_column_1_3{width:29.6667%}.et_pb_gutters3 .et_pb_column_1_3 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_module{margin-bottom:9.27%}.et_pb_gutters3 .et_pb_column_1_4,.et_pb_gutters3.et_pb_row .et_pb_column_1_4{width:20.875%}.et_pb_gutters3 .et_pb_column_1_4 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_module{margin-bottom:13.174%}.et_pb_gutters3 .et_pb_column_1_5,.et_pb_gutters3.et_pb_row .et_pb_column_1_5{width:15.6%}.et_pb_gutters3 .et_pb_column_1_5 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_module{margin-bottom:17.628%}.et_pb_gutters3 .et_pb_column_1_6,.et_pb_gutters3.et_pb_row .et_pb_column_1_6{width:12.0833%}.et_pb_gutters3 .et_pb_column_1_6 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_module{margin-bottom:22.759%}.et_pb_gutters3 .et_full_width_page.woocommerce-page ul.products li.product{width:20.875%;margin-right:5.5%;margin-bottom:5.5%}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products li.product,.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products li.product{width:28.353%;margin-right:7.47%}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products.columns-1 li.product,.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products.columns-1 li.product{width:100%;margin-right:0}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products.columns-2 li.product,.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products.columns-2 li.product{width:48%;margin-right:4%}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products.columns-2 li:nth-child(2n+2),.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products.columns-2 li:nth-child(2n+2){margin-right:0}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products.columns-2 li:nth-child(3n+1),.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products.columns-2 li:nth-child(3n+1){clear:none}}@media (min-width:981px){.et_pb_gutters3 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters3 .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters3 .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child,.et_pb_gutters3.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters3.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters3.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child{margin-bottom:30px}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_4_4 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_widget{width:20.875%;margin-right:5.5%;margin-bottom:5.5%}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3{width:29.667%;margin-right:5.5%}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post{margin-bottom:18.539%}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_3_4 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_widget{width:28.353%;margin-right:7.47%;margin-bottom:7.47%}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2{width:46.265%;margin-right:7.47%}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:14.941%}.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_widget{width:45.758%;margin-right:8.483%;margin-bottom:8.483%}.et_pb_gutters3 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2{width:45.758%;margin-right:8.483%}.et_pb_gutters3 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:16.967%}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_3_5 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_widget{width:45.242%;margin-right:9.516%;margin-bottom:9.516%}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:9.516%}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_2 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_widget{width:44.18%;margin-right:11.64%;margin-bottom:11.64%}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:11.64%}.et_pb_gutters3 .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_2_5 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_widget{width:100%;margin-bottom:14.986%}.et_pb_gutters3 .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_3 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_widget{width:100%;margin-bottom:18.539%}.et_pb_gutters3 .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_4 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_widget{width:100%;margin-bottom:26.347%}.et_pb_gutters3 .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_5 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_widget{width:100%;margin-bottom:35.256%}.et_pb_gutters3 .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_6 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_widget{width:100%;margin-bottom:45.517%}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_widget:nth-child(4n),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n){margin-right:0}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1){clear:both}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_widget:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n){margin-right:0}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1){clear:both}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_widget:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_widget:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3 .et_pb_column_3_5 .et_pb_widget:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3 .et_pb_column_3_5 .et_pb_widget:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters3 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}}@media (min-width:981px){.et_pb_gutter.et_pb_gutters1 #left-area{width:75%}.et_pb_gutter.et_pb_gutters1 #sidebar{width:25%}.et_pb_gutters1.et_right_sidebar #left-area{padding-right:0}.et_pb_gutters1.et_left_sidebar #left-area{padding-left:0}.et_pb_gutter.et_pb_gutters1.et_right_sidebar #main-content .container:before{right:25%!important}.et_pb_gutter.et_pb_gutters1.et_left_sidebar #main-content .container:before{left:25%!important}.et_pb_gutters1 .et_pb_column,.et_pb_gutters1.et_pb_row .et_pb_column{margin-right:0}.et_pb_gutters1 .et_pb_column_4_4,.et_pb_gutters1.et_pb_row .et_pb_column_4_4{width:100%}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_4,.et_pb_gutters1.et_pb_row .et_pb_column_3_4{width:75%}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_2_3,.et_pb_gutters1.et_pb_row .et_pb_column_2_3{width:66.667%}.et_pb_gutters1 .et_pb_column_2_3 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_5,.et_pb_gutters1.et_pb_row .et_pb_column_3_5{width:60%}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2,.et_pb_gutters1.et_pb_row .et_pb_column_1_2{width:50%}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_2_5,.et_pb_gutters1.et_pb_row .et_pb_column_2_5{width:40%}.et_pb_gutters1 .et_pb_column_2_5 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_3,.et_pb_gutters1.et_pb_row .et_pb_column_1_3{width:33.3333%}.et_pb_gutters1 .et_pb_column_1_3 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_4,.et_pb_gutters1.et_pb_row .et_pb_column_1_4{width:25%}.et_pb_gutters1 .et_pb_column_1_4 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_5,.et_pb_gutters1.et_pb_row .et_pb_column_1_5{width:20%}.et_pb_gutters1 .et_pb_column_1_5 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_6,.et_pb_gutters1.et_pb_row .et_pb_column_1_6{width:16.6667%}.et_pb_gutters1 .et_pb_column_1_6 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_full_width_page.woocommerce-page ul.products li.product{width:25%;margin-right:0;margin-bottom:0}.et_pb_gutters1.et_left_sidebar.woocommerce-page #main-content ul.products li.product,.et_pb_gutters1.et_right_sidebar.woocommerce-page #main-content ul.products li.product{width:33.333%;margin-right:0}}@media (max-width:980px){.et_pb_gutters1 .et_pb_column,.et_pb_gutters1 .et_pb_column .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5{width:50%;margin-right:0}.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6{width:33.333%;margin-right:0}.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6{width:50%;margin-right:0}}@media (max-width:767px){.et_pb_gutters1 .et_pb_column,.et_pb_gutters1 .et_pb_column .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_module{margin-bottom:0}}@media (max-width:479px){.et_pb_gutters1 .et_pb_column,.et_pb_gutters1.et_pb_row .et_pb_column{margin:0!important}.et_pb_gutters1 .et_pb_column .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_module{margin-bottom:0}}@media (min-width:981px){.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child{margin-bottom:30px}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_4_4 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_widget{width:25%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3{width:33.333%;margin-right:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_3_4 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_widget{width:33.333%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2{width:50%;margin-right:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_widget{width:50%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2{width:50%;margin-right:0}.et_pb_gutters1 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_3_5 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_widget{width:50%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_2 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_widget{width:50%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_3 .et_pb_widget,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_2_5 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_widget{width:100%;margin-bottom:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_widget:nth-child(4n),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n){margin-right:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1){clear:both}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_widget:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n){margin-right:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1){clear:both}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_widget:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_widget:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1 .et_pb_column_3_5 .et_pb_widget:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1 .et_pb_column_3_5 .et_pb_widget:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters1 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_portfolio_grid .et_pb_grid_item .et_pb_module_header:last-child,.et_pb_gutters1 .et_pb_portfolio_grid .et_pb_grid_item h2:last-child{line-height:normal}}@media (max-width:980px){.et_pb_gutters1 .et_pb_column .et_pb_grid_item,.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product{margin:0;width:33.333%}.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_column .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_widget{width:50%}.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_widget{margin:0;width:100%}.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_column .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_widget{margin:0}}@media (max-width:767px){.et_pb_gutters1 .et_pb_column .et_pb_grid_item,.et_pb_gutters1 .et_pb_column .et_pb_grid_item.et_pb_portfolio_item,.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.et_pb_portfolio_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product{margin:0;width:50%}.et_pb_gutters1 .et_pb_column .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters1 .et_pb_column .et_pb_grid_item:nth-child(3n),.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n){margin-right:0}.et_pb_gutters1 .et_pb_column .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters1 .et_pb_column .et_pb_grid_item:nth-child(3n+1),.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1){clear:none}.et_pb_gutters1 .et_pb_column .et_pb_grid_item.et_pb_portfolio_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.et_pb_portfolio_item{margin:0;width:100%}.et_pb_gutters1 .et_pb_column .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item{margin:0;width:50%}.et_pb_gutters1 .et_pb_column .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_widget{margin:0;width:100%}}@media (max-width:479px){.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column .et_pb_grid_item,.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_widget{width:100%;margin:0}}@media (min-width:981px){.et_pb_gutter.et_pb_gutters2 #left-area{width:77.25%}.et_pb_gutter.et_pb_gutters2 #sidebar{width:22.75%}.et_pb_gutters2.et_right_sidebar #left-area{padding-right:3%}.et_pb_gutters2.et_left_sidebar #left-area{padding-left:3%}.et_pb_gutter.et_pb_gutters2.et_right_sidebar #main-content .container:before{right:22.75%!important}.et_pb_gutter.et_pb_gutters2.et_left_sidebar #main-content .container:before{left:22.75%!important}.et_pb_gutters2 .et_pb_column,.et_pb_gutters2.et_pb_row .et_pb_column{margin-right:3%}.et_pb_gutters2 .et_pb_column_4_4,.et_pb_gutters2.et_pb_row .et_pb_column_4_4{width:100%}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_module{margin-bottom:1.5%}.et_pb_gutters2 .et_pb_column_3_4,.et_pb_gutters2.et_pb_row .et_pb_column_3_4{width:74.25%}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_module{margin-bottom:2.02%}.et_pb_gutters2 .et_pb_column_2_3,.et_pb_gutters2.et_pb_row .et_pb_column_2_3{width:65.667%}.et_pb_gutters2 .et_pb_column_2_3 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_module{margin-bottom:2.284%}.et_pb_gutters2 .et_pb_column_3_5,.et_pb_gutters2.et_pb_row .et_pb_column_3_5{width:58.8%}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_module{margin-bottom:2.551%}.et_pb_gutters2 .et_pb_column_1_2,.et_pb_gutters2.et_pb_row .et_pb_column_1_2{width:48.5%}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_module{margin-bottom:3.093%}.et_pb_gutters2 .et_pb_column_2_5,.et_pb_gutters2.et_pb_row .et_pb_column_2_5{width:38.2%}.et_pb_gutters2 .et_pb_column_2_5 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_module{margin-bottom:3.927%}.et_pb_gutters2 .et_pb_column_1_3,.et_pb_gutters2.et_pb_row .et_pb_column_1_3{width:31.3333%}.et_pb_gutters2 .et_pb_column_1_3 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_module{margin-bottom:4.787%}.et_pb_gutters2 .et_pb_column_1_4,.et_pb_gutters2.et_pb_row .et_pb_column_1_4{width:22.75%}.et_pb_gutters2 .et_pb_column_1_4 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_module{margin-bottom:6.593%}.et_pb_gutters2 .et_pb_column_1_5,.et_pb_gutters2.et_pb_row .et_pb_column_1_5{width:17.6%}.et_pb_gutters2 .et_pb_column_1_5 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_module{margin-bottom:8.523%}.et_pb_gutters2 .et_pb_column_1_6,.et_pb_gutters2.et_pb_row .et_pb_column_1_6{width:14.1667%}.et_pb_gutters2 .et_pb_column_1_6 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_module{margin-bottom:10.588%}.et_pb_gutters2 .et_full_width_page.woocommerce-page ul.products li.product{width:22.75%;margin-right:3%;margin-bottom:3%}.et_pb_gutters2.et_left_sidebar.woocommerce-page #main-content ul.products li.product,.et_pb_gutters2.et_right_sidebar.woocommerce-page #main-content ul.products li.product{width:30.64%;margin-right:4.04%}}@media (min-width:981px){.et_pb_gutters2 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters2 .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters2 .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child,.et_pb_gutters2.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters2.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters2.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child{margin-bottom:30px}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_4_4 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_widget{width:22.75%;margin-right:3%;margin-bottom:3%}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3{width:31.333%;margin-right:3%}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post{margin-bottom:9.574%}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_3_4 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_widget{width:30.64%;margin-right:4.04%;margin-bottom:4.04%}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2{width:47.98%;margin-right:4.04%}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:8.081%}.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_widget{width:47.716%;margin-right:4.569%;margin-bottom:4.569%}.et_pb_gutters2 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2{width:47.716%;margin-right:4.569%}.et_pb_gutters2 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:9.137%}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_3_5 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_widget{width:47.449%;margin-right:5.102%;margin-bottom:5.102%}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:5.102%}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_2 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_widget{width:46.907%;margin-right:6.186%;margin-bottom:6.186%}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:6.186%}.et_pb_gutters2 .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_2_5 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_widget{width:100%;margin-bottom:7.853%}.et_pb_gutters2 .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_3 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_widget{width:100%;margin-bottom:9.574%}.et_pb_gutters2 .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_4 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_widget{width:100%;margin-bottom:13.187%}.et_pb_gutters2 .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_5 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_widget{width:100%;margin-bottom:17.045%}.et_pb_gutters2 .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_6 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_widget{width:100%;margin-bottom:21.176%}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_widget:nth-child(4n),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n){margin-right:0}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1){clear:both}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_widget:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n){margin-right:0}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1){clear:both}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_widget:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_widget:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2 .et_pb_column_3_5 .et_pb_widget:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2 .et_pb_column_3_5 .et_pb_widget:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters2 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}}.et_pb_widget{float:left;max-width:100%;word-wrap:break-word}.et_pb_widget a{text-decoration:none;color:#666}.et_pb_widget li a:hover{color:#82c0c7}.et_pb_widget ol li,.et_pb_widget ul li{margin-bottom:.5em}.et_pb_widget ol li ol li,.et_pb_widget ul li ul li{margin-left:15px}.et_pb_widget select{width:100%;height:28px;padding:0 5px}.et_pb_widget_area .et_pb_widget a{color:inherit}.et_pb_bg_layout_light .et_pb_widget li a{color:#666}.et_pb_bg_layout_dark .et_pb_widget li a{color:inherit}.et_pb_scroll_top.et-pb-icon{text-align:center;background:rgba(0,0,0,0.4);text-decoration:none;position:fixed;z-index:99999;bottom:125px;right:0px;-webkit-border-top-left-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-bottomleft:5px;border-top-left-radius:5px;border-bottom-left-radius:5px;display:none;cursor:pointer;font-size:30px;padding:5px;color:#fff}.et_pb_scroll_top:before{content:'2'}.et_pb_scroll_top.et-visible{opacity:1;-webkit-animation:fadeInRight 1s 1 cubic-bezier(0.77, 0, 0.175, 1);animation:fadeInRight 1s 1 cubic-bezier(0.77, 0, 0.175, 1)}.et_pb_scroll_top.et-hidden{opacity:0;-webkit-animation:fadeOutRight 1s 1 cubic-bezier(0.77, 0, 0.175, 1);animation:fadeOutRight 1s 1 cubic-bezier(0.77, 0, 0.175, 1)}@-webkit-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;font-display:block;src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.eot);src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.woff2) format("woff2"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.woff) format("woff"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.ttf) format("truetype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.svg#fontawesome) format("svg")}@font-face{font-family:FontAwesome;font-style:normal;font-weight:900;font-display:block;src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.eot);src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.woff2) format("woff2"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.woff) format("woff"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.ttf) format("truetype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.svg#fontawesome) format("svg")}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;font-display:block;src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.eot);src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.woff2) format("woff2"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.woff) format("woff"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.ttf) format("truetype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.svg#fontawesome) format("svg")}.et_pb_section{position:relative;background-color:#fff;background-position:50%;background-size:100%;background-size:cover}.et_pb_section--absolute,.et_pb_section--fixed{width:100%}.et_pb_section.et_section_transparent{background-color:transparent}.et_pb_fullwidth_section{padding:0}.et_pb_fullwidth_section>.et_pb_module:not(.et_pb_post_content):not(.et_pb_fullwidth_post_content) .et_pb_row{padding:0!important}.et_pb_inner_shadow{-webkit-box-shadow:inset 0 0 7px rgba(0,0,0,.07);box-shadow:inset 0 0 7px rgba(0,0,0,.07)}.et_pb_bottom_inside_divider,.et_pb_top_inside_divider{display:block;background-repeat-y:no-repeat;height:100%;position:absolute;pointer-events:none;width:100%;left:0;right:0}.et_pb_bottom_inside_divider.et-no-transition,.et_pb_top_inside_divider.et-no-transition{-webkit-transition:none!important;transition:none!important}.et-fb .section_has_divider.et_fb_element_controls_visible--child>.et_pb_bottom_inside_divider,.et-fb .section_has_divider.et_fb_element_controls_visible--child>.et_pb_top_inside_divider{z-index:1}.et_pb_section_video:not(.et_pb_section--with-menu){overflow:hidden;position:relative}.et_pb_column>.et_pb_section_video_bg{z-index:-1}.et_pb_section_video_bg{visibility:visible;position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;display:block;pointer-events:none;-webkit-transition:display .3s;transition:display .3s}.et_pb_section_video_bg.et_pb_section_video_bg_hover,.et_pb_section_video_bg.et_pb_section_video_bg_phone,.et_pb_section_video_bg.et_pb_section_video_bg_tablet,.et_pb_section_video_bg.et_pb_section_video_bg_tablet_only{display:none}.et_pb_section_video_bg .mejs-controls,.et_pb_section_video_bg .mejs-overlay-play{display:none!important}.et_pb_section_video_bg embed,.et_pb_section_video_bg iframe,.et_pb_section_video_bg object,.et_pb_section_video_bg video{max-width:none}.et_pb_section_video_bg .mejs-video{left:50%;position:absolute;max-width:none}.et_pb_section_video_bg .mejs-overlay-loading{display:none!important}.et_pb_social_network_link .et_pb_section_video{overflow:visible}.et_pb_section_video_on_hover:hover>.et_pb_section_video_bg{display:none}.et_pb_section_video_on_hover:hover>.et_pb_section_video_bg_hover,.et_pb_section_video_on_hover:hover>.et_pb_section_video_bg_hover_inherit{display:block}@media (min-width:981px){.et_pb_section{padding:4% 0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_pb_section,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_pb_section{padding-top:0}.et_pb_fullwidth_section{padding:0}.et_pb_section_video_bg.et_pb_section_video_bg_desktop_only{display:block}}@media (max-width:980px){.et_pb_section{padding:50px 0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_pb_section,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_pb_section{padding-top:0}.et_pb_fullwidth_section{padding:0}.et_pb_section_video_bg.et_pb_section_video_bg_tablet{display:block}.et_pb_section_video_bg.et_pb_section_video_bg_desktop_only{display:none}}@media (min-width:768px){.et_pb_section_video_bg.et_pb_section_video_bg_desktop_tablet{display:block}}@media (min-width:768px) and (max-width:980px){.et_pb_section_video_bg.et_pb_section_video_bg_tablet_only{display:block}}@media (max-width:767px){.et_pb_section_video_bg.et_pb_section_video_bg_phone{display:block}.et_pb_section_video_bg.et_pb_section_video_bg_desktop_tablet{display:none}}.et_pb_row{width:80%;max-width:1080px;margin:auto;position:relative}body.safari .section_has_divider,body.uiwebview .section_has_divider{-webkit-perspective:2000px;perspective:2000px}.section_has_divider .et_pb_row{z-index:5}.et_pb_row_inner{width:100%;position:relative}.et_pb_row.et_pb_row_empty,.et_pb_row_inner:nth-of-type(n+2).et_pb_row_empty{display:none}.et_pb_row:after,.et_pb_row_inner:after{content:"";display:block;clear:both;visibility:hidden;line-height:0;height:0;width:0}.et_pb_row_4col .et-last-child,.et_pb_row_4col .et-last-child-2,.et_pb_row_6col .et-last-child,.et_pb_row_6col .et-last-child-2,.et_pb_row_6col .et-last-child-3{margin-bottom:0}.et_pb_column{float:left;background-size:cover;background-position:50%;position:relative;z-index:2;min-height:1px}.et_pb_column--with-menu{z-index:3}.et_pb_column.et_pb_column_empty{min-height:1px}.et_pb_row .et_pb_column.et-last-child,.et_pb_row .et_pb_column:last-child,.et_pb_row_inner .et_pb_column.et-last-child,.et_pb_row_inner .et_pb_column:last-child{margin-right:0!important}.et_pb_column.et_pb_section_parallax{position:relative}.et_pb_column,.et_pb_row,.et_pb_row_inner{background-size:cover;background-position:50%;background-repeat:no-repeat}@media (min-width:981px){.et_pb_row{padding:2% 0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_pb_row,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_pb_row{padding:0;width:100%}.et_pb_column_3_4 .et_pb_row_inner{padding:3.735% 0}.et_pb_column_2_3 .et_pb_row_inner{padding:4.2415% 0}.et_pb_column_1_2 .et_pb_row_inner,.et_pb_column_3_5 .et_pb_row_inner{padding:5.82% 0}.et_section_specialty>.et_pb_row{padding:0}.et_pb_row_inner{width:100%}.et_pb_column_single{padding:2.855% 0}.et_pb_column_single .et_pb_module.et-first-child,.et_pb_column_single .et_pb_module:first-child{margin-top:0}.et_pb_column_single .et_pb_module.et-last-child,.et_pb_column_single .et_pb_module:last-child{margin-bottom:0}.et_pb_row .et_pb_column.et-last-child,.et_pb_row .et_pb_column:last-child,.et_pb_row_inner .et_pb_column.et-last-child,.et_pb_row_inner .et_pb_column:last-child{margin-right:0!important}.et_pb_row.et_pb_equal_columns,.et_pb_row_inner.et_pb_equal_columns,.et_pb_section.et_pb_equal_columns>.et_pb_row{display:-webkit-box;display:-ms-flexbox;display:flex}.rtl .et_pb_row.et_pb_equal_columns,.rtl .et_pb_row_inner.et_pb_equal_columns,.rtl .et_pb_section.et_pb_equal_columns>.et_pb_row{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.et_pb_row.et_pb_equal_columns>.et_pb_column,.et_pb_section.et_pb_equal_columns>.et_pb_row>.et_pb_column{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}}@media (max-width:980px){.et_pb_row{max-width:1080px}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_pb_row,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_pb_row{padding:0;width:100%}.et_pb_column .et_pb_row_inner,.et_pb_row{padding:30px 0}.et_section_specialty>.et_pb_row{padding:0}.et_pb_column{width:100%;margin-bottom:30px}.et_pb_bottom_divider .et_pb_row:nth-last-child(2) .et_pb_column:last-child,.et_pb_row .et_pb_column.et-last-child,.et_pb_row .et_pb_column:last-child{margin-bottom:0}.et_section_specialty .et_pb_row>.et_pb_column{padding-bottom:0}.et_pb_column.et_pb_column_empty{display:none}.et_pb_row_1-2_1-4_1-4,.et_pb_row_1-2_1-6_1-6_1-6,.et_pb_row_1-4_1-4,.et_pb_row_1-4_1-4_1-2,.et_pb_row_1-5_1-5_3-5,.et_pb_row_1-6_1-6_1-6,.et_pb_row_1-6_1-6_1-6_1-2,.et_pb_row_1-6_1-6_1-6_1-6,.et_pb_row_3-5_1-5_1-5,.et_pb_row_4col,.et_pb_row_5col,.et_pb_row_6col{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4,.et_pb_row_4col>.et_pb_column.et_pb_column_1_4{width:47.25%;margin-right:5.5%}.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4:nth-child(2n),.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4:nth-child(2n),.et_pb_row_4col>.et_pb_column.et_pb_column_1_4:nth-child(2n){margin-right:0}.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4{width:47.25%;margin-right:5.5%}.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_2,.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4:nth-child(odd){margin-right:0}.et_pb_row_1-2_1-4_1-4 .et_pb_column:nth-last-child(-n+2),.et_pb_row_1-4_1-4 .et_pb_column:nth-last-child(-n+2),.et_pb_row_4col .et_pb_column:nth-last-child(-n+2){margin-bottom:0}.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5,.et_pb_row_5col>.et_pb_column.et_pb_column_1_5{width:47.25%;margin-right:5.5%}.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5:nth-child(2n),.et_pb_row_5col>.et_pb_column.et_pb_column_1_5:nth-child(2n){margin-right:0}.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5{width:47.25%;margin-right:5.5%}.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5:nth-child(odd),.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_3_5{margin-right:0}.et_pb_row_3-5_1-5_1-5 .et_pb_column:nth-last-child(-n+2),.et_pb_row_5col .et_pb_column:last-child{margin-bottom:0}.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6,.et_pb_row_6col>.et_pb_column.et_pb_column_1_6{width:29.666%;margin-right:5.5%}.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6:nth-child(3n),.et_pb_row_6col>.et_pb_column.et_pb_column_1_6:nth-child(3n){margin-right:0}.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6{width:29.666%;margin-right:5.5%}.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_2,.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6:last-child{margin-right:0}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2,.et_pb_row_1-2_1-6_1-6_1-6 .et_pb_column:nth-last-child(-n+3),.et_pb_row_6col .et_pb_column:nth-last-child(-n+3){margin-bottom:0}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6{width:29.666%;margin-right:5.5%;margin-bottom:0}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6:last-child{margin-right:0}.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6{width:47.25%;margin-right:5.5%}.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6:nth-child(2n){margin-right:0}.et_pb_row_1-6_1-6_1-6_1-6:nth-last-child(-n+3){margin-bottom:0}}@media (max-width:479px){.et_pb_row .et_pb_column.et_pb_column_1_4,.et_pb_row .et_pb_column.et_pb_column_1_5,.et_pb_row .et_pb_column.et_pb_column_1_6{width:100%;margin:0 0 30px}.et_pb_row .et_pb_column.et_pb_column_1_4.et-last-child,.et_pb_row .et_pb_column.et_pb_column_1_4:last-child,.et_pb_row .et_pb_column.et_pb_column_1_5.et-last-child,.et_pb_row .et_pb_column.et_pb_column_1_5:last-child,.et_pb_row .et_pb_column.et_pb_column_1_6.et-last-child,.et_pb_row .et_pb_column.et_pb_column_1_6:last-child{margin-bottom:0}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6{width:100%;margin:0 0 30px}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6.et-last-child,.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6:last-child{margin-bottom:0}.et_pb_column{width:100%!important}}ul.et_pb_social_media_follow{list-style-type:none!important;margin:0 0 22px;padding:0}.et_pb_social_media_follow li{display:inline-block;margin-bottom:8px;position:relative}.et_pb_social_media_follow li a{margin-right:8px;display:inline-block;text-decoration:none;text-align:center;position:relative}.et_pb_social_media_follow li a.follow_button{padding:0 12px;margin-top:5px;margin-right:25px;font-size:14px;line-height:1.6em;background:rgba(0,0,0,.1);color:rgba(0,0,0,.5);border-radius:3px;border-width:0;border-style:solid;-webkit-transition:all .3s;transition:all .3s}.et_pb_social_media_follow li.last-child a,.et_pb_social_media_follow li:last-child a{margin-right:0}.et_pb_social_media_follow.has_follow_button li.last-child a.icon,.et_pb_social_media_follow.has_follow_button li:last-child a.icon{margin-right:8px}.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.2);color:rgba(0,0,0,.6)}.et_pb_social_media_follow.et_pb_bg_layout_dark li a.follow_button{background:rgba(0,0,0,.6);color:hsla(0,0%,100%,.8)}.et_pb_social_media_follow.et_pb_bg_layout_dark li a.follow_button:hover{background:rgba(0,0,0,.7);color:#fff}.et_pb_social_media_follow li a.icon{height:32px;width:32px;padding:0;-webkit-box-sizing:content-box;box-sizing:content-box}.et_pb_social_media_follow li a.icon:before{height:32px;width:32px;font-size:16px;line-height:32px;display:block;color:#fff;-webkit-transition:color .3s;transition:color .3s;position:relative;z-index:10}.et_pb_social_media_follow li a.icon:hover:before{color:hsla(0,0%,100%,.7)}.et_pb_social_media_follow li a.icon{border-radius:3px}.et_pb_social_media_follow_network_name{display:none}.et_pb_social_icon a.icon{vertical-align:middle}.et_pb_social_icon a.icon:before{font-family:ETmodules;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-shadow:0 0;direction:ltr}.et-pb-social-fa-icon a.icon:before{font-family:FontAwesome}.et-social-telegram a.icon:before{content:"\F3FE"}.et-social-amazon a.icon:before{content:"\F270"}.et-social-bandcamp a.icon:before{content:"\F2D5"}.et-social-bitbucket a.icon:before{content:"\F171"}.et-social-behance a.icon:before{content:"\F1B4"}.et-social-buffer a.icon:before{content:"\F837"}.et-social-codepen a.icon:before{content:"\F1CB"}.et-social-deviantart a.icon:before{content:"\F1BD"}.et-social-flipboard a.icon:before{content:"\F44D"}.et-social-foursquare a.icon:before{content:"\F180"}.et-social-github a.icon:before{content:"\F09B"}.et-social-goodreads a.icon:before{content:"\F3A9"}.et-social-google a.icon:before{content:"\F1A0"}.et-social-houzz a.icon:before{content:"\F27C"}.et-social-itunes a.icon:before{content:"\F3B5"}.et-social-last_fm a.icon:before{content:"\F202"}.et-social-line a.icon:before{content:"\F3C0"}.et-social-medium a.icon:before,.et-social-meetup a.icon:before{content:"\F3C7"}.et-social-odnoklassniki a.icon:before{content:"\F263"}.et-social-patreon a.icon:before{content:"\F3D9"}.et-social-periscope a.icon:before{content:"\F3DA"}.et-social-quora a.icon:before{content:"\F2C4"}.et-social-researchgate a.icon:before{content:"\F4F8"}.et-social-reddit a.icon:before{content:"\F281"}.et-social-snapchat a.icon:before{content:"\F2AC"}.et-social-soundcloud a.icon:before{content:"\F1BE"}.et-social-spotify a.icon:before{content:"\F1BC"}.et-social-steam a.icon:before{content:"\F3F6"}.et-social-tripadvisor a.icon:before{content:"\F262"}.et-social-tiktok a.icon:before{content:"\E07B"}.et-social-twitch a.icon:before{content:"\F1E8"}.et-social-vk a.icon:before{content:"\F189"}.et-social-weibo a.icon:before{content:"\F18A"}.et-social-whatsapp a.icon:before{content:"\F232"}.et-social-xing a.icon:before{content:"\F168"}.et-social-yelp a.icon:before{content:"\F1E9"}.et-social-pinterest a.icon:before{content:"\E095"}.et-social-linkedin a.icon:before{content:"\E09D"}.et-social-tumblr a.icon:before{content:"\E097"}.et-social-skype a.icon:before{content:"\E0A2"}.et-social-flikr a.icon:before{content:"\E0A6"}.et-social-myspace a.icon:before{content:"\E0A1"}.et-social-dribbble a.icon:before{content:"\E09B"}.et-social-youtube a.icon:before{content:"\E0A3"}.et-social-vimeo a.icon:before{content:"\E09C"}@media (max-width:980px){.et_pb_bg_layout_light_tablet.et_pb_social_media_follow li a.follow_button{background:rgba(0,0,0,.1);color:rgba(0,0,0,.5)}.et_pb_bg_layout_light_tablet.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.2);color:rgba(0,0,0,.6)}.et_pb_bg_layout_dark_tablet.et_pb_social_media_follow li a.follow_button{background:rgba(0,0,0,.6);color:hsla(0,0%,100%,.8)}.et_pb_bg_layout_dark_tablet.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.7);color:#fff}}@media (max-width:767px){.et_pb_bg_layout_light_phone.et_pb_social_media_follow li a.follow_button{background:rgba(0,0,0,.1);color:rgba(0,0,0,.5)}.et_pb_bg_layout_light_phone.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.2);color:rgba(0,0,0,.6)}.et_pb_bg_layout_dark_phone.et_pb_social_media_follow li a.follow_button{background:rgba(0,0,0,.6);color:hsla(0,0%,100%,.8)}.et_pb_bg_layout_dark_phone.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.7);color:#fff}}.rtl .et_pb_social_media_follow li a{margin-left:8px;margin-right:0}.et_pb_code_inner{position:relative}.et_pb_search .screen-reader-text{display:none}.et_pb_search{border:1px solid #ddd;border-radius:3px;overflow:hidden}.et_pb_search input.et_pb_s,.et_pb_search input.et_pb_searchsubmit{padding:.715em;margin:0;font-size:14px;line-height:normal!important;border:none;color:#666}.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#666}.et_pb_search input.et_pb_s::-moz-placeholder{color:#666}.et_pb_search input.et_pb_s:-ms-input-placeholder{color:#666}.et_pb_search input.et_pb_s{-webkit-appearance:none;background:transparent;display:inline-block;padding-right:80px;-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.et_pb_search .et_pb_searchform{position:relative}.et_pb_search .et_pb_searchform>div{display:-webkit-box;display:-ms-flexbox;display:flex}.et_pb_search input.et_pb_searchsubmit{min-height:100%!important;background-color:#ddd;cursor:pointer}.et_pb_search.et_pb_text_align_right .et_pb_searchform>div{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.et_pb_search.et_pb_text_align_right input.et_pb_s{text-align:right;padding-left:80px;padding-right:.7em}.et_pb_search.et_pb_text_align_center input.et_pb_s{text-align:center}.et_pb_search.et_pb_hide_search_button input.et_pb_searchsubmit{display:none}.et_pb_search.et_pb_hide_search_button input.et_pb_s{padding-left:.7em;padding-right:.7em}.et_pb_search.et_pb_bg_layout_dark input.et_pb_s{color:#fff;border:2px solid #fff}.et_pb_search.et_pb_bg_layout_dark input.et_pb_s::-webkit-input-placeholder{color:#fff}.et_pb_search.et_pb_bg_layout_dark input.et_pb_s::-moz-placeholder{color:#fff}.et_pb_search.et_pb_bg_layout_dark input.et_pb_s:-ms-input-placeholder{color:#fff}.et_pb_search.et_pb_bg_layout_dark input.et_pb_searchsubmit{background-color:transparent;color:#fff;font-weight:500;border:2px solid #fff}@media (max-width:980px){.et_pb_bg_layout_light_tablet.et_pb_search input.et_pb_s{border:none;color:#666}.et_pb_bg_layout_light_tablet.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#666}.et_pb_bg_layout_light_tablet.et_pb_search input.et_pb_searchsubmit{border:none;color:#666;background-color:#ddd}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_s{color:#fff;border:2px solid #fff}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#fff}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_s::-moz-placeholder{color:#fff}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_s:-ms-input-placeholder{color:#fff}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_searchsubmit{background-color:transparent;color:#fff;font-weight:500;border:2px solid #fff}.et_pb_search.et_pb_text_align_right-tablet .et_pb_searchform>div{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.et_pb_search.et_pb_text_align_right-tablet input.et_pb_s{text-align:right;padding-left:80px;padding-right:.7em}.et_pb_search.et_pb_text_align_center-tablet input.et_pb_s{text-align:center}.et_pb_search.et_pb_text_align_left-tablet .et_pb_searchsubmit{left:auto}.et_pb_search.et_pb_text_align_left-tablet input.et_pb_s{text-align:left;padding-left:.715em}.et_pb_search.et_pb_text_align_center-tablet input.et_pb_s{padding-left:.715em;padding-right:.715em}}@media (max-width:767px){.et_pb_bg_layout_light_phone.et_pb_search input.et_pb_s{border:none;color:#666}.et_pb_bg_layout_light_phone.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#666}.et_pb_bg_layout_light_phone.et_pb_search input.et_pb_searchsubmit{border:none;color:#666;background-color:#ddd}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_s{color:#fff;border:2px solid #fff}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#fff}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_s::-moz-placeholder{color:#fff}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_s:-ms-input-placeholder{color:#fff}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_searchsubmit{background-color:transparent;color:#fff;font-weight:500;border:2px solid #fff}.et_pb_search.et_pb_text_align_right-phone .et_pb_searchform>div{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.et_pb_search.et_pb_text_align_right-phone input.et_pb_s{text-align:right;padding-left:80px;padding-right:.7em}.et_pb_search.et_pb_text_align_center-phone input.et_pb_s{text-align:center}.et_pb_search.et_pb_text_align_left-tablet .et_pb_searchsubmit{left:auto}.et_pb_search.et_pb_text_align_left-tablet input.et_pb_s{text-align:left;padding-left:.715em}.et_pb_search.et_pb_text_align_center-tablet input.et_pb_s{padding-left:.715em;padding-right:.715em}}.et-menu li{display:inline-block;font-size:14px;padding-right:22px}.et-menu>li:last-child{padding-right:0}.et-menu a{color:rgba(0,0,0,.6);text-decoration:none;display:block;position:relative}.et-menu a,.et-menu a:hover{-webkit-transition:all .4s ease-in-out;transition:all .4s ease-in-out}.et-menu a:hover{opacity:.7}.et-menu li>a{padding-bottom:29px;word-wrap:break-word}a.et_pb_menu__icon,button.et_pb_menu__icon{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0;margin:0 11px;font-size:17px;line-height:normal;background:none;border:0;cursor:pointer;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}a.et_pb_menu__icon:after,button.et_pb_menu__icon:after{font-family:ETmodules}a.et_pb_menu__icon__with_count:after,button.et_pb_menu__icon__with_count:after{margin-right:10px}.et_pb_menu__wrap .mobile_menu_bar{-webkit-transform:translateY(3%);transform:translateY(3%)}.et_pb_menu__wrap .mobile_menu_bar:before{top:0}.et_pb_menu__logo{overflow:hidden}.et_pb_menu__logo img{display:block}.et_pb_menu__logo img[src$=".svg"]{width:100%}.et_pb_menu__search-button:after{content:"U"}.et_pb_menu__cart-button:after{content:"\E07A"}@media (max-width:980px){.et-menu{display:none}.et_mobile_nav_menu{display:block;margin-top:-1px}}.et_pb_with_border.et_pb_menu .et_pb_menu__logo img{border:0 solid #333}.et_pb_menu.et_hover_enabled:hover{z-index:auto}.et_pb_menu .et-menu-nav,.et_pb_menu .et-menu-nav>ul{float:none}.et_pb_menu .et-menu-nav>ul{padding:0!important;line-height:1.7em}.et_pb_menu .et-menu-nav>ul ul{padding:20px 0;text-align:left}.et_pb_bg_layout_dark.et_pb_menu ul li a{color:#fff}.et_pb_bg_layout_dark.et_pb_menu ul li a:hover{color:hsla(0,0%,100%,.8)}.et-menu li li.menu-item-has-children>a:first-child:after{top:12px}.et_pb_menu .et-menu-nav>ul.upwards li ul{bottom:100%;top:auto;border-top:none;border-bottom:3px solid #2ea3f2;-webkit-box-shadow:2px -2px 5px rgba(0,0,0,.1);box-shadow:2px -2px 5px rgba(0,0,0,.1)}.et_pb_menu .et-menu-nav>ul.upwards li ul li ul{bottom:-23px}.et_pb_menu .et-menu-nav>ul.upwards li.mega-menu ul ul{bottom:0;top:auto;border:none}.et_pb_menu_inner_container{position:relative}.et_pb_menu .et_pb_menu__wrap{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap;opacity:1}.et_pb_menu .et_pb_menu__wrap--visible{-webkit-animation:fadeInBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeInBottom 1s cubic-bezier(.77,0,.175,1) 1}.et_pb_menu .et_pb_menu__wrap--hidden{opacity:0;-webkit-animation:fadeOutBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeOutBottom 1s cubic-bezier(.77,0,.175,1) 1}.et_pb_menu .et_pb_menu__menu{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.et_pb_menu .et_pb_menu__menu,.et_pb_menu .et_pb_menu__menu>nav,.et_pb_menu .et_pb_menu__menu>nav>ul{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.et_pb_menu .et_pb_menu__menu>nav>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.et_pb_menu .et_pb_menu__menu>nav>ul>li{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;margin:0}.et_pb_menu .et_pb_menu__menu>nav>ul>li.mega-menu{position:static}.et_pb_menu .et_pb_menu__menu>nav>ul>li>ul{top:calc(100% - 1px);left:0}.et_pb_menu .et_pb_menu__menu>nav>ul.upwards>li>ul{top:auto;bottom:calc(100% - 1px)}.et_pb_menu--with-logo .et_pb_menu__menu>nav>ul>li>a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:31px 0;white-space:nowrap}.et_pb_menu--with-logo .et_pb_menu__menu>nav>ul>li>a:after{top:50%!important;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul{padding:0!important}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul>li{margin-top:8px}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul>li>a{padding-bottom:8px}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul.upwards>li{margin-top:0;margin-bottom:8px}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul.upwards>li>a{padding-top:8px;padding-bottom:0}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul.upwards>li>a:after{top:auto;bottom:0}.et_pb_menu .et_pb_menu__icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.et_pb_menu .et-menu{margin-left:-11px;margin-right:-11px}.et_pb_menu .et-menu>li{padding-left:11px;padding-right:11px}.et_pb_menu--style-left_aligned .et_pb_menu_inner_container,.et_pb_menu--style-left_aligned .et_pb_row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.et_pb_menu--style-left_aligned .et_pb_menu__logo-wrap{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-left_aligned .et_pb_menu__logo{margin-right:30px}.rtl .et_pb_menu--style-left_aligned .et_pb_menu__logo{margin-right:0;margin-left:30px}.et_pb_menu--style-left_aligned.et_pb_text_align_center .et_pb_menu__menu>nav>ul,.et_pb_menu--style-left_aligned.et_pb_text_align_center .et_pb_menu__wrap{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.et_pb_menu--style-left_aligned.et_pb_text_align_right .et_pb_menu__menu>nav>ul,.et_pb_menu--style-left_aligned.et_pb_text_align_right .et_pb_menu__wrap{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__menu,.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__menu>nav,.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__wrap{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__menu>nav>ul{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.et_pb_menu--style-centered .et_pb_menu__logo-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-centered .et_pb_menu__logo-wrap,.et_pb_menu--style-centered .et_pb_menu__logo img{margin:0 auto}.et_pb_menu--style-centered .et_pb_menu__menu>nav>ul,.et_pb_menu--style-centered .et_pb_menu__wrap{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.et_pb_menu--style-inline_centered_logo .et_pb_menu_inner_container>.et_pb_menu__logo-wrap,.et_pb_menu--style-inline_centered_logo .et_pb_row>.et_pb_menu__logo-wrap{display:none;margin-bottom:30px}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo,.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo img{margin:0 auto}.et_pb_menu--style-inline_centered_logo .et_pb_menu__wrap{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot .et_pb_menu__logo,.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot .et_pb_menu__logo-wrap{width:100%;height:100%}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot img{max-height:100%}.et_pb_menu .et_pb_menu__logo-slot .et-fb-content-placeholder{min-width:96px}.et_pb_menu .et_pb_menu__search-container{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:stretch;-ms-flex-pack:stretch;justify-content:stretch;-ms-flex-line-pack:stretch;align-content:stretch;left:0;bottom:0;width:100%;height:100%;opacity:0;z-index:999}.et_pb_menu .et_pb_menu__search-container--visible{opacity:1;-webkit-animation:fadeInTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeInTop 1s cubic-bezier(.77,0,.175,1) 1}.et_pb_menu .et_pb_menu__search-container--hidden{-webkit-animation:fadeOutTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeOutTop 1s cubic-bezier(.77,0,.175,1) 1}.et_pb_menu .et_pb_menu__search-container--disabled{display:none}.et_pb_menu .et_pb_menu__search{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:stretch;-ms-flex-pack:stretch;justify-content:stretch;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu .et_pb_menu__search-form{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.et_pb_menu .et_pb_menu__search-input{border:0;width:100%;color:#333;background:transparent}.et_pb_menu .et_pb_menu__close-search-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.et_pb_menu .et_pb_menu__close-search-button:after{content:"M";font-size:1.7em}@media (min-width:981px){.et_dropdown_animation_fade.et_pb_menu ul li:hover>ul{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.et_dropdown_animation_slide.et_pb_menu ul li:hover>ul{-webkit-animation:fadeLeft .4s ease-in-out;animation:fadeLeft .4s ease-in-out}.et_dropdown_animation_expand.et_pb_menu ul li:hover>ul{-webkit-transform-origin:0 0;-webkit-animation:Grow .4s ease-in-out;animation:Grow .4s ease-in-out;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.et_dropdown_animation_flip.et_pb_menu ul li ul li:hover>ul{-webkit-animation:flipInX .6s ease-in-out;animation:flipInX .6s ease-in-out;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.et_dropdown_animation_flip.et_pb_menu ul li:hover>ul{-webkit-animation:flipInY .6s ease-in-out;animation:flipInY .6s ease-in-out;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.et_pb_menu.et_pb_menu_fullwidth .et_pb_row{width:100%;max-width:100%;padding:0 30px!important}}@media (max-width:980px){.et_pb_menu--style-left_aligned .et_pb_menu_inner_container,.et_pb_menu--style-left_aligned .et_pb_row{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-left_aligned .et_pb_menu__wrap{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.et_pb_menu--style-left_aligned.et_pb_text_align_center .et_pb_menu__wrap{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.et_pb_menu--style-left_aligned.et_pb_text_align_right .et_pb_menu__wrap{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__wrap{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.et_pb_menu--style-inline_centered_logo .et_pb_menu_inner_container>.et_pb_menu__logo-wrap,.et_pb_menu--style-inline_centered_logo .et_pb_row>.et_pb_menu__logo-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-inline_centered_logo .et_pb_menu_inner_container>.et_pb_menu__logo,.et_pb_menu--style-inline_centered_logo .et_pb_row>.et_pb_menu__logo{margin:0 auto}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot{display:none}.et_pb_menu .et_pb_row{min-height:81px}.et_pb_menu .et_pb_menu__menu{display:none}.et_pb_menu .et_mobile_nav_menu{float:none;margin:0 6px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu .et_mobile_menu{top:100%;padding:5%}.et_pb_menu .et_mobile_menu,.et_pb_menu .et_mobile_menu ul{list-style:none!important;text-align:left}.et_pb_menu .et_mobile_menu ul{padding:0}.et_pb_menu .et_pb_mobile_menu_upwards .et_mobile_menu{top:auto;bottom:100%}}@-webkit-keyframes fadeOutTop{0%{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}to{opacity:0;-webkit-transform:translatey(-60%);transform:translatey(-60%)}}@keyframes fadeOutTop{0%{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}to{opacity:0;-webkit-transform:translatey(-60%);transform:translatey(-60%)}}@-webkit-keyframes fadeInTop{0%{opacity:0;-webkit-transform:translatey(-60%);transform:translatey(-60%)}to{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}}@keyframes fadeInTop{0%{opacity:0;-webkit-transform:translatey(-60%);transform:translatey(-60%)}to{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}}@-webkit-keyframes fadeInBottom{0%{opacity:0;-webkit-transform:translatey(60%);transform:translatey(60%)}to{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}}@keyframes fadeInBottom{0%{opacity:0;-webkit-transform:translatey(60%);transform:translatey(60%)}to{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}}@-webkit-keyframes fadeOutBottom{0%{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}to{opacity:0;-webkit-transform:translatey(60%);transform:translatey(60%)}}@keyframes fadeOutBottom{0%{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}to{opacity:0;-webkit-transform:translatey(60%);transform:translatey(60%)}}@-webkit-keyframes Grow{0%{opacity:0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes Grow{0%{opacity:0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}/*!* Animate.css - http://daneden.me/animate* Licensed under the MIT license - http://opensource.org/licenses/MIT* Copyright (c) 2015 Daniel Eden*/@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}#main-header{line-height:23px;font-weight:500;top:0;background-color:#fff;width:100%;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1);position:relative;z-index:99999}.nav li li{padding:0 20px;margin:0}.et-menu li li a{padding:6px 20px;width:200px}.nav li{position:relative;line-height:1em}.nav li li{position:relative;line-height:2em}.nav li ul{position:absolute;padding:20px 0;z-index:9999;width:240px;background:#fff;visibility:hidden;opacity:0;border-top:3px solid #2ea3f2;box-shadow:0 2px 5px rgba(0,0,0,.1);-moz-box-shadow:0 2px 5px rgba(0,0,0,.1);-webkit-box-shadow:0 2px 5px rgba(0,0,0,.1);-webkit-transform:translateZ(0);text-align:left}.nav li.et-hover>ul{visibility:visible}.nav li.et-touch-hover>ul,.nav li:hover>ul{opacity:1;visibility:visible}.nav li li ul{z-index:1000;top:-23px;left:240px}.nav li.et-reverse-direction-nav li ul{left:auto;right:240px}.nav li:hover{visibility:inherit}.et_mobile_menu li a,.nav li li a{font-size:14px;-webkit-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;transition:opacity .2s ease-in-out,background-color .2s ease-in-out}.et_mobile_menu li a:hover,.nav ul li a:hover{background-color:rgba(0,0,0,.03);opacity:.7}.et-dropdown-removing>ul{display:none}.mega-menu .et-dropdown-removing>ul{display:block}.et-menu .menu-item-has-children>a:first-child:after{font-family:ETmodules;content:"3";font-size:16px;position:absolute;right:0;top:0;font-weight:800}.et-menu .menu-item-has-children>a:first-child{padding-right:20px}.et-menu li li.menu-item-has-children>a:first-child:after{right:20px;top:6px}.et-menu-nav li.mega-menu{position:inherit}.et-menu-nav li.mega-menu>ul{padding:30px 20px;position:absolute!important;width:100%;left:0!important}.et-menu-nav li.mega-menu ul li{margin:0;float:left!important;display:block!important;padding:0!important}.et-menu-nav li.mega-menu li>ul{-webkit-animation:none!important;animation:none!important;padding:0;border:none;left:auto;top:auto;width:240px!important;position:relative;box-shadow:none;-webkit-box-shadow:none}.et-menu-nav li.mega-menu li ul{visibility:visible;opacity:1;display:none}.et-menu-nav li.mega-menu.et-hover li ul,.et-menu-nav li.mega-menu:hover li ul{display:block}.et-menu-nav li.mega-menu:hover>ul{opacity:1!important;visibility:visible!important}.et-menu-nav li.mega-menu>ul>li>a:first-child{padding-top:0!important;font-weight:700;border-bottom:1px solid rgba(0,0,0,.03)}.et-menu-nav li.mega-menu>ul>li>a:first-child:hover{background-color:transparent!important}.et-menu-nav li.mega-menu li>a{width:200px!important}.et-menu-nav li.mega-menu.mega-menu-parent li>a,.et-menu-nav li.mega-menu.mega-menu-parent li li{width:100%!important}.et-menu-nav li.mega-menu.mega-menu-parent li>.sub-menu{float:left;width:100%!important}.et-menu-nav li.mega-menu>ul>li{width:25%;margin:0}.et-menu-nav li.mega-menu.mega-menu-parent-3>ul>li{width:33.33%}.et-menu-nav li.mega-menu.mega-menu-parent-2>ul>li{width:50%}.et-menu-nav li.mega-menu.mega-menu-parent-1>ul>li{width:100%}.et_pb_fullwidth_menu li.mega-menu .menu-item-has-children>a:first-child:after,.et_pb_menu li.mega-menu .menu-item-has-children>a:first-child:after{display:none}.et_fullwidth_nav #top-menu li.mega-menu>ul{width:auto;left:30px!important;right:30px!important}.et_mobile_menu{position:absolute;left:0;padding:5%;background:#fff;width:100%;visibility:visible;opacity:1;display:none;z-index:9999;border-top:3px solid #2ea3f2;box-shadow:0 2px 5px rgba(0,0,0,.1);-moz-box-shadow:0 2px 5px rgba(0,0,0,.1);-webkit-box-shadow:0 2px 5px rgba(0,0,0,.1)}#main-header .et_mobile_menu li ul,.et_pb_fullwidth_menu .et_mobile_menu li ul,.et_pb_menu .et_mobile_menu li ul{visibility:visible!important;display:block!important;padding-left:10px}.et_mobile_menu li li{padding-left:5%}.et_mobile_menu li a{border-bottom:1px solid rgba(0,0,0,.03);color:#666;padding:10px 5%;display:block}.et_mobile_menu .menu-item-has-children>a{font-weight:700;background-color:rgba(0,0,0,.03)}.et_mobile_menu li .menu-item-has-children>a{background-color:transparent}.et_mobile_nav_menu{float:right;display:none}.mobile_menu_bar{position:relative;display:block;line-height:0}.mobile_menu_bar:before{content:"a";font-size:32px;position:relative;left:0;top:0;cursor:pointer}.et_pb_module .mobile_menu_bar:before{top:2px}.mobile_nav .select_page{display:none}.et_pb_bg_layout_light.et_pb_module.et_pb_button{color:#2ea3f2}.et_pb_module.et_pb_button{display:inline-block;color:inherit}.et_pb_button_module_wrapper.et_pb_button_alignment_left{text-align:left}.et_pb_button_module_wrapper.et_pb_button_alignment_right{text-align:right}.et_pb_button_module_wrapper.et_pb_button_alignment_center{text-align:center}.et_pb_button_module_wrapper>a{display:inline-block}@media (max-width:980px){.et_pb_button_module_wrapper.et_pb_button_alignment_tablet_left{text-align:left}.et_pb_button_module_wrapper.et_pb_button_alignment_tablet_right{text-align:right}.et_pb_button_module_wrapper.et_pb_button_alignment_tablet_center{text-align:center}}@media (max-width:767px){.et_pb_button_module_wrapper.et_pb_button_alignment_phone_left{text-align:left}.et_pb_button_module_wrapper.et_pb_button_alignment_phone_right{text-align:right}.et_pb_button_module_wrapper.et_pb_button_alignment_phone_center{text-align:center}}.et_pb_button[data-icon]:not([data-icon=""]):after{content:attr(data-icon)}@media (max-width:980px){.et_pb_button[data-icon-tablet]:not([data-icon-tablet=""]):after{content:attr(data-icon-tablet)}}@media (max-width:767px){.et_pb_button[data-icon-phone]:not([data-icon-phone=""]):after{content:attr(data-icon-phone)}}.et_pb_text{word-wrap:break-word}.et_pb_text ol,.et_pb_text ul{padding-bottom:1em}.et_pb_text>:last-child{padding-bottom:0}.et_pb_text_inner{position:relative}.et_pb_with_border .et-pb-icon,.et_pb_with_border .et_pb_image_wrap{border:0 solid #333}.et_pb_blurb_content{max-width:550px;margin:0 auto;position:relative;text-align:center;word-wrap:break-word;width:100%}.et_pb_blurb.et_pb_text_align_left .et_pb_blurb_content .et_pb_blurb_container{text-align:left}.et_pb_blurb.et_pb_text_align_right .et_pb_blurb_content .et_pb_blurb_container{text-align:right}.et_pb_blurb.et_pb_text_align_justified .et_pb_blurb_content .et_pb_blurb_container{text-align:justify}.et_pb_blurb.et_pb_text_align_center .et_pb_blurb_content .et_pb_blurb_container{text-align:center}.et_pb_blurb_content p:last-of-type{padding-bottom:0}.et_pb_blurb .et_pb_module_header a,.et_pb_blurb h4 a{text-decoration:none}.et_pb_blurb .et_pb_image_wrap{display:block;margin:auto}.et_pb_main_blurb_image img{border-radius:inherit}.et_pb_main_blurb_image img[src*=".svg"]{width:auto}.et_pb_sticky_module .et_pb_main_blurb_image .et_pb_image_wrap{width:100%;max-width:100%}.et_pb_blurb_position_left .et_pb_blurb_content,.et_pb_blurb_position_right .et_pb_blurb_content{display:table}.et_pb_blurb_position_left .et_pb_main_blurb_image,.et_pb_blurb_position_right .et_pb_main_blurb_image{width:32px;display:table-cell;line-height:0}.et_pb_blurb_position_left .et_pb_main_blurb_image img,.et_pb_blurb_position_right .et_pb_main_blurb_image img{width:inherit}.et_pb_blurb_position_left .et-pb-icon,.et_pb_blurb_position_right .et-pb-icon{font-size:32px}.et_pb_blurb_position_right .et-pb-icon{display:table-cell}.et_pb_blurb_position_left .et_pb_blurb_container,.et_pb_blurb_position_right .et_pb_blurb_container{display:table-cell;vertical-align:top}.et_pb_blurb_position_left .et_pb_blurb_container{padding-left:15px}.et_pb_blurb_position_left .et_pb_blurb_content{text-align:left}.et_pb_blurb_position_right .et_pb_blurb_container{padding-right:15px}.et_pb_blurb_position_right .et_pb_blurb_content{text-align:right}.et_pb_blurb_position_right .et_pb_main_blurb_image{left:auto;right:0}.et_pb_blurb_position_right .et-pb-icon{margin-right:0;margin-left:20px}.et_pb_main_blurb_image{display:inline-block;margin-bottom:30px;line-height:0;max-width:100%}@media (max-width:980px){.et_pb_blurb_position_left_tablet .et_pb_main_blurb_image,.et_pb_blurb_position_right_tablet .et_pb_main_blurb_image{width:32px;display:table-cell;line-height:0}.et_pb_blurb_position_left_tablet .et_pb_main_blurb_image img,.et_pb_blurb_position_right_tablet .et_pb_main_blurb_image img{width:inherit}.et_pb_blurb_position_left_tablet .et-pb-icon,.et_pb_blurb_position_right_tablet .et-pb-icon{font-size:32px;display:table-cell}.et_pb_blurb_position_left_tablet .et_pb_blurb_container,.et_pb_blurb_position_right_tablet .et_pb_blurb_container{display:table-cell;vertical-align:top}.et_pb_blurb_position_left_tablet .et_pb_blurb_container{padding-left:15px}.et_pb_blurb_position_left_tablet .et_pb_blurb_content{text-align:left}.et_pb_blurb_position_right_tablet .et_pb_blurb_container{padding-right:15px}.et_pb_blurb_position_right_tablet .et_pb_blurb_content{padding-right:52px;text-align:right}.et_pb_blurb_position_right_tablet .et_pb_main_blurb_image{left:auto;right:0}.et_pb_blurb_position_right_tablet .et-pb-icon{margin-right:0;margin-left:20px}.et_pb_blurb_position_top_tablet .et_pb_main_blurb_image{display:block;width:auto}.et_pb_blurb_position_top_tablet .et-pb-icon{font-size:96px;display:initial}.et_pb_blurb_position_top_tablet .et_pb_blurb_container{display:block;padding-left:0;padding-right:0}.et_pb_blurb_position_top_tablet .et_pb_blurb_content{display:inline-block;text-align:center;padding-right:0}}@media (max-width:767px){.et_pb_blurb_position_left_phone .et_pb_main_blurb_image,.et_pb_blurb_position_right_phone .et_pb_main_blurb_image{width:32px;display:table-cell;line-height:0}.et_pb_blurb_position_left_phone .et_pb_main_blurb_image img,.et_pb_blurb_position_right_phone .et_pb_main_blurb_image img{width:inherit}.et_pb_blurb_position_left_phone .et-pb-icon,.et_pb_blurb_position_right_phone .et-pb-icon{font-size:32px;display:table-cell}.et_pb_blurb_position_left_phone .et_pb_blurb_container,.et_pb_blurb_position_right_phone .et_pb_blurb_container{display:table-cell;vertical-align:top}.et_pb_blurb_position_left_phone .et_pb_blurb_container{padding-left:15px}.et_pb_blurb_position_left_phone .et_pb_blurb_content{text-align:left}.et_pb_blurb_position_right_phone .et_pb_blurb_container{padding-right:15px}.et_pb_blurb_position_right_phone .et_pb_blurb_content{padding-right:52px;text-align:right}.et_pb_blurb_position_right_phone .et_pb_main_blurb_image{left:auto;right:0}.et_pb_blurb_position_right_phone .et-pb-icon{margin-right:0;margin-left:20px}.et_pb_blurb_position_top_phone .et_pb_main_blurb_image{display:block;width:auto}.et_pb_blurb_position_top_phone .et-pb-icon{font-size:96px;display:initial}.et_pb_blurb_position_top_phone .et_pb_blurb_container{display:block;padding-left:0;padding-right:0}.et_pb_blurb_position_top_phone .et_pb_blurb_content{display:inline-block;text-align:center;padding-right:0}}@media (max-width:980px){.et_pb_blurb.et_pb_text_align_left-tablet .et_pb_blurb_content .et_pb_blurb_container{text-align:left}.et_pb_blurb.et_pb_text_align_right-tablet .et_pb_blurb_content .et_pb_blurb_container{text-align:right}.et_pb_blurb.et_pb_text_align_justified-tablet .et_pb_blurb_content .et_pb_blurb_container{text-align:justify}.et_pb_blurb.et_pb_text_align_center-tablet .et_pb_blurb_content .et_pb_blurb_container{text-align:center}}@media (max-width:767px){.et_pb_blurb.et_pb_text_align_left-phone .et_pb_blurb_content .et_pb_blurb_container{text-align:left}.et_pb_blurb.et_pb_text_align_right-phone .et_pb_blurb_content .et_pb_blurb_container{text-align:right}.et_pb_blurb.et_pb_text_align_justified-phone .et_pb_blurb_content .et_pb_blurb_container{text-align:justify}.et_pb_blurb.et_pb_text_align_center-phone .et_pb_blurb_content .et_pb_blurb_container{text-align:center}}.et-waypoint.et_pb_animation_off,.et-waypoint:not(.et_pb_counters).et_pb_animation_off,.et_pb_animation_off{opacity:1}.et-waypoint.et_pb_animation_left.et-animated,.et_pb_animation_left.et-animated{opacity:1;-webkit-animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_right.et-animated,.et_pb_animation_right.et-animated{opacity:1;-webkit-animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_top.et-animated,.et_pb_animation_top.et-animated{opacity:1;-webkit-animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_bottom.et-animated,.et_pb_animation_bottom.et-animated{opacity:1;-webkit-animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_fade_in.et-animated,.et_pb_animation_fade_in.et-animated{opacity:1;-webkit-animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1}@media (max-width:980px){.et-waypoint.et_pb_animation_off_tablet,.et-waypoint:not(.et_pb_counters).et_pb_animation_off_tablet,.et_pb_animation_off_tablet{opacity:1;-webkit-animation:none;animation:none}.et-waypoint.et_pb_animation_left_tablet.et-animated,.et_pb_animation_left_tablet.et-animated{opacity:1;-webkit-animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_right_tablet.et-animated,.et_pb_animation_right_tablet.et-animated{opacity:1;-webkit-animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_top_tablet.et-animated,.et_pb_animation_top_tablet.et-animated{opacity:1;-webkit-animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_bottom_tablet.et-animated,.et_pb_animation_bottom_tablet.et-animated{opacity:1;-webkit-animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_fade_in_tablet.et-animated,.et_pb_animation_fade_in_tablet.et-animated{opacity:1;-webkit-animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1}}@media (max-width:767px){.et-waypoint.et_pb_animation_off_phone,.et-waypoint:not(.et_pb_counters).et_pb_animation_off_phone,.et_pb_animation_off_phone{opacity:1;-webkit-animation:none;animation:none}.et-waypoint.et_pb_animation_left_phone.et-animated,.et_pb_animation_left_phone.et-animated{opacity:1;-webkit-animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_right_phone.et-animated,.et_pb_animation_right_phone.et-animated{opacity:1;-webkit-animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_top_phone.et-animated,.et_pb_animation_top_phone.et-animated{opacity:1;-webkit-animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_bottom_phone.et-animated,.et_pb_animation_bottom_phone.et-animated{opacity:1;-webkit-animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_fade_in_phone.et-animated,.et_pb_animation_fade_in_phone.et-animated{opacity:1;-webkit-animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1}}.et_pb_with_border .et_pb_image_wrap{border:0 solid #333}.et_pb_image{margin-left:auto;margin-right:auto;line-height:0}.et_pb_image.aligncenter{text-align:center}.et_pb_image.et_pb_has_overlay a.et_pb_lightbox_image{display:block;position:relative}.et_pb_image{display:block}.et_pb_image .et_pb_image_wrap{display:inline-block;position:relative;max-width:100%}.et_pb_image .et_pb_image_wrap img[src*=".svg"]{width:auto}.et_pb_image img{position:relative}.et_pb_image_sticky{margin-bottom:0!important;display:inherit}.et_pb_image.et_pb_has_overlay .et_pb_image_wrap:hover .et_overlay{z-index:3;opacity:1}@media (min-width:981px){.et_pb_section_sticky,.et_pb_section_sticky.et_pb_bottom_divider .et_pb_row:nth-last-child(2),.et_pb_section_sticky .et_pb_column_single,.et_pb_section_sticky .et_pb_row.et-last-child,.et_pb_section_sticky .et_pb_row:last-child,.et_pb_section_sticky .et_pb_specialty_column .et_pb_row_inner.et-last-child,.et_pb_section_sticky .et_pb_specialty_column .et_pb_row_inner:last-child{padding-bottom:0!important}}@media (max-width:980px){.et_pb_image_sticky_tablet{margin-bottom:0!important;display:inherit}.et_pb_section_sticky_mobile,.et_pb_section_sticky_mobile.et_pb_bottom_divider .et_pb_row:nth-last-child(2),.et_pb_section_sticky_mobile .et_pb_column_single,.et_pb_section_sticky_mobile .et_pb_row.et-last-child,.et_pb_section_sticky_mobile .et_pb_row:last-child,.et_pb_section_sticky_mobile .et_pb_specialty_column .et_pb_row_inner.et-last-child,.et_pb_section_sticky_mobile .et_pb_specialty_column .et_pb_row_inner:last-child{padding-bottom:0!important}.et_pb_section_sticky .et_pb_row.et-last-child .et_pb_column.et_pb_row_sticky.et-last-child,.et_pb_section_sticky .et_pb_row:last-child .et_pb_column.et_pb_row_sticky:last-child{margin-bottom:0}.et_pb_image_bottom_space_tablet{margin-bottom:30px!important;display:block}.et_always_center_on_mobile{text-align:center!important;margin-left:auto!important;margin-right:auto!important}}@media (max-width:767px){.et_pb_image_sticky_phone{margin-bottom:0!important;display:inherit}.et_pb_image_bottom_space_phone{margin-bottom:30px!important;display:block}}.et_overlay{z-index:-1;position:absolute;top:0;left:0;display:block;width:100%;height:100%;background:hsla(0,0%,100%,.9);opacity:0;pointer-events:none;-webkit-transition:all .3s;transition:all .3s;border:1px solid #e5e5e5;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-font-smoothing:antialiased}.et_overlay:before{color:#2ea3f2;content:"\E050";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:32px;-webkit-transition:all .4s;transition:all .4s}.et_portfolio_image,.et_shop_image{position:relative;display:block}.et_pb_has_overlay:not(.et_pb_image):hover .et_overlay,.et_portfolio_image:hover .et_overlay,.et_shop_image:hover .et_overlay{z-index:3;opacity:1}#ie7 .et_overlay,#ie8 .et_overlay{display:none}.et_pb_module.et_pb_has_overlay{position:relative}.et_pb_module.et_pb_has_overlay .et_overlay,article.et_pb_has_overlay{border:none}/* */(function ($) {$(document).ready(function () {$('.et_pb_module.et_pb_accordion .et_pb_accordion_item.et_pb_toggle_open').addClass('et_pb_toggle_close').removeClass('et_pb_toggle_open');});})(jQuery)jQuery(function ($) {$(document).ready(function () {$('body ul.et_mobile_menu li.menu-item-has-children, body ul.et_mobile_menu li.page_item_has_children').append('',);$('ul.et_mobile_menu li.menu-item-has-children .mobile-toggle, ul.et_mobile_menu li.page_item_has_children .mobile-toggle').click(function (event) {event.preventDefault();event.stopPropagation();$(this).parent('li').toggleClass('dt-open');$(this).parent('li').find('ul.children').first().toggleClass('visible');$(this).parent('li').find('ul.sub-menu').first().toggleClass('visible');});$('.mobile-toggle').on('mouseover', function () {$(this).parent().addClass('is-hover');}).on('mouseout', function () {$(this).parent().removeClass('is-hover');});});});body,.et_pb_column_1_2 .et_quote_content blockquote cite,.et_pb_column_1_2 .et_link_content a.et_link_main_url,.et_pb_column_1_3 .et_quote_content blockquote cite,.et_pb_column_3_8 .et_quote_content blockquote cite,.et_pb_column_1_4 .et_quote_content blockquote cite,.et_pb_blog_grid .et_quote_content blockquote cite,.et_pb_column_1_3 .et_link_content a.et_link_main_url,.et_pb_column_3_8 .et_link_content a.et_link_main_url,.et_pb_column_1_4 .et_link_content a.et_link_main_url,.et_pb_blog_grid .et_link_content a.et_link_main_url,body .et_pb_bg_layout_light .et_pb_post p,body .et_pb_bg_layout_dark .et_pb_post p{font-size:14px}.et_pb_slide_content,.et_pb_best_value{font-size:15px}body{color:#150e45}h1,h2,h3,h4,h5,h6{color:#150e45}body,.et_pb_column_1_2 .et_quote_content blockquote cite,.et_pb_column_1_2 .et_link_content a.et_link_main_url,.et_pb_column_1_3 .et_quote_content blockquote cite,.et_pb_column_3_8 .et_quote_content blockquote cite,.et_pb_column_1_4 .et_quote_content blockquote cite,.et_pb_blog_grid .et_quote_content blockquote cite,.et_pb_column_1_3 .et_link_content a.et_link_main_url,.et_pb_column_3_8 .et_link_content a.et_link_main_url,.et_pb_column_1_4 .et_link_content a.et_link_main_url,.et_pb_blog_grid .et_link_content a.et_link_main_url,body .et_pb_bg_layout_light .et_pb_post p,body .et_pb_bg_layout_dark .et_pb_post p{font-weight:400}.et_pb_slide_content,.et_pb_best_value{font-weight:400}#et_search_icon:hover,.mobile_menu_bar:before,.mobile_menu_bar:after,.et_toggle_slide_menu:after,.et-social-icon a:hover,.et_pb_sum,.et_pb_pricing li a,.et_pb_pricing_table_button,.et_overlay:before,.entry-summary p.price ins,.et_pb_member_social_links a:hover,.et_pb_widget li a:hover,.et_pb_filterable_portfolio .et_pb_portfolio_filters li a.active,.et_pb_filterable_portfolio .et_pb_portofolio_pagination ul li a.active,.et_pb_gallery .et_pb_gallery_pagination ul li a.active,.wp-pagenavi span.current,.wp-pagenavi a:hover,.nav-single a,.tagged_as a,.posted_in a{color:#1b3c74}.et_pb_contact_submit,.et_password_protected_form .et_submit_button,.et_pb_bg_layout_light .et_pb_newsletter_button,.comment-reply-link,.form-submit .et_pb_button,.et_pb_bg_layout_light .et_pb_promo_button,.et_pb_bg_layout_light .et_pb_more_button,.et_pb_contact p input[type="checkbox"]:checked+label i:before,.et_pb_bg_layout_light.et_pb_module.et_pb_button{color:#1b3c74}.footer-widget h4{color:#1b3c74}.et-search-form,.nav li ul,.et_mobile_menu,.footer-widget li:before,.et_pb_pricing li:before,blockquote{border-color:#1b3c74}.et_pb_counter_amount,.et_pb_featured_table .et_pb_pricing_heading,.et_quote_content,.et_link_content,.et_audio_content,.et_pb_post_slider.et_pb_bg_layout_dark,.et_slide_in_menu_container,.et_pb_contact p input[type="radio"]:checked+label i:before{background-color:#1b3c74}a{color:#ab0000}.nav li ul{border-color:#ab0000}.et_secondary_nav_enabled #page-container #top-header{background-color:#1b3c74!important}#et-secondary-nav li ul{background-color:#1b3c74}.et_header_style_centered .mobile_nav .select_page,.et_header_style_split .mobile_nav .select_page,.et_nav_text_color_light #top-menu>li>a,.et_nav_text_color_dark #top-menu>li>a,#top-menu a,.et_mobile_menu li a,.et_nav_text_color_light .et_mobile_menu li a,.et_nav_text_color_dark .et_mobile_menu li a,#et_search_icon:before,.et_search_form_container input,span.et_close_search_field:after,#et-top-navigation .et-cart-info{color:#1b3c74}.et_search_form_container input::-moz-placeholder{color:#1b3c74}.et_search_form_container input::-webkit-input-placeholder{color:#1b3c74}.et_search_form_container input:-ms-input-placeholder{color:#1b3c74}#main-header .nav li ul a{color:#150e45}#top-menu li a{font-size:12px}body.et_vertical_nav .container.et_search_form_container .et-search-form input{font-size:12px!important}#top-menu li a,.et_search_form_container input{font-weight:normal;font-style:normal;text-transform:uppercase;text-decoration:none}.et_search_form_container input::-moz-placeholder{font-weight:normal;font-style:normal;text-transform:uppercase;text-decoration:none}.et_search_form_container input::-webkit-input-placeholder{font-weight:normal;font-style:normal;text-transform:uppercase;text-decoration:none}.et_search_form_container input:-ms-input-placeholder{font-weight:normal;font-style:normal;text-transform:uppercase;text-decoration:none}#top-menu li.current-menu-ancestor>a,#top-menu li.current-menu-item>a,#top-menu li.current_page_item>a{color:#1b3c74}#main-footer .footer-widget h4,#main-footer .widget_block h1,#main-footer .widget_block h2,#main-footer .widget_block h3,#main-footer .widget_block h4,#main-footer .widget_block h5,#main-footer .widget_block h6{color:#1b3c74}.footer-widget li:before{border-color:#1b3c74}body .et_pb_button{font-size:14px;background-color:#1b3c74;border-width:0px!important;border-radius:4px}body.et_pb_button_helper_class .et_pb_button,body.et_pb_button_helper_class .et_pb_module.et_pb_button{color:#ffffff}body .et_pb_button:after{content:'9';font-size:14px}body .et_pb_bg_layout_light.et_pb_button:hover,body .et_pb_bg_layout_light .et_pb_button:hover,body .et_pb_button:hover{color:#ffffff!important;background-color:#828da4}@media only screen and (min-width:981px){#logo{max-height:60%}.et_pb_svg_logo #logo{height:60%}.et_fixed_nav #page-container .et-fixed-header#top-header{background-color:#1b3c74!important}.et_fixed_nav #page-container .et-fixed-header#top-header #et-secondary-nav li ul{background-color:#1b3c74}.et-fixed-header #top-menu a,.et-fixed-header #et_search_icon:before,.et-fixed-header #et_top_search .et-search-form input,.et-fixed-header .et_search_form_container input,.et-fixed-header .et_close_search_field:after,.et-fixed-header #et-top-navigation .et-cart-info{color:#1b3c74!important}.et-fixed-header .et_search_form_container input::-moz-placeholder{color:#1b3c74!important}.et-fixed-header .et_search_form_container input::-webkit-input-placeholder{color:#1b3c74!important}.et-fixed-header .et_search_form_container input:-ms-input-placeholder{color:#1b3c74!important}.et-fixed-header #top-menu li.current-menu-ancestor>a,.et-fixed-header #top-menu li.current-menu-item>a,.et-fixed-header #top-menu li.current_page_item>a{color:#1b3c74!important}}@media only screen and (min-width:1350px){.et_pb_row{padding:27px 0}.et_pb_section{padding:54px 0}.single.et_pb_pagebuilder_layout.et_full_width_page .et_post_meta_wrapper{padding-top:81px}.et_pb_fullwidth_section{padding:0}}h1,h1.et_pb_contact_main_title,.et_pb_title_container h1{font-weight:400}h2,.product .related h2,.et_pb_column_1_2 .et_quote_content blockquote p{font-weight:400}h3{font-weight:400}h4,.et_pb_circle_counter h3,.et_pb_number_counter h3,.et_pb_column_1_3 .et_pb_post h2,.et_pb_column_1_4 .et_pb_post h2,.et_pb_blog_grid h2,.et_pb_column_1_3 .et_quote_content blockquote p,.et_pb_column_3_8 .et_quote_content blockquote p,.et_pb_column_1_4 .et_quote_content blockquote p,.et_pb_blog_grid .et_quote_content blockquote p,.et_pb_column_1_3 .et_link_content h2,.et_pb_column_3_8 .et_link_content h2,.et_pb_column_1_4 .et_link_content h2,.et_pb_blog_grid .et_link_content h2,.et_pb_column_1_3 .et_audio_content h2,.et_pb_column_3_8 .et_audio_content h2,.et_pb_column_1_4 .et_audio_content h2,.et_pb_blog_grid .et_audio_content h2,.et_pb_column_3_8 .et_pb_audio_module_content h2,.et_pb_column_1_3 .et_pb_audio_module_content h2,.et_pb_gallery_grid .et_pb_gallery_item h3,.et_pb_portfolio_grid .et_pb_portfolio_item h2,.et_pb_filterable_portfolio_grid .et_pb_portfolio_item h2{font-weight:400}h5{font-weight:400}h6{font-weight:400}.et_pb_slide_description .et_pb_slide_title{font-weight:400}.et_pb_gallery_grid .et_pb_gallery_item h3,.et_pb_portfolio_grid .et_pb_portfolio_item h2,.et_pb_filterable_portfolio_grid .et_pb_portfolio_item h2,.et_pb_column_1_4 .et_pb_audio_module_content h2{font-weight:400} h1,h2,h3,h4,h5,h6{font-family:'IBM Plex Sans',Helvetica,Arial,Lucida,sans-serif}body,input,textarea,select{font-family:'IBM Plex Sans',Helvetica,Arial,Lucida,sans-serif}#main-header,#et-top-navigation{font-family:'IBM Plex Mono',monospace}.et_pb_section_0.et_pb_section{padding-bottom:20px;background-color:#150E45!important}.et_pb_row_0{background-size:contain;background-image:url(https://zarc.web.za/wp-content/uploads/2025/03/HERO_bg-1.png)}.et_pb_row_0.et_pb_row{padding-top:13vw!important;padding-bottom:13vw!important;padding-top:13vw;padding-bottom:13vw}.et_pb_row_0,body #page-container .et-db #et-boc .et-l .et_pb_row_0.et_pb_row,body.et_pb_pagebuilder_layout.single #page-container #et-boc .et-l .et_pb_row_0.et_pb_row,body.et_pb_pagebuilder_layout.single.et_full_width_page #page-container #et-boc .et-l .et_pb_row_0.et_pb_row{width:100%;max-width:90%}.et_pb_text_0 h1{text-transform:uppercase;font-size:72px;color:#FFFFFF!important;line-height:1.1em}.et_pb_text_0{padding-left:6vw!important}.et_pb_button_0_wrapper .et_pb_button_0,.et_pb_button_0_wrapper .et_pb_button_0:hover,.et_pb_button_5_wrapper .et_pb_button_5,.et_pb_button_5_wrapper .et_pb_button_5:hover,.et_pb_button_6_wrapper .et_pb_button_6,.et_pb_button_6_wrapper .et_pb_button_6:hover,.et_pb_button_11_wrapper .et_pb_button_11,.et_pb_button_11_wrapper .et_pb_button_11:hover{padding-top:10px!important;padding-right:34px!important;padding-bottom:10px!important;padding-left:20px!important}.et_pb_button_0_wrapper{margin-left:6vw!important}body #page-container .et_pb_section .et_pb_button_0{color:#FFFFFF!important;border-width:1px!important;border-color:#FFFFFF;border-radius:40px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_0:hover,body #page-container .et_pb_section .et_pb_button_1:hover,body #page-container .et_pb_section .et_pb_button_2:hover,body #page-container .et_pb_section .et_pb_button_3:hover,body #page-container .et_pb_section .et_pb_button_4:hover{color:#FFFFFF!important;background-image:initial;background-color:rgba(255,255,255,0.2)}body #page-container .et_pb_section .et_pb_button_0:hover:after,body #page-container .et_pb_section .et_pb_button_5:hover:after,body #page-container .et_pb_section .et_pb_button_6:hover:after,body #page-container .et_pb_section .et_pb_button_7:hover:after,body #page-container .et_pb_section .et_pb_button_8:hover:after,body #page-container .et_pb_section .et_pb_button_9:hover:after,body #page-container .et_pb_section .et_pb_button_10:hover:after,body #page-container .et_pb_section .et_pb_button_11:hover:after{margin-left:.3em;left:auto;margin-left:.3em}body #page-container .et_pb_section .et_pb_button_0:after,body #page-container .et_pb_section .et_pb_button_5:after,body #page-container .et_pb_section .et_pb_button_6:after,body #page-container .et_pb_section .et_pb_button_11:after{line-height:inherit;font-size:inherit!important;opacity:1;margin-left:.3em;left:auto;font-family:ETmodules!important;font-weight:400!important}.et_pb_button_0,.et_pb_button_5,.et_pb_button_6,.et_pb_button_11{transition:color 300ms ease 0ms,background-color 300ms ease 0ms}.et_pb_button_0,.et_pb_button_0:after,.et_pb_button_1,.et_pb_button_1:after,.et_pb_button_2,.et_pb_button_2:after,.et_pb_button_3,.et_pb_button_3:after,.et_pb_button_4,.et_pb_button_4:after,.et_pb_button_5,.et_pb_button_5:after,.et_pb_button_6,.et_pb_button_6:after,.et_pb_button_7,.et_pb_button_7:after,.et_pb_button_8,.et_pb_button_8:after,.et_pb_button_9,.et_pb_button_9:after,.et_pb_button_10,.et_pb_button_10:after,.et_pb_button_11,.et_pb_button_11:after{transition:all 300ms ease 0ms}.et_pb_row_1,body #page-container .et-db #et-boc .et-l .et_pb_row_1.et_pb_row,body.et_pb_pagebuilder_layout.single #page-container #et-boc .et-l .et_pb_row_1.et_pb_row,body.et_pb_pagebuilder_layout.single.et_full_width_page #page-container #et-boc .et-l .et_pb_row_1.et_pb_row{width:100%;max-width:85%}.et_pb_button_1_wrapper .et_pb_button_1,.et_pb_button_1_wrapper .et_pb_button_1:hover,.et_pb_button_2_wrapper .et_pb_button_2,.et_pb_button_2_wrapper .et_pb_button_2:hover,.et_pb_button_3_wrapper .et_pb_button_3,.et_pb_button_3_wrapper .et_pb_button_3:hover,.et_pb_button_4_wrapper .et_pb_button_4,.et_pb_button_4_wrapper .et_pb_button_4:hover{padding-top:10px!important;padding-right:30px!important;padding-bottom:10px!important;padding-left:40px!important}body #page-container .et_pb_section .et_pb_button_1,body #page-container .et_pb_section .et_pb_button_2,body #page-container .et_pb_section .et_pb_button_3,body #page-container .et_pb_section .et_pb_button_4{color:#FFFFFF!important;border-width:1px!important;border-color:#FFFFFF;border-radius:40px;font-size:17px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_1:after,body #page-container .et_pb_section .et_pb_button_2:after,body #page-container .et_pb_section .et_pb_button_3:after,body #page-container .et_pb_section .et_pb_button_4:after{display:none}body #page-container .et_pb_section .et_pb_button_1:before,body #page-container .et_pb_section .et_pb_button_2:before,body #page-container .et_pb_section .et_pb_button_3:before,body #page-container .et_pb_section .et_pb_button_4:before{content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important;line-height:inherit;font-size:inherit!important;opacity:1;margin-left:-1.3em;right:auto;display:inline-block;font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_1:hover:before,body #page-container .et_pb_section .et_pb_button_2:hover:before,body #page-container .et_pb_section .et_pb_button_3:hover:before,body #page-container .et_pb_section .et_pb_button_4:hover:before{margin-left:.3em;right:auto;margin-left:-1.3em}.et_pb_button_1,.et_pb_button_2,.et_pb_button_3,.et_pb_button_4{transition:color 300ms ease 0ms,background-color 300ms ease 0ms;width:100%}div.et_pb_section.et_pb_section_1{background-image:linear-gradient(180deg,#150e45 79%,#ffffff 79%)!important}.et_pb_section_1.et_pb_section{padding-bottom:20px}.et_pb_text_1,.et_pb_text_2{line-height:1.6em;font-weight:600;font-size:16px;line-height:1.6em;margin-top:40px!important}.et_pb_text_1 h2,.et_pb_text_2 h2{text-transform:uppercase;font-size:60px;text-align:right}.et_pb_text_3.et_pb_text,.et_pb_text_5.et_pb_text{color:#150E45!important}body #page-container .et_pb_section .et_pb_button_5,body #page-container .et_pb_section .et_pb_button_6{color:#150E45!important;border-width:1px!important;border-color:#150E45;border-radius:40px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_5:hover,body #page-container .et_pb_section .et_pb_button_6:hover{color:#150E45!important;background-image:initial;background-color:rgba(21,14,69,0.2)}.et_pb_row_3.et_pb_row{margin-top:40px!important}.et_pb_blurb_0.et_pb_blurb .et_pb_module_header,.et_pb_blurb_0.et_pb_blurb .et_pb_module_header a,.et_pb_blurb_1.et_pb_blurb .et_pb_module_header,.et_pb_blurb_1.et_pb_blurb .et_pb_module_header a,.et_pb_blurb_2.et_pb_blurb .et_pb_module_header,.et_pb_blurb_2.et_pb_blurb .et_pb_module_header a,.et_pb_blurb_3.et_pb_blurb .et_pb_module_header,.et_pb_blurb_3.et_pb_blurb .et_pb_module_header a{font-weight:600}.et_pb_blurb_0.et_pb_blurb p,.et_pb_blurb_1.et_pb_blurb p,.et_pb_blurb_2.et_pb_blurb p,.et_pb_blurb_3.et_pb_blurb p{line-height:1.5em}.et_pb_blurb_0.et_pb_blurb,.et_pb_blurb_1.et_pb_blurb,.et_pb_blurb_2.et_pb_blurb,.et_pb_blurb_3.et_pb_blurb{color:#150E45!important;line-height:1.5em}.et_pb_blurb_0 .et_pb_blurb_content,.et_pb_blurb_1 .et_pb_blurb_content,.et_pb_blurb_2 .et_pb_blurb_content,.et_pb_blurb_3 .et_pb_blurb_content{text-align:left}.et_pb_blurb_0.et_pb_blurb .et_pb_image_wrap,.et_pb_blurb_1.et_pb_blurb .et_pb_image_wrap,.et_pb_blurb_2.et_pb_blurb .et_pb_image_wrap,.et_pb_blurb_3.et_pb_blurb .et_pb_image_wrap{margin:auto auto auto 0}.et_pb_blurb_0 .et_pb_main_blurb_image .et_pb_image_wrap,.et_pb_blurb_1 .et_pb_main_blurb_image .et_pb_image_wrap,.et_pb_blurb_2 .et_pb_main_blurb_image .et_pb_image_wrap,.et_pb_blurb_3 .et_pb_main_blurb_image .et_pb_image_wrap{width:80px}.et_pb_button_7_wrapper .et_pb_button_7,.et_pb_button_7_wrapper .et_pb_button_7:hover,.et_pb_button_8_wrapper .et_pb_button_8,.et_pb_button_8_wrapper .et_pb_button_8:hover,.et_pb_button_9_wrapper .et_pb_button_9,.et_pb_button_9_wrapper .et_pb_button_9:hover,.et_pb_button_10_wrapper .et_pb_button_10,.et_pb_button_10_wrapper .et_pb_button_10:hover{padding-top:0px!important;padding-right:0px!important;padding-bottom:0px!important;padding-left:0px!important}body #page-container .et_pb_section .et_pb_button_7,body #page-container .et_pb_section .et_pb_button_8,body #page-container .et_pb_section .et_pb_button_9,body #page-container .et_pb_section .et_pb_button_10{color:#150E45!important;font-size:13px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_7:hover,body #page-container .et_pb_section .et_pb_button_8:hover,body #page-container .et_pb_section .et_pb_button_9:hover,body #page-container .et_pb_section .et_pb_button_10:hover{color:#828DA4!important}body #page-container .et_pb_section .et_pb_button_7:after,body #page-container .et_pb_section .et_pb_button_8:after,body #page-container .et_pb_section .et_pb_button_9:after,body #page-container .et_pb_section .et_pb_button_10:after{color:#150E45;line-height:inherit;font-size:inherit!important;opacity:1;margin-left:.3em;left:auto;font-family:ETmodules!important;font-weight:400!important}.et_pb_button_7,.et_pb_button_8,.et_pb_button_9,.et_pb_button_10{transition:color 300ms ease 0ms}.et_pb_column_12,.et_pb_column_13{display:flex;flex-direction:column;justify-content:center}.et_pb_image_0{text-align:left;margin-left:0}.et_pb_text_4 h2{text-transform:uppercase;font-size:60px}body #page-container .et_pb_section .et_pb_button_11{color:#AB0000!important;border-width:1px!important;border-color:#AB0000;border-radius:40px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_11:hover{color:#AB0000!important;background-image:initial;background-color:rgba(171,0,0,0.2)}.et_pb_column_7{background-color:#FFFFFF;border-radius:20px 20px 20px 20px;overflow:hidden;padding-top:3vw;padding-right:3vw;padding-bottom:3vw;padding-left:3vw}.et_pb_column_8,.et_pb_column_9,.et_pb_column_10,.et_pb_column_11{background-color:#FFFFFF;border-radius:15px 15px 15px 15px;overflow:hidden;padding-top:30px;padding-right:20px;padding-bottom:30px;padding-left:25px;box-shadow:0px 2px 18px 0px rgba(0,0,0,0.18)}.et_pb_image_0.et_pb_module{margin-left:auto!important;margin-right:auto!important}@media only screen and (min-width:981px){.et_pb_image_0{width:70%}}@media only screen and (max-width:980px){.et_pb_section_0.et_pb_section{padding-bottom:20px}.et_pb_row_0{background-color:initial}.et_pb_row_0.et_pb_row{padding-top:13vw!important;padding-bottom:13vw!important;padding-top:13vw!important;padding-bottom:13vw!important}.et_pb_text_0 h1{font-size:60px;line-height:1.1em}.et_pb_text_0{padding-left:6vw!important}body #page-container .et_pb_section .et_pb_button_0:after,body #page-container .et_pb_section .et_pb_button_5:after,body #page-container .et_pb_section .et_pb_button_6:after,body #page-container .et_pb_section .et_pb_button_7:after,body #page-container .et_pb_section .et_pb_button_8:after,body #page-container .et_pb_section .et_pb_button_9:after,body #page-container .et_pb_section .et_pb_button_10:after,body #page-container .et_pb_section .et_pb_button_11:after{line-height:inherit;font-size:inherit!important;margin-left:.3em;left:auto;display:inline-block;opacity:1;content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_0:before,body #page-container .et_pb_section .et_pb_button_1:after,body #page-container .et_pb_section .et_pb_button_2:after,body #page-container .et_pb_section .et_pb_button_3:after,body #page-container .et_pb_section .et_pb_button_4:after,body #page-container .et_pb_section .et_pb_button_5:before,body #page-container .et_pb_section .et_pb_button_6:before,body #page-container .et_pb_section .et_pb_button_7:before,body #page-container .et_pb_section .et_pb_button_8:before,body #page-container .et_pb_section .et_pb_button_9:before,body #page-container .et_pb_section .et_pb_button_10:before,body #page-container .et_pb_section .et_pb_button_11:before{display:none}body #page-container .et_pb_section .et_pb_button_0:hover:after,body #page-container .et_pb_section .et_pb_button_5:hover:after,body #page-container .et_pb_section .et_pb_button_6:hover:after,body #page-container .et_pb_section .et_pb_button_7:hover:after,body #page-container .et_pb_section .et_pb_button_8:hover:after,body #page-container .et_pb_section .et_pb_button_9:hover:after,body #page-container .et_pb_section .et_pb_button_10:hover:after,body #page-container .et_pb_section .et_pb_button_11:hover:after{margin-left:.3em;left:auto;margin-left:.3em}.et_pb_button_1_wrapper .et_pb_button_1,.et_pb_button_1_wrapper .et_pb_button_1:hover,.et_pb_button_2_wrapper .et_pb_button_2,.et_pb_button_2_wrapper .et_pb_button_2:hover,.et_pb_button_3_wrapper .et_pb_button_3,.et_pb_button_3_wrapper .et_pb_button_3:hover,.et_pb_button_4_wrapper .et_pb_button_4,.et_pb_button_4_wrapper .et_pb_button_4:hover{padding-top:10px!important;padding-right:30px!important;padding-bottom:10px!important;padding-left:40px!important}body #page-container .et_pb_section .et_pb_button_1:before,body #page-container .et_pb_section .et_pb_button_2:before,body #page-container .et_pb_section .et_pb_button_3:before,body #page-container .et_pb_section .et_pb_button_4:before{line-height:inherit;font-size:inherit!important;margin-left:-1.3em;right:auto;display:inline-block;opacity:1;content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_1:hover:before,body #page-container .et_pb_section .et_pb_button_2:hover:before,body #page-container .et_pb_section .et_pb_button_3:hover:before,body #page-container .et_pb_section .et_pb_button_4:hover:before{margin-left:.3em;right:auto;margin-left:-1.3em}div.et_pb_section.et_pb_section_1{background-size:cover;background-repeat:no-repeat;background-position:center;background-blend-mode:normal;background-image:url(https://zarc.web.za/wp-content/uploads/2025/03/ABOUT_LINES.png),linear-gradient(180deg,#150e45 58%,#ffffff 58%)!important}.et_pb_section_1.et_pb_section{padding-bottom:70px}.et_pb_text_1,.et_pb_text_2{font-size:16px;margin-top:40px!important}.et_pb_text_1 h2,.et_pb_text_2 h2{text-align:left}.et_pb_row_3.et_pb_row{margin-top:40px!important}.et_pb_image_0{width:50%}.et_pb_image_0 .et_pb_image_wrap img{width:auto}.et_pb_column_7{padding-top:3vw;padding-right:3vw;padding-bottom:3vw;padding-left:3vw}}@media only screen and (max-width:767px){.et_pb_section_0.et_pb_section{padding-top:20px;padding-bottom:20px}.et_pb_row_0{background-size:cover;background-position:right 0px center;border-radius:30px 30px 30px 30px;overflow:hidden}.et_pb_row_0.et_pb_row{padding-top:18vw!important;padding-bottom:0vw!important;padding-top:18vw!important;padding-bottom:0vw!important}.et_pb_text_0 h1{font-size:32px;line-height:1.4em}.et_pb_text_0{padding-top:20px!important;padding-left:6vw!important}body #page-container .et_pb_section .et_pb_button_0:after,body #page-container .et_pb_section .et_pb_button_5:after,body #page-container .et_pb_section .et_pb_button_6:after,body #page-container .et_pb_section .et_pb_button_7:after,body #page-container .et_pb_section .et_pb_button_8:after,body #page-container .et_pb_section .et_pb_button_9:after,body #page-container .et_pb_section .et_pb_button_10:after,body #page-container .et_pb_section .et_pb_button_11:after{line-height:inherit;font-size:inherit!important;margin-left:.3em;left:auto;display:inline-block;opacity:1;content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_0:before,body #page-container .et_pb_section .et_pb_button_1:after,body #page-container .et_pb_section .et_pb_button_2:after,body #page-container .et_pb_section .et_pb_button_3:after,body #page-container .et_pb_section .et_pb_button_4:after,body #page-container .et_pb_section .et_pb_button_5:before,body #page-container .et_pb_section .et_pb_button_6:before,body #page-container .et_pb_section .et_pb_button_7:before,body #page-container .et_pb_section .et_pb_button_8:before,body #page-container .et_pb_section .et_pb_button_9:before,body #page-container .et_pb_section .et_pb_button_10:before,body #page-container .et_pb_section .et_pb_button_11:before{display:none}body #page-container .et_pb_section .et_pb_button_0:hover:after,body #page-container .et_pb_section .et_pb_button_5:hover:after,body #page-container .et_pb_section .et_pb_button_6:hover:after,body #page-container .et_pb_section .et_pb_button_7:hover:after,body #page-container .et_pb_section .et_pb_button_8:hover:after,body #page-container .et_pb_section .et_pb_button_9:hover:after,body #page-container .et_pb_section .et_pb_button_10:hover:after,body #page-container .et_pb_section .et_pb_button_11:hover:after{margin-left:.3em;left:auto;margin-left:.3em}.et_pb_button_1_wrapper .et_pb_button_1,.et_pb_button_1_wrapper .et_pb_button_1:hover,.et_pb_button_2_wrapper .et_pb_button_2,.et_pb_button_2_wrapper .et_pb_button_2:hover,.et_pb_button_3_wrapper .et_pb_button_3,.et_pb_button_3_wrapper .et_pb_button_3:hover,.et_pb_button_4_wrapper .et_pb_button_4,.et_pb_button_4_wrapper .et_pb_button_4:hover{padding-top:8px!important;padding-right:30px!important;padding-bottom:8px!important;padding-left:40px!important}.et_pb_button_1_wrapper,.et_pb_button_2_wrapper,.et_pb_button_3_wrapper,.et_pb_button_4_wrapper{margin-bottom:-10px!important}body #page-container .et_pb_section .et_pb_button_1,body #page-container .et_pb_section .et_pb_button_2,body #page-container .et_pb_section .et_pb_button_3,body #page-container .et_pb_section .et_pb_button_4{font-size:16px!important}body #page-container .et_pb_section .et_pb_button_1:before,body #page-container .et_pb_section .et_pb_button_2:before,body #page-container .et_pb_section .et_pb_button_3:before,body #page-container .et_pb_section .et_pb_button_4:before{line-height:inherit;font-size:inherit!important;margin-left:-1.3em;right:auto;display:inline-block;opacity:1;content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_1:hover:before,body #page-container .et_pb_section .et_pb_button_2:hover:before,body #page-container .et_pb_section .et_pb_button_3:hover:before,body #page-container .et_pb_section .et_pb_button_4:hover:before{margin-left:.3em;right:auto;margin-left:-1.3em}div.et_pb_section.et_pb_section_1{background-image:url(https://zarc.web.za/wp-content/uploads/2025/03/ABOUT_LINES.png),linear-gradient(180deg,#150e45 51%,#ffffff 51%)!important}.et_pb_section_1.et_pb_section{padding-bottom:0px}.et_pb_row_2.et_pb_row{padding-top:0px!important;padding-top:0px!important}.et_pb_text_1,.et_pb_text_2{font-size:14px;margin-top:0px!important}.et_pb_text_1 h2,.et_pb_text_2 h2{font-size:40px;text-align:left}.et_pb_row_3.et_pb_row{margin-top:0px!important}.et_pb_image_0{margin-bottom:30px!important;width:60%}.et_pb_image_0 .et_pb_image_wrap img{width:auto}.et_pb_text_4 h2{font-size:40px}.et_pb_column_7{padding-top:5vw;padding-right:5vw;padding-bottom:5vw;padding-left:5vw}}FollowFollowFollowFollowFollowFollow.sp-status {color: #fff;}System Statusdocument.addEventListener("DOMContentLoaded", function() {// Define status coloursconst greens = '#35955f'; // Operationalconst blues = '#648aad'; // Performance issuesconst oranges = '#e37e3b'; // Partial outageconst reds = '#e75a53'; // Major outageconst statusWidget = {badge: {enabled: true,selector: '.sp-status',},banner: {enabled: true,position: 'bottom-left', // Optional [bottom-left | bottom-right | top-left | top-right], def: bottom-leftstatusPageUrl: 'https://status.zarc.net.za'},};// Fetch system status APIfetch('https://status.zarc.net.za/api/v1/components', {method: 'GET',headers: {'X-Cachet-Token': 'UyHA0mIGO9NPp2OnDBxs',}}).then(response => response.json()).then(data => {const statuses = data.data.map(component => component.status);const isOperational = statuses.every(status => status === 1);const isPerformanceIssues = statuses.some(status => status === 2);const isPartialOutage = statuses.some(status => status === 3);const isMajorOutage = statuses.some(status => status === 4);// Update Badgeif (statusWidget.badge.enabled) {const badgeElement = document.querySelector(statusWidget.badge.selector);if (badgeElement) {badgeElement.style.padding = '10px';badgeElement.style.borderRadius = '5px';badgeElement.style.display = 'inline-flex';badgeElement.style.alignItems = 'center';badgeElement.style.cursor = 'pointer';badgeElement.style.position = 'relative';// Status circleconst statusCircle = document.createElement('span');statusCircle.classList.add('status-circle');statusCircle.style.display = 'inline-block';statusCircle.style.width = '10px';statusCircle.style.height = '10px';statusCircle.style.borderRadius = '50%';statusCircle.style.marginLeft = '5px';statusCircle.style.verticalAlign = 'middle';if (isOperational) {statusCircle.style.backgroundColor = greens;} else if (isPerformanceIssues) {statusCircle.style.backgroundColor = blues;} else if (isPartialOutage) {statusCircle.style.backgroundColor = oranges;} else if (isMajorOutage) {statusCircle.style.backgroundColor = reds;}badgeElement.appendChild(statusCircle);// Tooltipconst tooltip = document.createElement('div');tooltip.textContent = isOperational ? 'All systems operational' :isPerformanceIssues ? 'Performance issues detected' :isPartialOutage ? 'Partial outage' :'Major outage';tooltip.style.position = 'absolute';tooltip.style.top = '120%';tooltip.style.left = '50%';tooltip.style.transform = 'translateX(-50%)';tooltip.style.padding = '5px';tooltip.style.borderRadius = '4px';tooltip.style.backgroundColor = 'black';tooltip.style.color = 'white';tooltip.style.fontSize = '12px';tooltip.style.visibility = 'hidden';tooltip.style.whiteSpace = 'nowrap';badgeElement.addEventListener('mouseenter', () => {tooltip.style.visibility = 'visible';});badgeElement.addEventListener('mouseleave', () => {tooltip.style.visibility = 'hidden';});badgeElement.appendChild(tooltip);}}// Ionicons Scriptconst ioniconsEsm = document.createElement("script");ioniconsEsm.type = "module";ioniconsEsm.src ="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js";const ioniconsNomodule = document.createElement("script");ioniconsNomodule.nomodule = true;ioniconsNomodule.src ="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js";document.head.appendChild(ioniconsEsm);document.head.appendChild(ioniconsNomodule);let issueStartTime = null;// Update Bannerif (statusWidget.banner.enabled && !isOperational) {const bannerContainer = document.createElement('div');bannerContainer.style.display = 'flex';bannerContainer.style.flexDirection = 'column';bannerContainer.style.position = 'fixed';bannerContainer.style.width = 'fit-content';bannerContainer.style.margin = '20px';bannerContainer.style.padding = '20px';bannerContainer.style.borderRadius = '4px';bannerContainer.style.color = 'white';bannerContainer.style.zIndex = '1000';if (isMajorOutage) {bannerContainer.style.backgroundColor = reds;} else if (isPartialOutage) {bannerContainer.style.backgroundColor = oranges;} else if (isPerformanceIssues) {bannerContainer.style.backgroundColor = blues;}// Close buttonconst closeButton = document.createElement('button');closeButton.textContent = '✖';closeButton.style.background = 'none';closeButton.style.border = 'none';closeButton.style.color = 'white';closeButton.style.fontSize = '10px';closeButton.style.cursor = 'pointer';closeButton.style.position = 'absolute';closeButton.style.top = '5px';closeButton.style.right = '5px';closeButton.addEventListener('click', function() {bannerContainer.style.display = 'none';});bannerContainer.appendChild(closeButton);// Flex container for the contentconst contentContainer = document.createElement('div');contentContainer.style.display = 'flex';contentContainer.style.width = '100%';// Icon containerconst iconContainer = document.createElement('div');const warningIcon = document.createElement('ion-icon');warningIcon.setAttribute('name', 'warning');warningIcon.classList.add('text-component-4');warningIcon.style.color = 'white';warningIcon.style.marginRight = '10px';warningIcon.style.fontSize = '24px';iconContainer.appendChild(warningIcon);// Text containerconst textContainer = document.createElement('div');textContainer.style.color = 'white';// Banner messageconst statusText = document.createElement('span');statusText.textContent = isMajorOutage ? 'Major outage' :isPartialOutage ? 'Partial outage' :isPerformanceIssues ? 'Performance issues detected' : '';textContainer.appendChild(statusText);// Ongoing timeconst ongoingTextElement = document.createElement('div');function updateOngoingTime() {if (issueStartTime) {const elapsedTime = Math.floor((Date.now() - issueStartTime) / 1000);const days = Math.floor(elapsedTime / (3600 * 24));const hours = Math.floor((elapsedTime % (3600 * 24)) / 3600);const minutes = Math.floor((elapsedTime % 3600) / 60);let ongoingText = '';if (elapsedTime >= 60) {if (days > 0) ongoingText += `${days} day${days > 1 ? 's' : ''}, `;if (hours > 0 || days > 0) ongoingText += `${hours} hour${hours > 1 ? 's' : ''}, `;ongoingText += `${minutes} minute${minutes > 1 ? 's' : ''}`;ongoingTextElement.textContent = `Ongoing for ${ongoingText}`;}}}// Check the initial status and set the issueStartTime based on updated_atfunction checkStatusAndSetup(updatedAtTimestamps) {if (isOperational) {issueStartTime = null; // Reset timingongoingTextElement.textContent = ''; // Clear ongoing text} else {// Find the most recent updated_at timestampconst latestUpdatedAt = Math.max(...updatedAtTimestamps);issueStartTime = new Date(latestUpdatedAt).getTime(); // Set issueStartTime to the latest updated_at}updateOngoingTime();}// Initial checkconst updatedAtTimestamps = data.data.map(component => new Date(component.updated_at).getTime());checkStatusAndSetup(updatedAtTimestamps);setInterval(() => {checkStatusAndSetup(updatedAtTimestamps); // Regularly check the status every minuteupdateOngoingTime();}, 60000);ongoingTextElement.style.marginTop = '20px';textContainer.appendChild(ongoingTextElement);// Updates linkconst updatesLink = document.createElement('a');updatesLink.href = statusWidget.banner.statusPageUrl;updatesLink.textContent = 'View latest updates';updatesLink.style.color = 'white';updatesLink.style.display = 'block';updatesLink.style.marginTop = '20px';updatesLink.style.textDecoration = 'underline';textContainer.appendChild(updatesLink);contentContainer.appendChild(iconContainer);contentContainer.appendChild(textContainer);bannerContainer.appendChild(contentContainer);// Set the banner positionswitch (statusWidget.banner.position) {case 'bottom-left':bannerContainer.style.bottom = '0';bannerContainer.style.left = '0';break;case 'bottom-right':bannerContainer.style.bottom = '0';bannerContainer.style.right = '0';break;case 'top-left':bannerContainer.style.top = '0';bannerContainer.style.left = '0';break;case 'top-right':bannerContainer.style.top = '0';bannerContainer.style.right = '0';break;default:bannerContainer.style.bottom = '0';bannerContainer.style.left = '0';}document.body.appendChild(bannerContainer);}}).catch(error => {console.error('Error fetching system status:', error);});});Search for:.sp-status {color: #fff;}System Statusdocument.addEventListener("DOMContentLoaded", function() {// Define status coloursconst greens = '#35955f'; // Operationalconst blues = '#648aad'; // Performance issuesconst oranges = '#e37e3b'; // Partial outageconst reds = '#e75a53'; // Major outageconst statusWidget = {badge: {enabled: true,selector: '.sp-status',},banner: {enabled: true,position: 'bottom-left', // Optional [bottom-left | bottom-right | top-left | top-right], def: bottom-leftstatusPageUrl: 'https://status.zarc.net.za'},};// Fetch system status APIfetch('https://status.zarc.net.za/api/v1/components', {method: 'GET',headers: {'X-Cachet-Token': 'UyHA0mIGO9NPp2OnDBxs',}}).then(response => response.json()).then(data => {const statuses = data.data.map(component => component.status);const isOperational = statuses.every(status => status === 1);const isPerformanceIssues = statuses.some(status => status === 2);const isPartialOutage = statuses.some(status => status === 3);const isMajorOutage = statuses.some(status => status === 4);// Update Badgeif (statusWidget.badge.enabled) {const badgeElement = document.querySelector(statusWidget.badge.selector);if (badgeElement) {badgeElement.style.padding = '10px';badgeElement.style.borderRadius = '5px';badgeElement.style.display = 'inline-flex';badgeElement.style.alignItems = 'center';badgeElement.style.cursor = 'pointer';badgeElement.style.position = 'relative';// Status circleconst statusCircle = document.createElement('span');statusCircle.classList.add('status-circle');statusCircle.style.display = 'inline-block';statusCircle.style.width = '10px';statusCircle.style.height = '10px';statusCircle.style.borderRadius = '50%';statusCircle.style.marginLeft = '5px';statusCircle.style.verticalAlign = 'middle';if (isOperational) {statusCircle.style.backgroundColor = greens;} else if (isPerformanceIssues) {statusCircle.style.backgroundColor = blues;} else if (isPartialOutage) {statusCircle.style.backgroundColor = oranges;} else if (isMajorOutage) {statusCircle.style.backgroundColor = reds;}badgeElement.appendChild(statusCircle);// Tooltipconst tooltip = document.createElement('div');tooltip.textContent = isOperational ? 'All systems operational' :isPerformanceIssues ? 'Performance issues detected' :isPartialOutage ? 'Partial outage' :'Major outage';tooltip.style.position = 'absolute';tooltip.style.top = '120%';tooltip.style.left = '50%';tooltip.style.transform = 'translateX(-50%)';tooltip.style.padding = '5px';tooltip.style.borderRadius = '4px';tooltip.style.backgroundColor = 'black';tooltip.style.color = 'white';tooltip.style.fontSize = '12px';tooltip.style.visibility = 'hidden';tooltip.style.whiteSpace = 'nowrap';badgeElement.addEventListener('mouseenter', () => {tooltip.style.visibility = 'visible';});badgeElement.addEventListener('mouseleave', () => {tooltip.style.visibility = 'hidden';});badgeElement.appendChild(tooltip);}}// Ionicons Scriptconst ioniconsEsm = document.createElement("script");ioniconsEsm.type = "module";ioniconsEsm.src ="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js";const ioniconsNomodule = document.createElement("script");ioniconsNomodule.nomodule = true;ioniconsNomodule.src ="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js";document.head.appendChild(ioniconsEsm);document.head.appendChild(ioniconsNomodule);let issueStartTime = null;// Update Bannerif (statusWidget.banner.enabled && !isOperational) {const bannerContainer = document.createElement('div');bannerContainer.style.display = 'flex';bannerContainer.style.flexDirection = 'column';bannerContainer.style.position = 'fixed';bannerContainer.style.width = 'fit-content';bannerContainer.style.margin = '20px';bannerContainer.style.padding = '20px';bannerContainer.style.borderRadius = '4px';bannerContainer.style.color = 'white';bannerContainer.style.zIndex = '1000';if (isMajorOutage) {bannerContainer.style.backgroundColor = reds;} else if (isPartialOutage) {bannerContainer.style.backgroundColor = oranges;} else if (isPerformanceIssues) {bannerContainer.style.backgroundColor = blues;}// Close buttonconst closeButton = document.createElement('button');closeButton.textContent = '✖';closeButton.style.background = 'none';closeButton.style.border = 'none';closeButton.style.color = 'white';closeButton.style.fontSize = '10px';closeButton.style.cursor = 'pointer';closeButton.style.position = 'absolute';closeButton.style.top = '5px';closeButton.style.right = '5px';closeButton.addEventListener('click', function() {bannerContainer.style.display = 'none';});bannerContainer.appendChild(closeButton);// Flex container for the contentconst contentContainer = document.createElement('div');contentContainer.style.display = 'flex';contentContainer.style.width = '100%';// Icon containerconst iconContainer = document.createElement('div');const warningIcon = document.createElement('ion-icon');warningIcon.setAttribute('name', 'warning');warningIcon.classList.add('text-component-4');warningIcon.style.color = 'white';warningIcon.style.marginRight = '10px';warningIcon.style.fontSize = '24px';iconContainer.appendChild(warningIcon);// Text containerconst textContainer = document.createElement('div');textContainer.style.color = 'white';// Banner messageconst statusText = document.createElement('span');statusText.textContent = isMajorOutage ? 'Major outage' :isPartialOutage ? 'Partial outage' :isPerformanceIssues ? 'Performance issues detected' : '';textContainer.appendChild(statusText);// Ongoing timeconst ongoingTextElement = document.createElement('div');function updateOngoingTime() {if (issueStartTime) {const elapsedTime = Math.floor((Date.now() - issueStartTime) / 1000);const days = Math.floor(elapsedTime / (3600 * 24));const hours = Math.floor((elapsedTime % (3600 * 24)) / 3600);const minutes = Math.floor((elapsedTime % 3600) / 60);let ongoingText = '';if (elapsedTime >= 60) {if (days > 0) ongoingText += `${days} day${days > 1 ? 's' : ''}, `;if (hours > 0 || days > 0) ongoingText += `${hours} hour${hours > 1 ? 's' : ''}, `;ongoingText += `${minutes} minute${minutes > 1 ? 's' : ''}`;ongoingTextElement.textContent = `Ongoing for ${ongoingText}`;}}}// Check the initial status and set the issueStartTime based on updated_atfunction checkStatusAndSetup(updatedAtTimestamps) {if (isOperational) {issueStartTime = null; // Reset timingongoingTextElement.textContent = ''; // Clear ongoing text} else {// Find the most recent updated_at timestampconst latestUpdatedAt = Math.max(...updatedAtTimestamps);issueStartTime = new Date(latestUpdatedAt).getTime(); // Set issueStartTime to the latest updated_at}updateOngoingTime();}// Initial checkconst updatedAtTimestamps = data.data.map(component => new Date(component.updated_at).getTime());checkStatusAndSetup(updatedAtTimestamps);setInterval(() => {checkStatusAndSetup(updatedAtTimestamps); // Regularly check the status every minuteupdateOngoingTime();}, 60000);ongoingTextElement.style.marginTop = '20px';textContainer.appendChild(ongoingTextElement);// Updates linkconst updatesLink = document.createElement('a');updatesLink.href = statusWidget.banner.statusPageUrl;updatesLink.textContent = 'View latest updates';updatesLink.style.color = 'white';updatesLink.style.display = 'block';updatesLink.style.marginTop = '20px';updatesLink.style.textDecoration = 'underline';textContainer.appendChild(updatesLink);contentContainer.appendChild(iconContainer);contentContainer.appendChild(textContainer);bannerContainer.appendChild(contentContainer);// Set the banner positionswitch (statusWidget.banner.position) {case 'bottom-left':bannerContainer.style.bottom = '0';bannerContainer.style.left = '0';break;case 'bottom-right':bannerContainer.style.bottom = '0';bannerContainer.style.right = '0';break;case 'top-left':bannerContainer.style.top = '0';bannerContainer.style.left = '0';break;case 'top-right':bannerContainer.style.top = '0';bannerContainer.style.right = '0';break;default:bannerContainer.style.bottom = '0';bannerContainer.style.left = '0';}document.body.appendChild(bannerContainer);}}).catch(error => {console.error('Error fetching system status:', error);});});Search for:HomeZonesRegistrarsAccredited RegistrarsRegistrar onboardingAvailable Products & NamespacesPremium Domain NamesDNSSECContact & Balance CheckCIPCTechnicalEPP Explained.ZA SLDsOT&E CriteriaLogging In/OutContact OperationsDomain OperationsCustom ExtensionsEPP Contact ExtensionsEPP Domain ExtensionsConstraintsContact ConstraintsDomain ConstraintsMessage PollingSSL RequirementsLegacy Transfer ProcedureStatus MappingNamespace ComparisonResources.ZA SLD PoliciesFAQNewsWHOISContact.dvcs_smooth_secondary_menu .et_pb_menu__wrap {justify-content: right !important;}/* desktop menu */.et_pb_menu.dvcs_free_header_5 .et_pb_menu__menu {flex: 1 0 auto !important;justify-content: center !important;}/* mobile menu */.et_pb_menu.dvcs_free_header_5 .et_mobile_menu {max-height: 75vh;overflow-y: auto;}@media all and (max-width: 980px){.et_pb_menu.dvcs_free_header_5 .et_mobile_menu {border-radius: 4px;width: 300px !important;right: 0;left: auto;top: calc(100% + 18px) !important;}}@media all and (max-width: 768px){.et_pb_menu.dvcs_free_header_5 .et_mobile_menu {width: calc(100% + 160px) !important;left: 0;right: auto;margin-left: -15px !important;}/* mobile menu links */.dvcs_free_header_5 .et_mobile_menu a {border-left: 5px solid #2c3333;margin-bottom: 4px;border-radius: 5px;}}/* mobile menu first link */.dvcs_free_header_5 .et_mobile_menu > li:first-child > a {border-top: 1px solid rgba(0,0,0,.03) !important;}/* open mobile menu icon */.et-db #et-boc .et-l .dvcs_free_header_5 .opened .mobile_menu_bar:before {content: "d";}/* mobile menu parent menu items */.dvcs_free_header_5 .et_mobile_menu .menu-item-has-children > a {background-color: transparent;}/*** SMOOTH SUBMENUS EFFECT CSS.* @author Ivan Chiurcci* @site https://www.divicio.us/tutorials/menu/create-the-smooth-submenus-effect-for-divi-desktop-menu/*//* Submenu background and arrow *//* hide submenu */.dvcs_smooth_submenus .et_pb_menu__menu nav .et-menu > li > ul {animation: none;opacity: 0;transition: opacity 0.4s ease-in !important;}/* visible submenu */.dvcs-item-enter > .sub-menu {display: block;}.dvcs_smooth_submenus .et_pb_menu__menu nav .et-menu > .dvcs-item-enter-active > .sub-menu,.dvcs_smooth_submenus .dvcs-item-enter-active > .sub-menu {opacity: 1;}/* submenu background wrapper */.dvcs_submenu_bg_wrapper {position: absolute;z-index: 1;pointer-events: none;}.dvcs_submenu_bg_wrapper.dvcs-animatable {/* transition: transform 0.2s; */transition: all 0.4s ease;transform-origin: 50% 0;}.dvcs_submenu_bg_wrapper:not(.dvcs-animatable) {pointer-events: none;}/* submenu background */.dvcs_free_header_5 .dvcs_submenu_bg {width: 150px;height: 100px;position: absolute;left: 50%;transform: translateX(-50%);background: #ffffff;border-radius: 5px;box-shadow: 0px 2px 18px 0px rgb(0 0 0 / 10%);transition: all 0.2s, opacity 0.1s, transform 0.1s;transform-origin: 50% 0;display: flex;justify-content: center;opacity: 0;border-top: 5px solid #2c3333;}.dvcs_submenu_bg.dvcs_open {opacity: 1;}/* submenu background arrow */.dvcs_free_header_5 .dvcs_arrow {position: absolute;width: 7px;height: 7px;display: block;background: #2c3333;transform: translateY(-50%) rotate(45deg);pointer-events: none;top: -5px;}/* END Submenu background and arrow *//* Menus CSS *//* first level submenus */.dvcs_smooth_submenus .et_pb_menu__menu nav .et-menu > li > ul {left: 50%;transform: translate(-50%, 0) translateZ(0);background-color: transparent !important;}/* remove submenu box-shadow */.dvcs_smooth_submenus .nav li ul {box-shadow: none !important;}/* remove parent item arrow */.dvcs_smooth_submenus .et-menu > li.menu-item-has-children > a:after {content: "" !important;}/* parent item link */.dvcs_smooth_submenus .et-menu > li > a {padding-left: 10px !important;padding-right: 10px !important;}/* END Menus CSS *//* END SMOOTH SUBMENUS EFFECT CSS *//*** SMOOTH SUBMENUS EFFECT FOR DIVI DESKTOP MENU.* @author Ivan Chiurcci* @site https://www.divicio.us/tutorials/menu/create-the-smooth-submenus-effect-for-divi-desktop-menu/*/window.dvcsSmoothSubmenus = {/*** Create the submenu background element* and insert it into the menu element before element.** @param {HTMLelement} nav Menu element.* @param {HTMLelement} ul Menu element.*/createSubmenuBg: function(nav, ul){// create submenu background elementlet submenuBgWrapper = document.createElement("div"),submenuBg = document.createElement("div"),arrow = document.createElement("span");// add CSS classessubmenuBgWrapper.classList.add("dvcs_submenu_bg_wrapper");submenuBg.classList.add("dvcs_submenu_bg");arrow.classList.add("dvcs_arrow");// insert into menunav.insertBefore(submenuBgWrapper, ul);submenuBgWrapper.appendChild(submenuBg);submenuBg.appendChild(arrow);},/*** Handle the submenu bakcground on menu item mouse enter.** Shows the submenu background when the parent menu item is hovered over* and updates it's coordinates and size values accordingly.** @param {HTMLelement} item The menu item that is currently hovered over.* @param {HTMLelement} nav Menu element.* @param {HTMLelement} submenuBgWrapper Submenu background wrapper.* @param {HTMLelement} submenuBg Submenu background.*/handleEnter: function(item, nav, submenuBgWrapper, submenuBg){// coordinates of the current submenu and menu elementconst submenu = item.querySelector('.sub-menu'),submenuRect = submenu.getBoundingClientRect(),navRect = nav.getBoundingClientRect();// submenu background valuesconst bg = {height: submenuRect.height,width: submenuRect.width,top: submenuRect.top - navRect.top,left: submenuRect.left - navRect.left};// add CSS classesitem.classList.add('dvcs-item-enter');setTimeout(() => item.classList.contains('dvcs-item-enter') && item.classList.add('dvcs-item-enter-active'), 150);submenuBg.classList.add('dvcs_open');// set the submenu wrapper background propertiessubmenuBgWrapper.style.setProperty('transform', `translate(${bg.left}px, ${bg.top}px)`);submenuBgWrapper.style.setProperty('width', `${bg.width}px`);submenuBgWrapper.style.setProperty('height', `${bg.height}px`);// set the submenu background propertiessubmenuBg.style.setProperty('width', `${bg.width}px`);submenuBg.style.setProperty('height', `${bg.height}px`);},/*** Handle the submenu background hiding.** Hides the submenu background when the mouse leaves* the parent menu item.** @param {HTMLelement} item The menu item.* @param {HTMLelement} submenuBg Submenu background.*/handleLeave: function(item, submenuBg){// remove CSS classesitem.classList.remove('dvcs-item-enter', 'dvcs-item-enter-active');submenuBg.classList.remove('dvcs_open');// remove the submenu background propertiessubmenuBg.style.setProperty('width', '');submenuBg.style.setProperty('height', '');},/*** Handle the submenu background when mouse enters the menu element.** Enables transition for the submenu background to ensure it* moves smoothly in between the adjacent parent menu items.** @param {HTMLelement} submenuBgWrapper Submenu background wrapper.*/handleEnterUl: function(submenuBgWrapper){setTimeout(function(){submenuBgWrapper.classList.add('dvcs-animatable')}, 150);},/*** Handle the submenu background when mouse leaves the menu element.** Disables transition for the submenu background and* resets it's size.** @param {HTMLelement} submenuBgWrapper Submenu background wrapper.* @param {HTMLelement} submenuBg Submenu background.*/handleLeaveUl: function(submenuBgWrapper, submenuBg){submenuBgWrapper.classList.remove('dvcs-animatable');// remove the submenu background propertiessubmenuBg.style.setProperty('width', '');submenuBg.style.setProperty('height', '');},/*** Handle the "smooth submenus" effect.** @param {string} menuSelector Menu selector, CSS ID or class. Default: '#et-top-navigation'* @param {string} navSelector Menu element selector, CSS ID or class. Default: '#top-menu-nav'* @param {string} ulSelector Menu element selector, CSS ID or class. Default: '#top-menu'*/effect: function(menuSelector = '#et-top-navigation', navSelector = '#top-menu-nav', ulSelector = '#top-menu'){// select the menuslet menus = document.querySelectorAll(menuSelector); // EXPERIMENTALmenus.forEach(menu => {if(!menu){return}// select the menu and elementslet nav = menu.querySelector(navSelector),ul = nav.querySelector(ulSelector);// insert the submenu background element(with arrow) into the elementthis.createSubmenuBg(nav, ul);const items = nav.querySelectorAll(`${ulSelector} > li.menu-item-has-children`),submenuBgWrapper = nav.querySelector('.dvcs_submenu_bg_wrapper'),submenuBg = nav.querySelector('.dvcs_submenu_bg');// handle element mouse enterul.addEventListener('mouseenter', () => this.handleEnterUl(submenuBgWrapper));ul.addEventListener('touchstart', () => this.handleEnterUl(submenuBgWrapper)); // ???// handle menu items mouse enteritems.forEach(item => {item.addEventListener('mouseenter', () => {this.handleEnter(item, nav, submenuBgWrapper, submenuBg)})});items.forEach(item => { // ???item.addEventListener('touchstart', () => {this.handleEnter(item, nav, submenuBgWrapper, submenuBg)})});// handle menu items mouse leaveitems.forEach(item => {item.addEventListener('mouseleave', () => {this.handleLeave(item, submenuBg)})});// handle element mouse leaveul.addEventListener('mouseleave', () => this.handleLeaveUl(submenuBgWrapper, submenuBg));});}}document.addEventListener('DOMContentLoaded', function(){// Divi Menu(or Fullwidth Menu) moduledvcsSmoothSubmenus.effect('.dvcs_smooth_submenus', '.et-menu-nav', '.et-menu');})/*** Collapse Divi mobile menu submenus CSS.* @author Ivan Chiurcci* @site https://www.divicio.us/tutorials/how-to-collapse-divi-menu-module-submenus-and-keep-parent-links-clickable-on-mobile-devices/*//* START: Collapse Divi Menu Module Submenus and Keep Parent Items Clickable on Mobile *//* Parent menu item */.et_pb_module .et_mobile_menu .menu-item-has-children.clickable,.et_pb_module .et_mobile_menu .menu-item-has-children > a {position: relative;}/* Parent menu item icon */.et_pb_module .et_mobile_menu .menu-item-has-children:not(.clickable) > a:after,.et_pb_module .et_mobile_menu .menu-item-has-children.clickable > span.parent_icon:after {font-family: "ETmodules";text-align: center;speak: none;font-weight: normal;font-variant: normal;text-transform: none;-webkit-font-smoothing: antialiased;font-size: 16px;}/* Disabled parent menu item icon positioning */.et_pb_module .et_mobile_menu .menu-item-has-children:not(.clickable) > a:after {position: absolute;top: 13px;right: 10px;}/* Clickable parent menu item icon */.et_pb_module .et_mobile_menu .menu-item-has-children.clickable > span.parent_icon {display: grid;grid-template-rows: 1fr;grid-template-columns: 1fr;align-items: center;position: absolute;width: 46px;height: 46px;color: #120b75;background: rgba(0, 0, 0, 0);right: 0;top: 0;z-index: 9;}/* Collapsed submenu parent menu item icon */.et_pb_module .et_mobile_menu .menu-item-has-children:not(.clickable) > a:after,.et_pb_module .et_mobile_menu .menu-item-has-children.clickable > span.parent_icon:after {content: "#";}/* Expanded submenu parent menu item icon */.et_pb_module .et_mobile_menu .menu-item-has-children:not(.clickable).visible > a:after,.et_pb_module .et_mobile_menu .menu-item-has-children.clickable.visible > span.parent_icon:after {content: """;}/* Hide submenu by default */.et_pb_module .et_mobile_menu ul.sub-menu,.et-db #et-boc .et-l .et_pb_menu .et_mobile_menu > ul.sub-menu,.et-db #et-boc .et-l .et_pb_fullwidth_menu .et_mobile_menu > ul.sub-menu {display: none !important;visibility: hidden !important;}/* Show submenu */.et_pb_module .et_mobile_menu .visible > ul.sub-menu,.et-db #et-boc .et-l .et_pb_menu .et_mobile_menu .visible > ul.sub-menu,.et-db #et-boc .et-l .et_pb_fullwidth_menu .et_mobile_menu .visible > ul.sub-menu {display: block !important;visibility: visible !important;}/* END: Collapse Divi Menu Module Submenus and Keep Parent Items Clickable on Mobile */(function($) {/*** Collapse Divi mobile menu submenus.** Works for both the Menu and the Fullwidth Menu modules.* The parent item links can be either disabled or clickable.** @author Ivan Chiurcci* @site https://www.divicio.us/tutorials/how-to-collapse-divi-menu-module-submenus-and-keep-parent-links-clickable-on-mobile-devices/** @param bool parentClickable Pass true to keep the parent menu item links clickable. Default: false.*/function dvcs_collapse_menu_module_submenus_on_mobile(parentClickable = false) {// Mobile menulet $menu = $('.et_pb_module .et_mobile_menu');// Iterate the mobile menu links$menu.find('a').each(function() {// Menu hamburger iconlet $menu_icon = $(this).parents('.mobile_nav').find('.mobile_menu_bar');// Remove click event handlers from the link$(this).off('click');// If the menu item DOESN'T HAVE submenusif( ! $(this).siblings('.sub-menu').length ) {// Close the mobile menu on link click$(this).on('click', (e) => $menu_icon.trigger('click'));} else {// If parent items links are DISABLEDif( ! parentClickable ){// Replace the URL with the # symbol$(this).attr('href', '#');// Open/close the submenu on link click$(this).on('click', (e) => toggle_visible(e, $(this).parent()));} else {// Add the "clickable" class to the parent( tag)$(this).parent().addClass('clickable')// Prepend the icon to parent.prepend('')// Open/close the submenu on icon click.find('.parent_icon').on('click', (e) => toggle_visible(e, $(this).parent()));// Link click$(this).on('click', function(e){// Toggle the submenu if the link doesn't have a URL or anchorif ( $(this).attr('href') === '#' ) {toggle_visible(e, $(this).parent());} else {// Close the mobile menu$menu_icon.trigger('click');}});}}});/*** Toggles the 'visible' class on passed element.*/const toggle_visible = (e, elem) => {e.preventDefault();elem.toggleClass('visible');}}$(function() {/*** Call the function with a delay to allow* the mobile menu(s) be ready first.** To keep parent links clickable pass true (boolean) as argument.*/setTimeout(function() {dvcs_collapse_menu_module_submenus_on_mobile(false);}, 700);});})(jQuery);Login Secure, Reliable, South African
+Find out moreco.zaorg.zanet.zaweb.zaAbout Us
+
+ZA Registry Consortium (ZARC) is the contracted Registry Operator for South Africa’s second-level domains (SLDs): CO.ZA, ORG.ZA, NET.ZA, and WEB.ZA.
+
+As a proudly South African, homegrown initiative, we are dedicated to providing innovative and internationally benchmarked domain name solutions that drive the security, stability, and growth of South Africa’s digital landscape.
+Backed by industry expertise, ZARC ensures the seamless operation of .ZA domains through technical excellence, robust infrastructure, and a commitment to cybersecurity. Our experienced team of registry professionals, technicians, and partners work together to uphold the integrity of South Africa’s domain space.
+OUR MISSION – ZARC IS COMMITED TO:Ensuring Security & Reliability – We implement world-class standards to safeguard domain ownership and prevent domain abuse.Driving Local Innovation – As a South African entity, we continuously evolve our offerings to meet the needs of businesses and individuals in the digital economy.Supporting the Internet Community – Through training, education, and strategic partnerships, we empower stakeholders with the knowledge and tools to navigate the domain name industry.More About UsStay connected with usRegistrars
+View the full list of accredited registrars.Take me thereWHOIS
+Querying domain names and IP addresses.View Port 43 WHOISTechnical
+Choose your zones, start your journey with ZARC.Technical OT&EFAQ
+Provides quick answers to common questions.View FAQsCELEbrating 30 years of co.za
+
+In 2024, ZARC proudly celebrates 30 years of CO.ZA, a milestone that highlights the resilience, trust, and growth of South Africa’s online presence. As we look to the future, we remain focused on fostering a secure and inclusive internet space for all.Become a RegistrarArticles
+Building Trust Through Data: How .ZA Turned Raw Logs into Insights
+Nov 5, 2025 | Uncategorized
+At ZARC, the registry operator for South Africa’s .ZA commercial second-level domains, data isn’t just an operational by-product — it’s...read moreUnderstanding DNSSEC: Strengthening Trust in the Internet
+Oct 27, 2025 | Articles
+The Domain Name System (DNS) is often described as the “phonebook of the Internet.” It translates human-friendly domain names, like...read moreMandela Day 2025
+Aug 15, 2025 | Articles
+Every year on 18 July, South Africans and the world pause to honour the life and legacy of Nelson Mandela. Mandela Day is a global call to...read moreRead all articlesStatistics
+Vertical Domain Movement (growth/decline) of the SRSfetch('proxy-vertical.php').then(response => response.json()).then(data => {// Format date categories as "MMM YYYY" (e.g., "Apr 2024")const categories = data.map(item => {const d = new Date(item.date);return d.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });});// Convert the values to integersconst createCounts = data.map(item => parseInt(item.create_count, 10));const deleteCounts = data.map(item => parseInt(item.delete_count, 10));const movements = data.map(item => parseInt(item.movement, 10));// ApexCharts options for a mixed chartvar options = {chart: {height: 426,type: 'line',stacked: false,toolbar: {show: false // disables the zoom and export buttons}},title: {align: 'center',style: {fontSize: '16px',fontWeight: 'bold',color: '#373d3f'}},series: [{ name: 'Creates', type: 'line', data: createCounts },{ name: 'Deletes', type: 'line', data: deleteCounts },{ name: 'Net Movement', type: 'column', data: movements }],xaxis: {categories: categories,labels: {rotate: -45,rotateAlways: true,style: {fontSize: '12px'}}},colors: ['#4c956c', '#e63946', '#193e73'],stroke: {width: [4, 4, 0],curve: 'smooth'},markers: {size: [5, 5, 0]},tooltip: {shared: true,intersect: false},legend: {position: 'bottom'},plotOptions: {bar: {columnWidth: '50%',borderRadius: 4, // Rounded corner radiusborderRadiusApplication: 'end' // Apply the rounding only to the "end" side of the bar}}};// Render the chart in the specified divvar chart = new ApexCharts(document.querySelector("#verticalMovementChart"), options);chart.render();}).catch(error => console.error('Error fetching data:', error));Horizontal Movement (Transfers) in the SRS// Fetch the JSON data from your proxy file (adjust the URL/path if needed)fetch('proxy-horizontal.php').then(response => response.json()).then(data => {// Format x-axis labels as "Apr 2024"const categories = data.map(item => {const d = new Date(item.date);return d.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });});// The in/out counts are identical, so we only use one value for the chartconst transfers = data.map(item => parseInt(item.transfer_in_count, 10));// Configure ApexCharts optionsvar options = {chart: {height: 426,type: 'bar'},title: {align: 'center',style: {fontSize: '16px',fontWeight: 'bold',color: '#373d3f'}},subtitle: {align: 'center'},series: [{name: 'Transfers',data: transfers}],xaxis: {categories: categories,labels: {rotate: -45,rotateAlways: true,style: {fontSize: '12px'}}},colors: ['#4c956c'], // Green color for the barsplotOptions: {bar: {columnWidth: '50%',borderRadius: 4, // Rounded cornersborderRadiusApplication: 'end' // Only applied at the top (end) of the bar}},dataLabels: {enabled: false // Disable data labels on each bar},tooltip: {shared: true,intersect: false},legend: {position: 'bottom'}};// Render the chart in the specified divvar chart = new ApexCharts(document.querySelector("#transfersChart"), options);chart.render();}).catch(error => console.error('Error fetching data:', error));SRS Domain Count Over Time// Fetch the domain count data from your proxy filefetch('proxy-domain-count.php').then(response => response.json()).then(data => {// Convert date strings to user-friendly month/year labels (e.g., "May 2024")const categories = data.map(item => {const d = new Date(item.date);return d.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });});// Convert string sums to integersconst domainCounts = data.map(item => parseInt(item.sum, 10));// Configure ApexChartsvar options = {chart: {height: 426,type: 'area',toolbar: {show: false // disables the zoom and export buttons}},title: {align: 'left',style: {fontSize: '16px',fontWeight: 'bold',color: '#373d3f'}},subtitle: {align: 'left'},series: [{name: "Domain Count",data: domainCounts}],xaxis: {categories: categories,labels: {rotate: -45,rotateAlways: true,style: {fontSize: '12px'}}},yaxis: {labels: {formatter: val => val.toLocaleString() // e.g., 1,400,092}},colors: ['#193e73'],stroke: {curve: 'smooth',width: 3},fill: {type: 'gradient',gradient: {shadeIntensity: 1,gradientToColors: ['#193e73'], // same base color or vary as neededinverseColors: false,opacityFrom: 0.4,opacityTo: 0,stops: [0, 90, 100]}},dataLabels: {enabled: false},tooltip: {shared: true,intersect: false,y: {formatter: val => val.toLocaleString()}},legend: {position: 'bottom'}};// Render the chart inside the #domainCountChart divvar chart = new ApexCharts(document.querySelector("#domainCountChart"), options);chart.render();}).catch(error => console.error('Error fetching domain count data:', error));See all statistics
+ZARC will operate with skeletal staff from 24 Dec 2025 to 5 Jan 2026. Essential support remains available via support@registry.net.za.Wishing you a safe and joyful festive season! 🎄Email Support
+ZA Registry Consortium (ZARC) is the contracted registry operator for South Africa’s commercial second-level domains (SLDs): CO.ZA, ORG.ZA, NET.ZA and WEB.ZA.
+We maintain a proud association with the CO.ZA domain space, having been involved in its establishment, promotion and administration since 1995, supporting the growth of South Africa’s online presence for nearly three decadesRead our FAQsFollowFollowFollowFollowFollowFollow
+PAIA INFO | TERMSNEWSLETTER
+
+Success!
+First NameLast NameEmailSubscribeCONTACT US
+
+ADDRESSZA Registry Consortium (Pty) Ltd,COZA House, Corporate Park South,Gazelle Close, Midrand
+TEL+27 11 314 0077LEGAL LINKS
+
+.ZA SLD Policies & Procedures →
+Registry Lock Service →
+Data Protection – Privacy Policy →
+Data Protection – Consent Form →
+Complaints Policy →
+Takedown Policy →
+Registrant Agreement Mandatory Terms
+Domain Name Dispute Resolution →ZarcAccreditations & Affiliations
+{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/Divi\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}(function() {var file = ["https:\/\/zarc.web.za\/wp-content\/et-cache\/43\/et-divi-dynamic-tb-1011-tb-91-43-late.css"];var handle = document.getElementById('divi-style-inline-inline-css');var location = handle.parentNode;if (0===document.querySelectorAll('link[href="' + file + '"]').length) {var link = document.createElement('link');link.rel = 'stylesheet';link.id = 'et-dynamic-late-css';link.href = file;location.insertBefore(link, handle.nextSibling);}})();/* *//* *//* *//* */
\ No newline at end of file
diff --git a/tests/fixtures/google.com.txt b/tests/fixtures/google.com.txt
new file mode 100644
index 00000000..836d3e45
--- /dev/null
+++ b/tests/fixtures/google.com.txt
@@ -0,0 +1,60 @@
+ Domain Name: GOOGLE.COM
+ Registry Domain ID: 2138514_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.markmonitor.com
+ Registrar URL: http://www.markmonitor.com
+ Updated Date: 2011-07-20T16:55:31Z
+ Creation Date: 1997-09-15T04:00:00Z
+ Registry Expiry Date: 2020-09-14T04:00:00Z
+ Registrar: MarkMonitor Inc.
+ Registrar IANA ID: 292
+ Registrar Abuse Contact Email: abusecomplaints@markmonitor.com
+ Registrar Abuse Contact Phone: +1.2083895740
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+ Name Server: NS1.GOOGLE.COM
+ Name Server: NS2.GOOGLE.COM
+ Name Server: NS3.GOOGLE.COM
+ Name Server: NS4.GOOGLE.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2018-01-15T19:11:59Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
diff --git a/tests/fixtures/google.coop.txt b/tests/fixtures/google.coop.txt
new file mode 100644
index 00000000..f2785814
--- /dev/null
+++ b/tests/fixtures/google.coop.txt
@@ -0,0 +1,25 @@
+Connecting to COOP.whois-servers.net...
+
+The queried object does not exist: previous registration D59629278-CNIC was purged on 2018-11-15T16:49:26.0Z (DOMAIN NOT FOUND)
+
+>>> Last update of WHOIS database: 2020-10-10T21:28:57.0Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+>>> IMPORTANT INFORMATION ABOUT THE DEPLOYMENT OF RDAP: please visit
+https://www.centralnic.com/support/rdap <<<
+
+The Whois and RDAP services are provided by CentralNic, and contain
+information pertaining to Internet domain names registered by our
+our customers. By using this service you are agreeing (1) not to use any
+information presented here for any purpose other than determining
+ownership of domain names, (2) not to store or reproduce this data in
+any way, (3) not to use any high-volume, automated, electronic processes
+to obtain data from this service. Abuse of this service is monitored and
+actions in contravention of these terms will result in being permanently
+blacklisted. All data is (c) CentralNic Ltd (https://www.centralnic.com)
+
+Access to the Whois and RDAP services is rate limited. For more
+information, visit https://registrar-console.centralnic.com/pub/whois_guidance.
+
+Connecting to ject does not exist: previous registration D59629278-CNIC was purged on 2018-11-15T16:49:26.0Z (DOMAIN NOT FOUND)...
diff --git a/tests/fixtures/google.cz.txt b/tests/fixtures/google.cz.txt
new file mode 100644
index 00000000..07f61b80
--- /dev/null
+++ b/tests/fixtures/google.cz.txt
@@ -0,0 +1,65 @@
+% (c) 2006-2021 CZ.NIC, z.s.p.o.
+%
+% Intended use of supplied data and information
+%
+% Data contained in the domain name register, as well as information
+% supplied through public information services of CZ.NIC association,
+% are appointed only for purposes connected with Internet network
+% administration and operation, or for the purpose of legal or other
+% similar proceedings, in process as regards a matter connected
+% particularly with holding and using a concrete domain name.
+%
+% Full text available at:
+% http://www.nic.cz/page/306/intended-use-of-supplied-data-and-information/
+%
+% See also a search service at http://www.nic.cz/whois/
+%
+%
+% Whoisd Server Version: 3.15.0
+% Timestamp: Mon Dec 08 11:39:27 2025
+
+domain: google.cz
+registrant: MM1171195
+admin-c: MM1171195
+nsset: MM1543911
+registrar: REG-MARKMONITOR
+registered: 21.07.2000 15:21:00
+changed: 23.04.2018 20:24:01
+expire: 22.07.2026
+
+contact: MM1171195
+org: Google LLC
+name: Domain Administrator
+address: 1600 Amphitheatre Parkway
+address: Mountain View
+address: 94043
+address: CA
+address: US
+registrar: REG-MARKMONITOR
+created: 02.03.2018 18:52:05
+changed: 15.05.2018 21:32:00
+
+nsset: MM1543911
+nserver: ns2.google.com
+nserver: ns4.google.com
+nserver: ns3.google.com
+nserver: ns1.google.com
+tech-c: MM193020
+registrar: REG-MARKMONITOR
+created: 18.05.2011 23:27:16
+changed: 11.12.2024 14:52:23
+
+contact: MM193020
+org: MarkMonitor Inc.
+name: Domain Provisioning
+address: 2150 S Bonito Way
+address: Suite 150
+address: Meridian
+address: 83642
+address: ID
+address: US
+registrar: REG-MARKMONITOR
+created: 03.02.2011 18:24:34
+changed: 29.06.2021 23:29:20
+
+
\ No newline at end of file
diff --git a/tests/fixtures/google.de.txt b/tests/fixtures/google.de.txt
new file mode 100644
index 00000000..5f2f76ba
--- /dev/null
+++ b/tests/fixtures/google.de.txt
@@ -0,0 +1,24 @@
+% Restricted rights.
+%
+% Terms and Conditions of Use
+%
+% The above data may only be used within the scope of technical or
+% administrative necessities of Internet operation or to remedy legal
+% problems.
+% The use for other purposes, in particular for advertising, is not permitted.
+%
+% The DENIC whois service on port 43 doesn't disclose any information concerning
+% the domain holder, general request and abuse contact.
+% This information can be obtained through use of our web-based whois service
+% available at the DENIC website:
+% http://www.denic.de/en/domains/whois-service/web-whois.html
+%
+%
+
+Domain: google.de
+Nserver: ns1.google.com
+Nserver: ns2.google.com
+Nserver: ns3.google.com
+Nserver: ns4.google.com
+Status: connect
+Changed: 2018-03-12T21:44:25+01:00
\ No newline at end of file
diff --git a/tests/fixtures/google.dk.txt b/tests/fixtures/google.dk.txt
new file mode 100644
index 00000000..705fcd12
--- /dev/null
+++ b/tests/fixtures/google.dk.txt
@@ -0,0 +1,54 @@
+# Hello 109.238.54.211. Your session has been logged.
+#
+# Copyright (c) 2002 - 2018 by DK Hostmaster A/S
+#
+# Version: 2.0.2
+#
+# The data in the DK Whois database is provided by DK Hostmaster A/S
+# for information purposes only, and to assist persons in obtaining
+# information about or related to a domain name registration record.
+# We do not guarantee its accuracy. We will reserve the right to remove
+# access for entities abusing the data, without notice.
+#
+# Any use of this material to target advertising or similar activities
+# are explicitly forbidden and will be prosecuted. DK Hostmaster A/S
+# requests to be notified of any such activities or suspicions thereof.
+
+Domain: google.dk
+DNS: google.dk
+Registered: 1999-01-10
+Expires: 2019-03-31
+Registration period: 1 year
+VID: no
+Dnssec: Unsigned delegation
+Status: Active
+
+Registrant
+Handle: GI656-DK
+Name: Google Inc
+Address: 1600 Amphitheatre Parkway
+Postalcode: CA 94043
+City: Mountain View
+Country: US
+Phone: +16502530000
+
+Administrator
+Handle: GI657-DK
+Name: Google Inc
+Attention: Domain Administrator
+Address: 1600 Amphitheatre Parkway
+Postalcode: 94043
+City: Mountain View, CA
+Country: US
+Phone: +16502530000
+
+Nameservers
+Hostname: ns1.google.com
+Handle: GI644-DK
+Hostname: ns2.google.com
+Handle: GI644-DK
+Hostname: ns3.google.com
+Handle: GI644-DK
+Hostname: ns4.google.com
+Handle: GI644-DK
+
diff --git a/tests/fixtures/google.eu.txt b/tests/fixtures/google.eu.txt
new file mode 100644
index 00000000..1fe78886
--- /dev/null
+++ b/tests/fixtures/google.eu.txt
@@ -0,0 +1,65 @@
+% The WHOIS service offered by EURid and the access to the records
+% in the EURid WHOIS database are provided for information purposes
+% only. It allows persons to check whether a specific domain name
+% is still available or not and to obtain information related to
+% the registration records of existing domain names.
+%
+% EURid cannot, under any circumstances, be held liable in case the
+% stored information would prove to be wrong, incomplete or not
+% accurate in any sense.
+%
+% By submitting a query, you agree not to use the information made
+% available to:
+%
+% - allow, enable or otherwise support the transmission of unsolicited,
+% commercial advertising or other solicitations whether via email or
+% otherwise;
+% - target advertising in any possible way;
+% - cause nuisance in any possible way by sending messages to registrants,
+% whether by automated, electronic processes capable of enabling
+% high volumes or by other possible means.
+%
+% Without prejudice to the above, it is explicitly forbidden to extract,
+% copy and/or use or re-utilise in any form and by any means
+% (electronically or not) the whole or a quantitatively or qualitatively
+% substantial part of the contents of the WHOIS database without prior
+% and explicit permission by EURid, nor in any attempt hereof, to apply
+% automated, electronic processes to EURid (or its systems).
+%
+% You agree that any reproduction and/or transmission of data for
+% commercial purposes will always be considered as the extraction of a
+% substantial part of the content of the WHOIS database.
+%
+% By submitting the query, you agree to abide by this policy and accept
+% that EURid can take measures to limit the use of its WHOIS services
+% to protect the privacy of its registrants or the integrity
+% of the database.
+%
+% The EURid WHOIS service on port 43 (textual WHOIS) never discloses
+% any information concerning the registrant.
+% Registrant and on-site contact information can be obtained through use of the
+% web-based WHOIS service available from the EURid website www.eurid.eu
+%
+% WHOIS google.eu
+Domain: google.eu
+Script: LATIN
+
+Registrant:
+ NOT DISCLOSED!
+ Visit www.eurid.eu for the web-based WHOIS.
+
+On-site(s):
+ NOT DISCLOSED!
+ Visit www.eurid.eu for the web-based WHOIS.
+
+Registrar:
+ Name: Markmonitor Inc.
+ Website: https://www.markmonitor.com/
+
+Name servers:
+ ns1.google.com
+ ns2.google.com
+ ns4.google.com
+ ns3.google.com
+
+Please visit www.eurid.eu for more info.
\ No newline at end of file
diff --git a/tests/fixtures/google.fi.txt b/tests/fixtures/google.fi.txt
new file mode 100644
index 00000000..cd195532
--- /dev/null
+++ b/tests/fixtures/google.fi.txt
@@ -0,0 +1,47 @@
+
+domain.............: google.fi
+status.............: Registered
+created............: 30.6.2006 00:00:00
+expires............: 4.7.2026 10:15:55
+available..........: 4.8.2026 10:15:55
+modified...........: 2.6.2025 13:02:47
+holder transfer....: 20.11.2018 00:15:59
+RegistryLock.......: locked
+
+Nameservers
+
+nserver............: ns3.google.com [OK]
+nserver............: ns4.google.com [OK]
+nserver............: ns1.google.com [OK]
+nserver............: ns2.google.com [OK]
+
+DNSSEC
+
+dnssec.............: no
+
+Holder
+
+name...............: Google LLC
+register number....: 3582691
+address............: 1600 Amphitheatre Parkway
+postal.............: 94043
+city...............: Mountain View
+country............: United States of America
+phone..............:
+holder email.......:
+
+Registrar
+
+registrar..........: MarkMonitor Inc.
+www................: www.markmonitor.com
+
+Tech
+
+name...............: Google LLC
+email..............: ccops@markmonitor.com
+
+>>> Last update of WHOIS database: 8.12.2025 12:30:17 (EET) <<<
+
+
+Copyright (c) Finnish Transport and Communications Agency Traficom
+
\ No newline at end of file
diff --git a/tests/fixtures/google.fm.txt b/tests/fixtures/google.fm.txt
new file mode 100644
index 00000000..0c937011
--- /dev/null
+++ b/tests/fixtures/google.fm.txt
@@ -0,0 +1,43 @@
+Domain Name: GOOGLE.FM
+Registry Domain ID: D34865469-CNIC
+Registrar WHOIS Server: whois.markmonitor.com
+Registrar URL:
+Updated Date: 2025-09-02T18:00:10.0Z
+Creation Date: 2000-09-05T23:59:59.0Z
+Registry Expiry Date: 2026-09-04T23:59:59.0Z
+Registrar: MarkMonitor, Inc.
+Registrar IANA ID: 292
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+Registrant Email: https://whois.nic.fm/contact/google.fm/registrant
+Tech Email: https://whois.nic.fm/contact/google.fm/tech
+Name Server: NS1.GOOGLE.COM
+Name Server: NS3.GOOGLE.COM
+Name Server: NS2.GOOGLE.COM
+DNSSEC: unsigned
+Registrar Abuse Contact Email: ccops@markmonitor.com
+Registrar Abuse Contact Phone: +1.2083895740
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2025-11-30T17:08:21.0Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+>>> IMPORTANT INFORMATION ABOUT THE DEPLOYMENT OF RDAP: please visit
+https://www.centralnicregistry.com/support/information/rdap <<<
+
+The registration data available in this service is limited. Additional
+data may be available at https://lookup.icann.org
+
+The Whois and RDAP services are provided by CentralNic, and contain
+information pertaining to Internet domain names registered by our
+our customers. By using this service you are agreeing (1) not to use any
+information presented here for any purpose other than determining
+ownership of domain names, (2) not to store or reproduce this data in
+any way, (3) not to use any high-volume, automated, electronic processes
+to obtain data from this service. Abuse of this service is monitored and
+actions in contravention of these terms will result in being permanently
+blacklisted. All data is (c) CentralNic Ltd (https://www.centralnicregistry.com)
+
+Access to the Whois and RDAP services is rate limited. For more
+information, visit https://centralnicregistry.com/policies/whois-guidance.
\ No newline at end of file
diff --git a/tests/fixtures/google.fr.txt b/tests/fixtures/google.fr.txt
new file mode 100644
index 00000000..be726947
--- /dev/null
+++ b/tests/fixtures/google.fr.txt
@@ -0,0 +1,110 @@
+%%
+%% This is the AFNIC Whois server.
+%%
+%% complete date format: YYYY-MM-DDThh:mm:ssZ
+%%
+%% Rights restricted by copyright.
+%% See https://www.afnic.fr/en/domain-names-and-support/everything-there-is-to-know-about-domain-names/find-a-domain-name-or-a-holder-using-whois/
+%%
+%%
+
+domain: google.fr
+status: ACTIVE
+status: renewPeriod
+eppstatus: serverUpdateProhibited
+eppstatus: serverTransferProhibited
+eppstatus: serverDeleteProhibited
+eppstatus: serverRecoverProhibited
+hold: NO
+holder-c: GIHU100-FRNIC
+admin-c: GIHU101-FRNIC
+tech-c: MI3669-FRNIC
+registrar: MARKMONITOR Inc.
+Expiry Date: 2026-12-30T17:16:48Z
+created: 2000-07-26T22:00:00Z
+last-update: 2025-11-28T10:11:55.150503Z
+source: FRNIC
+
+nserver: ns1.google.com
+nserver: ns2.google.com
+nserver: ns3.google.com
+nserver: ns4.google.com
+source: FRNIC
+
+registrar: MARKMONITOR Inc.
+address: 2150 S. Bonito Way, Suite 150
+address: ID 83642 MERIDIAN
+country: US
+phone: +1.2083895740
+fax-no: +1.2083895771
+e-mail: registry.admin@markmonitor.com
+website: http://www.markmonitor.com
+anonymous: No
+registered: 2002-01-07T00:00:00Z
+source: FRNIC
+
+nic-hdl: GIHU100-FRNIC
+type: ORGANIZATION
+contact: Google Ireland Holdings Unlimited Company
+address: Google Ireland Holdings Unlimited Company
+address: 70 Sir John Rogerson's Quay
+address: 2 Dublin
+country: IE
+phone: +353.14361000
+e-mail: dns-admin@google.com
+registrar: MARKMONITOR Inc.
+changed: 2024-06-11T20:04:33.772976Z
+anonymous: NO
+obsoleted: NO
+eppstatus: serverUpdateProhibited
+eppstatus: associated
+eligstatus: not identified
+reachstatus: not identified
+source: FRNIC
+
+nic-hdl: GIHU101-FRNIC
+type: ORGANIZATION
+contact: Google Ireland Holdings Unlimited Company
+address: 70 Sir John Rogerson's Quay
+address: 2 Dublin
+country: IE
+phone: +353.14361000
+e-mail: dns-admin@google.com
+registrar: MARKMONITOR Inc.
+anonymous: NO
+obsoleted: NO
+eppstatus: associated
+eppstatus: active
+eligstatus: not identified
+reachstatus: ok
+reachmedia: email
+reachsource: REGISTRAR
+reachdate: 2018-03-02T00:00:00Z
+source: FRNIC
+
+nic-hdl: MI3669-FRNIC
+type: ORGANIZATION
+contact: MarkMonitor Inc.
+address: 2150 S. Bonito Way, Suite 150
+address: 83642 Meridian
+country: US
+phone: +1.2083895740
+fax-no: +1.2083895771
+e-mail: ccops@markmonitor.com
+registrar: MARKMONITOR Inc.
+changed: 2025-11-26T19:54:39.477615Z
+anonymous: NO
+obsoleted: NO
+eppstatus: associated
+eppstatus: active
+eligstatus: ok
+eligsource: REGISTRAR
+eligdate: 2021-10-05T00:00:00Z
+reachstatus: ok
+reachmedia: email
+reachsource: REGISTRAR
+reachdate: 2021-10-05T00:00:00Z
+source: FRNIC
+
+>>> Last update of WHOIS database: 2025-11-30T17:08:22.954484Z <<<
+
\ No newline at end of file
diff --git a/tests/fixtures/google.hu.txt b/tests/fixtures/google.hu.txt
new file mode 100644
index 00000000..03958eec
--- /dev/null
+++ b/tests/fixtures/google.hu.txt
@@ -0,0 +1,10 @@
+% Whois server 4.0 serving the hu ccTLD
+
+
+domain: google.hu
+record created: 2000-03-03
+Tovabbi adatokert ld.:
+https://www.domain.hu/domain-kereses/
+For further data see:
+https://www.domain.hu/domain-search/
+
\ No newline at end of file
diff --git a/tests/fixtures/google.ie.txt b/tests/fixtures/google.ie.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/fixtures/google.kiwi.txt b/tests/fixtures/google.kiwi.txt
new file mode 100644
index 00000000..27b92dde
--- /dev/null
+++ b/tests/fixtures/google.kiwi.txt
@@ -0,0 +1,82 @@
+Domain Name: google.kiwi
+Registry Domain ID: 38570-KIWI
+Registrar WHOIS Server: whois.nic.kiwi
+Registrar URL: www.markmonitor.com
+Updated Date: 2025-02-26T10:20:45Z
+Creation Date: 2014-03-25T05:14:23Z
+Registry Expiry Date: 2026-03-25T05:14:25Z
+Registrar: MarkMonitor Inc.
+Registrar IANA ID: 292
+Registrar Abuse Contact Email:
+Registrar Abuse Contact Phone:
+Registrar Abuse Contact Phone Ext:
+Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Registry Registrant ID: REDACTED FOR PRIVACY
+Registrant Name: REDACTED FOR PRIVACY
+Registrant Organization: Google LLC
+Registrant Street: REDACTED FOR PRIVACY
+Registrant City: REDACTED FOR PRIVACY
+Registrant State/Province: CA
+Registrant Postal Code: REDACTED FOR PRIVACY
+Registrant Country: US
+Registrant Phone: REDACTED FOR PRIVACY
+Registrant Phone Ext: REDACTED FOR PRIVACY
+Registrant Fax: REDACTED FOR PRIVACY
+Registrant Fax Ext: REDACTED FOR PRIVACY
+Registrant Email: Please ask the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Other contacts of the queried domain name
+Registry Admin ID: REDACTED FOR PRIVACY
+Admin Name: REDACTED FOR PRIVACY
+Admin Organization: REDACTED FOR PRIVACY
+Admin Street: REDACTED FOR PRIVACY
+Admin City: REDACTED FOR PRIVACY
+Admin State/Province: REDACTED FOR PRIVACY
+Admin Postal Code: REDACTED FOR PRIVACY
+Admin Country: REDACTED FOR PRIVACY
+Admin Phone: REDACTED FOR PRIVACY
+Admin Phone Ext: REDACTED FOR PRIVACY
+Admin Fax: REDACTED FOR PRIVACY
+Admin Fax Ext: REDACTED FOR PRIVACY
+Admin Email: Please ask the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Other contacts of the queried domain name
+Registry Tech ID: REDACTED FOR PRIVACY
+Tech Name: REDACTED FOR PRIVACY
+Tech Organization: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech City: REDACTED FOR PRIVACY
+Tech State/Province: REDACTED FOR PRIVACY
+Tech Postal Code: REDACTED FOR PRIVACY
+Tech Country: REDACTED FOR PRIVACY
+Tech Phone: REDACTED FOR PRIVACY
+Tech Phone Ext: REDACTED FOR PRIVACY
+Tech Fax: REDACTED FOR PRIVACY
+Tech Fax Ext: REDACTED FOR PRIVACY
+Tech Email: Please ask the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Other contacts of the queried domain name
+Registry Billing ID: REDACTED FOR PRIVACY
+Billing Name: REDACTED FOR PRIVACY
+Billing Organization: REDACTED FOR PRIVACY
+Billing Street: REDACTED FOR PRIVACY
+Billing City: REDACTED FOR PRIVACY
+Billing State/Province: REDACTED FOR PRIVACY
+Billing Postal Code: REDACTED FOR PRIVACY
+Billing Country: REDACTED FOR PRIVACY
+Billing Phone: REDACTED FOR PRIVACY
+Billing Phone Ext: REDACTED FOR PRIVACY
+Billing Fax: REDACTED FOR PRIVACY
+Billing Fax Ext: REDACTED FOR PRIVACY
+Billing Email: Please ask the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Other contacts of the queried domain name
+Name Server: ns1.googledomains.com
+Name Server: ns2.googledomains.com
+Name Server: ns3.googledomains.com
+Name Server: ns4.googledomains.com
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2025-11-30T17:10:07Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+%
+% Use of CIRA's WHOIS service is governed by the Terms of Use in its Legal
+% Notice, available at https://www.cira.ca/en/resources/documents/about/website-terms-use
+%
+% (c) 2025 Canadian Internet Registration Authority, (http://www.cira.ca/)
\ No newline at end of file
diff --git a/tests/fixtures/google.net.txt b/tests/fixtures/google.net.txt
new file mode 100644
index 00000000..db029c0b
--- /dev/null
+++ b/tests/fixtures/google.net.txt
@@ -0,0 +1,60 @@
+ Domain Name: GOOGLE.NET
+ Registry Domain ID: 4802712_DOMAIN_NET-VRSN
+ Registrar WHOIS Server: whois.markmonitor.com
+ Registrar URL: http://www.markmonitor.com
+ Updated Date: 2017-09-07T17:59:30Z
+ Creation Date: 1999-03-15T05:00:00Z
+ Registry Expiry Date: 2018-03-15T04:00:00Z
+ Registrar: MarkMonitor Inc.
+ Registrar IANA ID: 292
+ Registrar Abuse Contact Email: abusecomplaints@markmonitor.com
+ Registrar Abuse Contact Phone: +1.2083895740
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+ Name Server: NS1.GOOGLE.NET
+ Name Server: NS2.GOOGLE.NET
+ Name Server: NS3.GOOGLE.NET
+ Name Server: NS4.GOOGLE.NET
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2018-01-26T01:11:40Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
diff --git a/tests/fixtures/google.no.txt b/tests/fixtures/google.no.txt
new file mode 100644
index 00000000..39567a95
--- /dev/null
+++ b/tests/fixtures/google.no.txt
@@ -0,0 +1,36 @@
+% By looking up information in the domain registration directory
+% service, you confirm that you accept the terms and conditions of the
+% service:
+% https://www.norid.no/en/domeneoppslag/vilkar/
+%
+% UNINETT Norid AS holds the copyright to the lookup service, content,
+% layout and the underlying collections of information used in the
+% service (cf. the Act on Intellectual Property of May 2, 1961, No.
+% 2). Any commercial % use of information from the service, including
+% targeted marketing, is prohibited. Using information from the domain
+% registration directory service in % violation of the terms and
+% conditions may result in legal prosecution.
+%
+% The whois service at port 43 is intended to contribute to resolving
+% technical problems where individual domains threaten the
+% functionality, security and stability of other domains or the
+% internet as an infrastructure. It does not give any information
+% about who the holder of a domain is. To find information about a
+% domain holder, please visit our website:
+% https://www.norid.no/en/domeneoppslag/
+
+Domain Information
+
+NORID Handle...............: GOO371D-NORID
+Domain Name................: google.no
+Registrar Handle...........: REG466-NORID
+Tech-c Handle..............: GL1R-NORID
+Name Server Handle.........: NSGO26H-NORID
+Name Server Handle.........: NSGO27H-NORID
+Name Server Handle.........: NSGO28H-NORID
+Name Server Handle.........: NSGO29H-NORID
+
+Additional information:
+Created: 2001-02-26
+Last updated: 2018-06-22
+
diff --git a/tests/fixtures/google.org.txt b/tests/fixtures/google.org.txt
new file mode 100644
index 00000000..d8e44a71
--- /dev/null
+++ b/tests/fixtures/google.org.txt
@@ -0,0 +1,69 @@
+Domain Name: GOOGLE.ORG
+Registry Domain ID: D2244233-LROR
+Registrar WHOIS Server: whois.markmonitor.com
+Registrar URL: http://www.markmonitor.com
+Updated Date: 2017-09-18T09:25:23Z
+Creation Date: 1998-10-21T04:00:00Z
+Registry Expiry Date: 2018-10-20T04:00:00Z
+Registrar Registration Expiration Date:
+Registrar: MarkMonitor Inc.
+Registrar IANA ID: 292
+Registrar Abuse Contact Email: abusecomplaints@markmonitor.com
+Registrar Abuse Contact Phone: +1.2083895740
+Reseller:
+Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Registry Registrant ID: C46015270-LROR
+Registrant Name: DNS Admin
+Registrant Organization: Google Inc.
+Registrant Street: 1600 Amphitheatre Parkway
+Registrant City: Mountain View
+Registrant State/Province: CA
+Registrant Postal Code: 94043
+Registrant Country: US
+Registrant Phone: +1.6506234000
+Registrant Phone Ext:
+Registrant Fax: +1.6506188571
+Registrant Fax Ext:
+Registrant Email: dns-admin@google.com
+Registry Admin ID: C46015270-LROR
+Admin Name: DNS Admin
+Admin Organization: Google Inc.
+Admin Street: 1600 Amphitheatre Parkway
+Admin City: Mountain View
+Admin State/Province: CA
+Admin Postal Code: 94043
+Admin Country: US
+Admin Phone: +1.6506234000
+Admin Phone Ext:
+Admin Fax: +1.6506188571
+Admin Fax Ext:
+Admin Email: dns-admin@google.com
+Registry Tech ID: C46015270-LROR
+Tech Name: DNS Admin
+Tech Organization: Google Inc.
+Tech Street: 1600 Amphitheatre Parkway
+Tech City: Mountain View
+Tech State/Province: CA
+Tech Postal Code: 94043
+Tech Country: US
+Tech Phone: +1.6506234000
+Tech Phone Ext:
+Tech Fax: +1.6506188571
+Tech Fax Ext:
+Tech Email: dns-admin@google.com
+Name Server: NS2.GOOGLE.COM
+Name Server: NS1.GOOGLE.COM
+Name Server: NS3.GOOGLE.COM
+Name Server: NS4.GOOGLE.COM
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2018-01-26T00:29:32Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+Access to Public Interest Registry WHOIS information is provided to assist persons in determining the contents of a domain name registration record in the Public Interest Registry registry database. The data in this record is provided by Public Interest Registry for informational purposes only, and Public Interest Registry does not guarantee its accuracy. This service is intended only for query-based access. You agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data to: (a) allow, enable, or otherwise support the transmission by e-mail, telephone, or facsimile of mass unsolicited, commercial advertising or solicitations to entities other than the data recipient's own existing customers; or (b) enable high volume, automated, electronic processes that send queries or data to the systems of Registry Operator, a Registrar, or Afilias except as reasonably necessary to register domain names or modify existing registrations. All rights reserved. Public Interest Registry reserves the right to modify these terms at any time. By submitting this query, you agree to abide by this policy.
diff --git a/tests/fixtures/google.ru.txt b/tests/fixtures/google.ru.txt
new file mode 100644
index 00000000..d1c15908
--- /dev/null
+++ b/tests/fixtures/google.ru.txt
@@ -0,0 +1,20 @@
+Connecting to RU.whois-servers.net...
+
+domain: GOOGLE.RU
+nserver: ns1.google.com.
+nserver: ns2.google.com.
+nserver: ns3.google.com.
+nserver: ns4.google.com.
+state: REGISTERED, DELEGATED, VERIFIED
+org: Google LLC
+registrar: RU-CENTER-RU
+admin-contact: https://www.nic.ru/whois
+created: 2004-03-03T21:00:00Z
+paid-till: 2021-03-04T21:00:00Z
+free-date: 2021-04-05
+source: TCI
+
+Last updated on 2020-10-07T20:01:32Z
+
+
+Connecting to GOOGLE.RU...
diff --git a/tests/fixtures/google.se.txt b/tests/fixtures/google.se.txt
new file mode 100644
index 00000000..759ccdee
--- /dev/null
+++ b/tests/fixtures/google.se.txt
@@ -0,0 +1,34 @@
+# Copyright (c) 1997- IIS (The Internet Foundation In Sweden).
+# All rights reserved.
+# The information obtained through searches, or otherwise, is protected
+# by the Swedish Copyright Act (1960:729) and international conventions.
+# It is also subject to database protection according to the Swedish
+# Copyright Act.
+# Any use of this material to target advertising or
+# similar activities is forbidden and will be prosecuted.
+# If any of the information below is transferred to a third
+# party, it must be done in its entirety. This server must
+# not be used as a backend for a search engine.
+# Result of search for registered domain names under
+# the .se top level domain.
+# This whois printout is printed with UTF-8 encoding.
+#
+state: active
+domain: google.se
+holder: mmr8008-53808
+admin-c: -
+tech-c: -
+billing-c: -
+created: 2003-08-27
+modified: 2017-09-18
+expires: 2018-10-20
+transferred: 2009-03-06
+nserver: ns1.google.com
+nserver: ns2.google.com
+nserver: ns3.google.com
+nserver: ns4.google.com
+dnssec: unsigned delegation
+status: serverUpdateProhibited
+status: serverDeleteProhibited
+status: serverTransferProhibited
+registrar: MarkMonitor Inc
diff --git a/tests/fixtures/google.us.txt b/tests/fixtures/google.us.txt
new file mode 100644
index 00000000..898fcf9e
--- /dev/null
+++ b/tests/fixtures/google.us.txt
@@ -0,0 +1,92 @@
+Domain Name: google.us
+Registry Domain ID: D775573-US
+Registrar WHOIS Server: whois.markmonitor.com
+Registrar URL: www.markmonitor.com
+Updated Date: 2025-03-22T10:16:13Z
+Creation Date: 2002-04-19T23:16:01Z
+Registry Expiry Date: 2026-04-18T23:59:59Z
+Registrar: MarkMonitor, Inc.
+Registrar IANA ID: 292
+Registrar Abuse Contact Email: registry.admin@markmonitor.com
+Registrar Abuse Contact Phone: +1.2083895740
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Registry Registrant ID: C37454483-US
+Registrant Name: Google LLC
+Registrant Organization: Google LLC
+Registrant Street: 1600 Amphitheatre Parkway
+Registrant Street:
+Registrant Street:
+Registrant City: Mountain View
+Registrant State/Province: CA
+Registrant Postal Code: 94043
+Registrant Country: US
+Registrant Phone: +1.6502530000
+Registrant Phone Ext:
+Registrant Fax: +1.6502530001
+Registrant Fax Ext:
+Registrant Email: dns-admin@google.com
+Registrant Application Purpose: P1
+Registrant Nexus Category: C21
+Registry Admin ID: CDFBE947B22B94123B51A662F42C37C75-GDREG
+Admin Name: Colm Buckley
+Admin Organization: Google LLC
+Admin Street: 1600 Amphitheatre Parkway
+Admin Street:
+Admin Street:
+Admin City: Mountain View
+Admin State/Province: CA
+Admin Postal Code: 94043
+Admin Country: US
+Admin Phone: +1.6502530000
+Admin Phone Ext:
+Admin Fax: +1.6502530001
+Admin Fax Ext:
+Admin Email: dns-admin@google.com
+Admin Application Purpose: P1
+Admin Nexus Category: C21
+Registry Tech ID: CDFBE947B22B94123B51A662F42C37C75-GDREG
+Tech Name: Colm Buckley
+Tech Organization: Google LLC
+Tech Street: 1600 Amphitheatre Parkway
+Tech Street:
+Tech Street:
+Tech City: Mountain View
+Tech State/Province: CA
+Tech Postal Code: 94043
+Tech Country: US
+Tech Phone: +1.6502530000
+Tech Phone Ext:
+Tech Fax: +1.6502530001
+Tech Fax Ext:
+Tech Email: dns-admin@google.com
+Tech Application Purpose: P1
+Tech Nexus Category: C21
+Name Server: ns1.google.com
+Name Server: ns2.google.com
+Name Server: ns3.google.com
+Name Server: ns4.google.com
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2025-11-30T17:09:11Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+.US WHOIS Complaint Tool - http://www.whoiscomplaints.us
+Advanced WHOIS Instructions - http://whois.us/help.html
+
+Registry Services, LLC, the Registry Administrator for .US, has collected this information for the WHOIS database through a .US-Accredited Registrar. This information is provided to you for informational purposes only and is designed to assist persons in determining contents of a domain name registration record in the registry database.
+
+Registry Services, LLC makes this information available to you "as is" and does not guarantee its accuracy. By submitting a WHOIS query, you agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data:
+
+(1) to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations via direct mail, electronic mail, or by telephone;
+(2) in contravention of any applicable data and privacy protection laws; or
+(3) to enable high volume, automated, electronic processes that apply to the registry (or its systems).
+
+Compilation, repackaging, dissemination, or other use of the WHOIS database in its entirety, or of a substantial portion thereof, is not allowed without our prior written permission.
+
+We reserve the right to modify or change these conditions at any time without prior or subsequent notification of any kind. By executing this query, in any manner whatsoever, you agree to abide by these terms. NOTE: FAILURE TO LOCATE A RECORD IN THE WHOIS DATABASE IS NOT INDICATIVE OF THE AVAILABILITY OF A DOMAIN NAME. All domain names are subject to certain additional domain name registration rules. For details, please visit our site at www.whois.us.
\ No newline at end of file
diff --git a/tests/fixtures/google.ws.txt b/tests/fixtures/google.ws.txt
new file mode 100644
index 00000000..b6acad9b
--- /dev/null
+++ b/tests/fixtures/google.ws.txt
@@ -0,0 +1,180 @@
+Connecting to WS.whois-servers.net...
+
+WHOIS Server: whois.markmonitor.com
+Registrar URL: http://www.markmonitor.com/whois.asp
+Updated Date: 2020-01-31T10:37:09Z
+Creation Date: 2002-03-03T18:00:26Z
+Registrar Registration Expiration Date: 2021-03-04T00:00:26Z
+Registrar: MarkMonitor Inc.
+Registrar IANA ID: 292
+Registrar Abuse Contact Email: ccops@markmonitor.com
+Registrar Abuse Contact Phone: 2083895740
+Domain Status: clientTransferProhibited
+Domain Status: clientDeleteProhibited
+Domain Status: clientUpdateProhibited
+Name Server: ns1.google.com
+Name Server: ns2.google.com
+Name Server: ns3.google.com
+Name Server: ns4.google.com
+DNSSEC: unsigned
+URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
+>>> Last update of WHOIS database: 2020-10-03T20:14:41Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+
+Connecting to whois.markmonitor.com...
+
+WHOIS Server: whois.markmonitor.com
+Registrar URL: http://www.markmonitor.com
+Updated Date: 2020-02-01T02:36:15-0800
+Creation Date: 2002-03-03T10:00:26-0800
+Registrar Registration Expiration Date: 2021-03-03T00:00:00-0800
+Registrar: MarkMonitor, Inc.
+Registrar IANA ID: 292
+Registrar Abuse Contact Email: abusecomplaints@markmonitor.com
+Registrar Abuse Contact Phone: +1.2083895770
+Domain Status: clientUpdateProhibited (https://www.icann.org/epp#clientUpdateProhibited)
+Domain Status: clientTransferProhibited (https://www.icann.org/epp#clientTransferProhibited)
+Domain Status: clientDeleteProhibited (https://www.icann.org/epp#clientDeleteProhibited)
+Registrant Organization: Google LLC
+Registrant State/Province: CA
+Registrant Country: US
+Registrant Email: Select Request Email Form at https://domains.markmonitor.com/whois/google.ws
+Admin Organization: Google LLC
+Admin State/Province: CA
+Admin Country: US
+Admin Email: Select Request Email Form at https://domains.markmonitor.com/whois/google.ws
+Tech Organization: Google LLC
+Tech State/Province: CA
+Tech Country: US
+Tech Email: Select Request Email Form at https://domains.markmonitor.com/whois/google.ws
+Name Server: ns1.google.com
+Name Server: ns3.google.com
+Name Server: ns2.google.com
+Name Server: ns4.google.com
+DNSSEC: unsigned
+URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
+>>> Last update of WHOIS database: 2020-10-03T13:05:15-0700 <<<
+
+For more information on WHOIS status codes, please visit:
+ https://www.icann.org/resources/pages/epp-status-codes
+
+If you wish to contact this domain’s Registrant, Administrative, or Technical
+contact, and such email address is not visible above, you may do so via our web
+form, pursuant to ICANN’s Temporary Specification. To verify that you are not a
+robot, please enter your email address to receive a link to a page that
+facilitates email communication with the relevant contact(s).
+
+Web-based WHOIS:
+ https://domains.markmonitor.com/whois
+
+If you have a legitimate interest in viewing the non-public WHOIS details, send
+your request and the reasons for your request to whoisrequest@markmonitor.com
+and specify the domain name in the subject line. We will review that request and
+may ask for supporting documentation and explanation.
+
+The data in MarkMonitor’s WHOIS database is provided for information purposes,
+and to assist persons in obtaining information about or related to a domain
+name’s registration record. While MarkMonitor believes the data to be accurate,
+the data is provided "as is" with no guarantee or warranties regarding its
+accuracy.
+
+By submitting a WHOIS query, you agree that you will use this data only for
+lawful purposes and that, under no circumstances will you use this data to:
+ (1) allow, enable, or otherwise support the transmission by email, telephone,
+or facsimile of mass, unsolicited, commercial advertising, or spam; or
+ (2) enable high volume, automated, or electronic processes that send queries,
+data, or email to MarkMonitor (or its systems) or the domain name contacts (or
+its systems).
+
+MarkMonitor reserves the right to modify these terms at any time.
+
+By submitting this query, you agree to abide by this policy.
+
+MarkMonitor Domain Management(TM)
+Protecting companies and consumers in a digital world.
+
+Visit MarkMonitor at https://www.markmonitor.com
+Contact us at +1.8007459229
+In Europe, at +44.02032062220
+--
+
+
+Domain Name: google.ws
+Registry Domain ID: D865CD29234E835CE040010AAB015FFF
+Registrar WHOIS Server: whois.markmonitor.com
+Registrar URL: http://www.markmonitor.com
+Updated Date: 2020-02-01T02:36:15-0800
+Creation Date: 2002-03-03T10:00:26-0800
+Registrar Registration Expiration Date: 2021-03-03T00:00:00-0800
+Registrar: MarkMonitor, Inc.
+Registrar IANA ID: 292
+Registrar Abuse Contact Email: abusecomplaints@markmonitor.com
+Registrar Abuse Contact Phone: +1.2083895770
+Domain Status: clientUpdateProhibited (https://www.icann.org/epp#clientUpdateProhibited)
+Domain Status: clientTransferProhibited (https://www.icann.org/epp#clientTransferProhibited)
+Domain Status: clientDeleteProhibited (https://www.icann.org/epp#clientDeleteProhibited)
+Registrant Organization: Google LLC
+Registrant State/Province: CA
+Registrant Country: US
+Registrant Email: Select Request Email Form at https://domains.markmonitor.com/whois/google.ws
+Admin Organization: Google LLC
+Admin State/Province: CA
+Admin Country: US
+Admin Email: Select Request Email Form at https://domains.markmonitor.com/whois/google.ws
+Tech Organization: Google LLC
+Tech State/Province: CA
+Tech Country: US
+Tech Email: Select Request Email Form at https://domains.markmonitor.com/whois/google.ws
+Name Server: ns1.google.com
+Name Server: ns3.google.com
+Name Server: ns2.google.com
+Name Server: ns4.google.com
+DNSSEC: unsigned
+URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
+>>> Last update of WHOIS database: 2020-10-03T13:05:15-0700 <<<
+
+For more information on WHOIS status codes, please visit:
+ https://www.icann.org/resources/pages/epp-status-codes
+
+If you wish to contact this domain’s Registrant, Administrative, or Technical
+contact, and such email address is not visible above, you may do so via our web
+form, pursuant to ICANN’s Temporary Specification. To verify that you are not a
+robot, please enter your email address to receive a link to a page that
+facilitates email communication with the relevant contact(s).
+
+Web-based WHOIS:
+ https://domains.markmonitor.com/whois
+
+If you have a legitimate interest in viewing the non-public WHOIS details, send
+your request and the reasons for your request to whoisrequest@markmonitor.com
+and specify the domain name in the subject line. We will review that request and
+may ask for supporting documentation and explanation.
+
+The data in MarkMonitor’s WHOIS database is provided for information purposes,
+and to assist persons in obtaining information about or related to a domain
+name’s registration record. While MarkMonitor believes the data to be accurate,
+the data is provided "as is" with no guarantee or warranties regarding its
+accuracy.
+
+By submitting a WHOIS query, you agree that you will use this data only for
+lawful purposes and that, under no circumstances will you use this data to:
+ (1) allow, enable, or otherwise support the transmission by email, telephone,
+or facsimile of mass, unsolicited, commercial advertising, or spam; or
+ (2) enable high volume, automated, or electronic processes that send queries,
+data, or email to MarkMonitor (or its systems) or the domain name contacts (or
+its systems).
+
+MarkMonitor reserves the right to modify these terms at any time.
+
+By submitting this query, you agree to abide by this policy.
+
+MarkMonitor Domain Management(TM)
+Protecting companies and consumers in a digital world.
+
+Visit MarkMonitor at https://www.markmonitor.com
+Contact us at +1.8007459229
+In Europe, at +44.02032062220
+--
+
diff --git a/tests/fixtures/hello.kiwi.txt b/tests/fixtures/hello.kiwi.txt
new file mode 100644
index 00000000..e4d2bc82
--- /dev/null
+++ b/tests/fixtures/hello.kiwi.txt
@@ -0,0 +1,79 @@
+Domain Name: hello.kiwi
+Registry Domain ID: 38699-KIWI
+Registrar WHOIS Server: whois.1api.net
+Registrar URL: www.1api.net
+Updated Date: 2023-09-11T17:27:06Z
+Creation Date: 2014-02-06T11:28:52Z
+Registry Expiry Date: 2026-10-31T11:00:00Z
+Registrar: 1API
+Registrar IANA ID: 1387
+Registrar Abuse Contact Email:
+Registrar Abuse Contact Phone:
+Registrar Abuse Contact Phone Ext:
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Registry Registrant ID: REDACTED FOR PRIVACY
+Registrant Name: REDACTED FOR PRIVACY
+Registrant Organization: Dot Kiwi Ltd
+Registrant Street: REDACTED FOR PRIVACY
+Registrant City: REDACTED FOR PRIVACY
+Registrant State/Province:
+Registrant Postal Code: REDACTED FOR PRIVACY
+Registrant Country: NZ
+Registrant Phone: REDACTED FOR PRIVACY
+Registrant Phone Ext: REDACTED FOR PRIVACY
+Registrant Fax: REDACTED FOR PRIVACY
+Registrant Fax Ext: REDACTED FOR PRIVACY
+Registrant Email: Please ask the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Other contacts of the queried domain name
+Registry Admin ID: REDACTED FOR PRIVACY
+Admin Name: REDACTED FOR PRIVACY
+Admin Organization: REDACTED FOR PRIVACY
+Admin Street: REDACTED FOR PRIVACY
+Admin City: REDACTED FOR PRIVACY
+Admin State/Province: REDACTED FOR PRIVACY
+Admin Postal Code: REDACTED FOR PRIVACY
+Admin Country: REDACTED FOR PRIVACY
+Admin Phone: REDACTED FOR PRIVACY
+Admin Phone Ext: REDACTED FOR PRIVACY
+Admin Fax: REDACTED FOR PRIVACY
+Admin Fax Ext: REDACTED FOR PRIVACY
+Admin Email: Please ask the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Other contacts of the queried domain name
+Registry Tech ID: REDACTED FOR PRIVACY
+Tech Name: REDACTED FOR PRIVACY
+Tech Organization: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech City: REDACTED FOR PRIVACY
+Tech State/Province: REDACTED FOR PRIVACY
+Tech Postal Code: REDACTED FOR PRIVACY
+Tech Country: REDACTED FOR PRIVACY
+Tech Phone: REDACTED FOR PRIVACY
+Tech Phone Ext: REDACTED FOR PRIVACY
+Tech Fax: REDACTED FOR PRIVACY
+Tech Fax Ext: REDACTED FOR PRIVACY
+Tech Email: Please ask the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Other contacts of the queried domain name
+Registry Billing ID: REDACTED FOR PRIVACY
+Billing Name: REDACTED FOR PRIVACY
+Billing Organization: REDACTED FOR PRIVACY
+Billing Street: REDACTED FOR PRIVACY
+Billing City: REDACTED FOR PRIVACY
+Billing State/Province: REDACTED FOR PRIVACY
+Billing Postal Code: REDACTED FOR PRIVACY
+Billing Country: REDACTED FOR PRIVACY
+Billing Phone: REDACTED FOR PRIVACY
+Billing Phone Ext: REDACTED FOR PRIVACY
+Billing Fax: REDACTED FOR PRIVACY
+Billing Fax Ext: REDACTED FOR PRIVACY
+Billing Email: Please ask the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Other contacts of the queried domain name
+Name Server: ns1196.dns.dyn.com
+Name Server: ns2142.dns.dyn.com
+Name Server: ns3198.dns.dyn.com
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2025-11-30T17:10:07Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+%
+% Use of CIRA's WHOIS service is governed by the Terms of Use in its Legal
+% Notice, available at https://www.cira.ca/en/resources/documents/about/website-terms-use
+%
+% (c) 2025 Canadian Internet Registration Authority, (http://www.cira.ca/)
\ No newline at end of file
diff --git a/tests/fixtures/humblebundle.de.txt b/tests/fixtures/humblebundle.de.txt
new file mode 100644
index 00000000..6754eac0
--- /dev/null
+++ b/tests/fixtures/humblebundle.de.txt
@@ -0,0 +1,22 @@
+% Restricted rights.
+%
+% Terms and Conditions of Use
+%
+% The above data may only be used within the scope of technical or
+% administrative necessities of Internet operation or to remedy legal
+% problems.
+% The use for other purposes, in particular for advertising, is not permitted.
+%
+% The DENIC whois service on port 43 doesn't disclose any information concerning
+% the domain holder, general request and abuse contact.
+% This information can be obtained through use of our web-based whois service
+% available at the DENIC website:
+% http://www.denic.de/en/domains/whois-service/web-whois.html
+%
+%
+
+Domain: humblebundle.de
+Nserver: ns1.redirectdom.com
+Nserver: ns2.redirectdom.com
+Status: connect
+Changed: 2025-10-06T20:24:20+02:00
\ No newline at end of file
diff --git a/tests/fixtures/interdominio.com.txt b/tests/fixtures/interdominio.com.txt
new file mode 100644
index 00000000..fe162ddb
--- /dev/null
+++ b/tests/fixtures/interdominio.com.txt
@@ -0,0 +1,55 @@
+ Domain Name: INTERDOMINIO.COM
+ Registry Domain ID: 142081_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.acens.net
+ Registrar URL: https://www.acens.com
+ Updated Date: 2025-02-10T04:40:07Z
+ Creation Date: 1997-02-10T05:00:00Z
+ Registry Expiry Date: 2026-02-11T05:00:00Z
+ Registrar: Acens Technologies, S.L.U.
+ Registrar IANA ID: 140
+ Registrar Abuse Contact Email: abuse@acens.net
+ Registrar Abuse Contact Phone: 91 141 85 83
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: NS1.INTERDOMAIN.NET
+ Name Server: NS2.INTERDOMAIN.NET
+ Name Server: NS3.INTERDOMAIN.ES
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/inww.com.txt b/tests/fixtures/inww.com.txt
new file mode 100644
index 00000000..175a1549
--- /dev/null
+++ b/tests/fixtures/inww.com.txt
@@ -0,0 +1,54 @@
+ Domain Name: INWW.COM
+ Registry Domain ID: 5212949_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.webcentralgroup.com.au
+ Registrar URL: http://www.melbourneit.com.au
+ Updated Date: 2025-10-18T10:00:50Z
+ Creation Date: 1998-04-16T04:00:00Z
+ Registry Expiry Date: 2026-11-17T15:10:20Z
+ Registrar: Netregistry Wholesale Pty Ltd
+ Registrar IANA ID: 13
+ Registrar Abuse Contact Email: abuse@melbourneit.com.au
+ Registrar Abuse Contact Phone: +61342060102
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Name Server: NS11.MELBOURNEIT.COM.AU
+ Name Server: NS12.MELBOURNEIT.COM.AU
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/isnic.is.txt b/tests/fixtures/isnic.is.txt
new file mode 100644
index 00000000..0147c8e3
--- /dev/null
+++ b/tests/fixtures/isnic.is.txt
@@ -0,0 +1,47 @@
+% This is the ISNIC Whois server.
+%
+% Rights restricted by copyright.
+% See https://www.isnic.is/en/about/copyright
+
+domain: isnic.is
+registrant: IIH33-IS
+admin-c: ISHM-IS
+tech-c: ISHM-IS
+zone-c: ISHM-IS
+billing-c: ISBC-IS
+nserver: tg-secondary01.isnic.is
+nserver: ht-secondary01.isnic.is
+nserver: nsp.dnsnode.net
+nserver: sec1.rcode0.net
+dnssec: signed delegation
+created: September 5 2000
+expires: September 5 2026
+source: ISNIC
+
+role: Internet a Islandi hf.
+nic-hdl: IIH33-IS
+address: Katrinartuni 2
+address: IS-105 Reykjavik
+phone: +354 5782030
+e-mail: isnic@isnic.is
+created: September 5 2000
+source: ISNIC
+
+role: Internet a Islandi hf.
+nic-hdl: ISHM-IS
+address: Katrinartuni 2
+address: IS-105 Reykjavik
+phone: +354 5782030
+e-mail: hostmaster@isnic.is
+created: May 15 2002
+source: ISNIC
+
+role: Internet a Islandi hf.
+nic-hdl: ISBC-IS
+address: Katrinartuni 2
+address: IS-105 Reykjavik
+phone: +354 5782030
+e-mail: innheimta@isnic.is
+created: November 6 2000
+source: ISNIC
+
diff --git a/tests/fixtures/isoc.am.txt b/tests/fixtures/isoc.am.txt
new file mode 100644
index 00000000..e9be5467
--- /dev/null
+++ b/tests/fixtures/isoc.am.txt
@@ -0,0 +1,41 @@
+%
+%AM TLD whois server #2
+% Please see 'whois -h whois.amnic.net help' for usage.
+%
+
+ Domain name: isoc.am
+ Registrar: amnic
+ Status: active
+
+ Registrant:
+ Internet Society NGO
+ 17/3 A. Khachatryan str.
+ Yerevan, 0012
+ AM
+
+ Administrative contact:
+ Igor Mkrtumyan
+ Internet Society NGO
+ 17/3 A. Khachatryan str.
+ Yerevan, 0012
+ AM
+ imkrtumyan@isoc.am
+ +374-60-272217
+
+ Technical contact:
+ Misak Khachatryan
+ Internet Society NGO
+ 17/3 A. Khachatryan str.
+ Yerevan, 0012
+ AM
+ misak@amnic.net
+ +374 93 199840
+
+ DNS servers:
+ ns1.a2hosting.com
+ ns2.a2hosting.com
+ ns3.a2hosting.com
+ ns4.a2hosting.com
+
+ Registered: 2000-01-01
+ Last modified: 2023-03-20
diff --git a/tests/fixtures/joker.com.txt b/tests/fixtures/joker.com.txt
new file mode 100644
index 00000000..5f1d066b
--- /dev/null
+++ b/tests/fixtures/joker.com.txt
@@ -0,0 +1,54 @@
+ Domain Name: JOKER.COM
+ Registry Domain ID: 523683_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.joker.com
+ Registrar URL: http://www.joker.com
+ Updated Date: 2020-09-30T17:54:17Z
+ Creation Date: 1994-11-27T05:00:00Z
+ Registry Expiry Date: 2027-08-03T15:02:10Z
+ Registrar: CSL Computer Service Langenbach GmbH d/b/a joker.com
+ Registrar IANA ID: 113
+ Registrar Abuse Contact Email: abuse@joker.com
+ Registrar Abuse Contact Phone: +49.21186767447
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: X.NS.JOKER.COM
+ Name Server: Y.NS.JOKER.COM
+ Name Server: Z.NS.JOKER.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/jprs.jp.txt b/tests/fixtures/jprs.jp.txt
new file mode 100644
index 00000000..abc6760f
--- /dev/null
+++ b/tests/fixtures/jprs.jp.txt
@@ -0,0 +1,39 @@
+[ JPRS database provides information on network administration. Its use is ]
+[ restricted to network administration purposes. For further information, ]
+[ use 'whois -h whois.jprs.jp help'. To suppress Japanese output, add'/e' ]
+[ at the end of command, e.g. 'whois -h whois.jprs.jp xxx/e'. ]
+Domain Information: [ドメイン情報]
+[Domain Name] JPRS.JP
+
+[登録者名] 株式会社日本レジストリサービス
+[Registrant] Japan Registry Services Co.,Ltd.
+
+[Name Server] ns1.jprs.jp
+[Name Server] ns2.jprs.jp
+[Name Server] ns3.jprs.jp
+[Name Server] ns4.jprs.jp
+[Signing Key] 7240 8 2 (
+ E147A85589E24FE0DBB5980C73501B5D
+ D656BE5550714F150BE574AE8777B77D )
+
+[登録年月日] 2001/02/02
+[有効期限] 2026/02/28
+[状態] Active
+[ロック状態] DomainTransferLocked
+[ロック状態] AgentChangeLocked
+[最終更新] 2025/03/24 13:18:36 (JST)
+
+Contact Information: [公開連絡窓口]
+[名前] 株式会社日本レジストリサービス
+[Name] Japan Registry Services Co.,Ltd.
+[Email] dom-admin@jprs.co.jp
+[Web Page]
+[郵便番号] 101-0065
+[住所] 東京都千代田区西神田三丁目8番1号
+ 千代田ファーストビル東館
+[Postal Address] Chiyoda First Bldg. East,
+ 3-8-1 Nishi-Kanda Chiyoda-ku,
+ Tokyo 101-0065, JAPAN
+[電話番号] 03-5215-8451
+[FAX番号] 03-5215-8452
+
\ No newline at end of file
diff --git a/tests/fixtures/lemonade.fr.txt b/tests/fixtures/lemonade.fr.txt
new file mode 100644
index 00000000..e9940f57
--- /dev/null
+++ b/tests/fixtures/lemonade.fr.txt
@@ -0,0 +1,90 @@
+%%
+%% This is the AFNIC Whois server.
+%%
+%% complete date format: YYYY-MM-DDThh:mm:ssZ
+%%
+%% Rights restricted by copyright.
+%% See https://www.afnic.fr/en/domain-names-and-support/everything-there-is-to-know-about-domain-names/find-a-domain-name-or-a-holder-using-whois/
+%%
+%%
+
+domain: lemonade.fr
+status: ACTIVE
+eppstatus: active
+hold: NO
+holder-c: ANO00-FRNIC
+admin-c: ANO00-FRNIC
+tech-c: K6635-FRNIC
+registrar: RANXPLORER
+Expiry Date: 2026-07-30T22:32:03.626236Z
+created: 2023-07-30T22:32:03.643209Z
+last-update: 2025-08-31T22:14:16.657453Z
+source: FRNIC
+
+nserver: ns1.bodis.com
+nserver: ns2.bodis.com
+source: FRNIC
+
+registrar: RANXPLORER
+address: 78 RUE D ALEMBERT
+address: 38000 GRENOBLE
+country: FR
+phone: +33.458000007
+e-mail: contact@kifdom.com
+website: https://www.kifdom.com/faq.php
+anonymous: No
+registered: 2014-12-22T00:00:00Z
+source: FRNIC
+
+nic-hdl: ANO00-FRNIC
+type: PERSON
+contact: Ano Nymous
+registrar: RANXPLORER
+changed: 2025-11-12T14:08:19.136387Z
+anonymous: YES
+remarks: -------------- WARNING --------------
+remarks: While the registrar knows him/her,
+remarks: this person chose to restrict access
+remarks: to his/her personal data. So PLEASE,
+remarks: don't send emails to Ano Nymous. This
+remarks: address is bogus and there is no hope
+remarks: of a reply.
+remarks: -------------- WARNING --------------
+obsoleted: NO
+eppstatus: associated
+eppstatus: active
+eligstatus: ok
+eligsource: REGISTRAR
+eligdate: 2025-04-16T07:16:51.183746Z
+reachstatus: ok
+reachmedia: email
+reachsource: REGISTRAR
+reachdate: 2025-04-16T07:16:51.183755Z
+source: FRNIC
+
+nic-hdl: K6635-FRNIC
+type: ORGANIZATION
+contact: RANXPLORER
+address: RANXPLORER
+address: 78 rue d'Alembert
+address: 38000 Grenoble
+country: FR
+phone: +33.458000007
+e-mail: contact@kifcorp.fr
+registrar: RANXPLORER
+changed: 2025-11-30T06:15:02.715838Z
+anonymous: NO
+obsoleted: NO
+eppstatus: associated
+eppstatus: active
+eligstatus: ok
+eligsource: REGISTRAR
+eligdate: 2025-04-16T06:15:29.779373Z
+reachstatus: ok
+reachmedia: email
+reachsource: REGISTRAR
+reachdate: 2025-04-16T06:15:29.779384Z
+source: FRNIC
+
+>>> Last update of WHOIS database: 2025-11-30T17:08:22.337227Z <<<
+
\ No newline at end of file
diff --git a/tests/fixtures/markmonitor.com.txt b/tests/fixtures/markmonitor.com.txt
new file mode 100644
index 00000000..1cd94fc6
--- /dev/null
+++ b/tests/fixtures/markmonitor.com.txt
@@ -0,0 +1,65 @@
+ Domain Name: MARKMONITOR.COM
+ Registry Domain ID: 5604337_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.markmonitor.com
+ Registrar URL: http://www.markmonitor.com
+ Updated Date: 2024-01-18T18:54:43Z
+ Creation Date: 1999-04-23T04:00:00Z
+ Registry Expiry Date: 2032-04-23T04:00:00Z
+ Registrar: MarkMonitor Inc.
+ Registrar IANA ID: 292
+ Registrar Abuse Contact Email: abusecomplaints@markmonitor.com
+ Registrar Abuse Contact Phone: +1.2086851750
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+ Name Server: HA2.MARKMONITOR.ZONE
+ Name Server: HA4.MARKMONITOR.ZONE
+ Name Server: NS1.MARKMONITOR.COM
+ Name Server: NS2.MARKMONITOR.COM
+ Name Server: NS3.MARKMONITOR.COM
+ Name Server: NS4.MARKMONITOR.COM
+ Name Server: NS5.MARKMONITOR.COM
+ Name Server: NS6.MARKMONITOR.COM
+ Name Server: NS7.MARKMONITOR.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/modx.today.txt b/tests/fixtures/modx.today.txt
new file mode 100644
index 00000000..23b89a69
--- /dev/null
+++ b/tests/fixtures/modx.today.txt
@@ -0,0 +1,4 @@
+TLD is not supported.
+>>> Last update of WHOIS database: 2025-11-30T17:09:53Z <<<
+
+Terms of Use: Access to WHOIS information is provided to assist persons in determining the contents of a domain name registration record in the registry database. The data in this record is provided by Identity Digital or the Registry Operator for informational purposes only, and accuracy is not guaranteed. This service is intended only for query-based access. You agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data to (a) allow, enable, or otherwise support the transmission by e-mail, telephone, or facsimile of mass unsolicited, commercial advertising or solicitations to entities other than the data recipient's own existing customers; or (b) enable high volume, automated, electronic processes that send queries or data to the systems of Registry Operator, a Registrar, or Identity Digital except as reasonably necessary to register domain names or modify existing registrations. When using the Whois service, please consider the following: The Whois service is not a replacement for standard EPP commands to the SRS service. Whois is not considered authoritative for registered domain objects. The Whois service may be scheduled for downtime during production or OT&E maintenance periods. Queries to the Whois services are throttled. If too many queries are received from a single IP address within a specified time, the service will begin to reject further queries for a period of time to prevent disruption of Whois service access. Abuse of the Whois system through data mining is mitigated by detecting and limiting bulk query access from single sources. Where applicable, the presence of a [Non-Public Data] tag indicates that such data is not made publicly available due to applicable data privacy laws or requirements. Should you wish to contact the registrant, please refer to the Whois records available through the registrar URL listed above. Access to non-public data may be provided, upon request, where it can be reasonably confirmed that the requester holds a specific legitimate interest and a proper legal basis for accessing the withheld data. Access to this data provided by Identity Digital can be requested by submitting a request via the form found at https://www.identity.digital/about/policies/whois-layered-access/. The Registrar of Record identified in this output may have an RDDS service that can be queried for additional information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. Identity Digital Inc. and Registry Operator reserve the right to modify these terms at any time. By submitting this query, you agree to abide by this policy.
\ No newline at end of file
diff --git a/tests/fixtures/moniker.com.txt b/tests/fixtures/moniker.com.txt
new file mode 100644
index 00000000..1b8c5f2e
--- /dev/null
+++ b/tests/fixtures/moniker.com.txt
@@ -0,0 +1,53 @@
+ Domain Name: MONIKER.COM
+ Registry Domain ID: 4065057_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.moniker.com
+ Registrar URL: http://www.moniker.com
+ Updated Date: 2025-11-25T04:25:46Z
+ Creation Date: 1999-03-04T05:00:00Z
+ Registry Expiry Date: 2026-03-04T05:00:00Z
+ Registrar: Moniker Online Services LLC
+ Registrar IANA ID: 228
+ Registrar Abuse Contact Email: abuse@moniker.com
+ Registrar Abuse Contact Phone: +49.68949396850
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: ANYCAST1.DNSRES.NET
+ Name Server: ANYCAST2.DNSRES.NET
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/mtld.mobi.txt b/tests/fixtures/mtld.mobi.txt
new file mode 100644
index 00000000..f834f90d
--- /dev/null
+++ b/tests/fixtures/mtld.mobi.txt
@@ -0,0 +1,3 @@
+Domain not found.
+
+>>> Please update your code or tell your system administrator to use whois.nic.mobi, the authoritative WHOIS server for this domain. <<<
\ No newline at end of file
diff --git a/tests/fixtures/name.com.txt b/tests/fixtures/name.com.txt
new file mode 100644
index 00000000..d518b799
--- /dev/null
+++ b/tests/fixtures/name.com.txt
@@ -0,0 +1,56 @@
+ Domain Name: NAME.COM
+ Registry Domain ID: 729927_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.name.com
+ Registrar URL: http://www.name.com
+ Updated Date: 2023-08-29T19:30:58Z
+ Creation Date: 1995-01-03T05:00:00Z
+ Registry Expiry Date: 2032-11-04T13:56:30Z
+ Registrar: Name.com, Inc.
+ Registrar IANA ID: 625
+ Registrar Abuse Contact Email: abuse@name.com
+ Registrar Abuse Contact Phone: 7202492374
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+ Name Server: MARGARET.NS.CLOUDFLARE.COM
+ Name Server: WOZ.NS.CLOUDFLARE.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/namejuice.com.txt b/tests/fixtures/namejuice.com.txt
new file mode 100644
index 00000000..dc9d0116
--- /dev/null
+++ b/tests/fixtures/namejuice.com.txt
@@ -0,0 +1,56 @@
+ Domain Name: NAMEJUICE.COM
+ Registry Domain ID: 104784662_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.namejuice.com
+ Registrar URL: http://www.namejuice.com
+ Updated Date: 2025-10-10T07:27:02Z
+ Creation Date: 2003-10-09T16:27:20Z
+ Registry Expiry Date: 2026-10-09T16:27:20Z
+ Registrar: BRANDON GRAY INTERNET SERVICES INC. (dba "NameJuice.com")
+ Registrar IANA ID: 636
+ Registrar Abuse Contact Email: abuse@namejuice.com
+ Registrar Abuse Contact Phone: +1.9054152681
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: DNS1.NAMERESOLVERS.COM
+ Name Server: DNS2.NAMERESOLVERS.COM
+ Name Server: DNS3.NAMERESOLVERS.COM
+ Name Server: DNS4.NAMERESOLVERS.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/nameking.com.txt b/tests/fixtures/nameking.com.txt
new file mode 100644
index 00000000..9d71f7c5
--- /dev/null
+++ b/tests/fixtures/nameking.com.txt
@@ -0,0 +1,53 @@
+ Domain Name: NAMEKING.COM
+ Registry Domain ID: 6326774_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.PublicDomainRegistry.com
+ Registrar URL: http://www.publicdomainregistry.com
+ Updated Date: 2025-04-04T12:21:48Z
+ Creation Date: 1999-05-07T18:57:25Z
+ Registry Expiry Date: 2026-05-07T18:55:42Z
+ Registrar: PDR Ltd. d/b/a PublicDomainRegistry.com
+ Registrar IANA ID: 303
+ Registrar Abuse Contact Email: abuse-contact@publicdomainregistry.com
+ Registrar Abuse Contact Phone: +1.2013775952
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: JIM.NS.CLOUDFLARE.COM
+ Name Server: ZELDA.NS.CLOUDFLARE.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/names4ever.com.txt b/tests/fixtures/names4ever.com.txt
new file mode 100644
index 00000000..becab2ac
--- /dev/null
+++ b/tests/fixtures/names4ever.com.txt
@@ -0,0 +1,53 @@
+ Domain Name: NAMES4EVER.COM
+ Registry Domain ID: 8025608_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.names4ever.com
+ Registrar URL: http://www.aplus.net
+ Updated Date: 2025-07-16T07:18:21Z
+ Creation Date: 1999-07-15T14:23:10Z
+ Registry Expiry Date: 2026-07-15T14:23:10Z
+ Registrar: Hostopia Canada Corp
+ Registrar IANA ID: 52
+ Registrar Abuse Contact Email: tld-abuse@hostopia.com
+ Registrar Abuse Contact Phone: +1.8003229438
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: NS1.ABAC.COM
+ Name Server: NS2.ABAC.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/namesdirect.com.txt b/tests/fixtures/namesdirect.com.txt
new file mode 100644
index 00000000..51249ab5
--- /dev/null
+++ b/tests/fixtures/namesdirect.com.txt
@@ -0,0 +1,55 @@
+ Domain Name: NAMESDIRECT.COM
+ Registry Domain ID: 4876061_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.domain.com
+ Registrar URL: http://www.domain.com
+ Updated Date: 2025-09-28T03:47:32Z
+ Creation Date: 1998-10-28T05:00:00Z
+ Registry Expiry Date: 2026-10-27T04:00:00Z
+ Registrar: Domain.com - Network Solutions, LLC
+ Registrar IANA ID: 886
+ Registrar Abuse Contact Email: domain.operations@web.com
+ Registrar Abuse Contact Phone: +1.8003337680
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Name Server: NS1.NAMESDIRECT.COM
+ Name Server: NS2.NAMESDIRECT.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/namevault.com.txt b/tests/fixtures/namevault.com.txt
new file mode 100644
index 00000000..3680d642
--- /dev/null
+++ b/tests/fixtures/namevault.com.txt
@@ -0,0 +1,55 @@
+ Domain Name: NAMEVAULT.COM
+ Registry Domain ID: 3091940_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.PublicDomainRegistry.com
+ Registrar URL: http://www.publicdomainregistry.com
+ Updated Date: 2025-01-21T12:22:06Z
+ Creation Date: 1999-01-17T05:00:00Z
+ Registry Expiry Date: 2026-01-17T05:00:00Z
+ Registrar: PDR Ltd. d/b/a PublicDomainRegistry.com
+ Registrar IANA ID: 303
+ Registrar Abuse Contact Email: abuse-contact@publicdomainregistry.com
+ Registrar Abuse Contact Phone: +1.2013775952
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: MP.EARTH.ORDERBOX-DNS.COM
+ Name Server: MP.MARS.ORDERBOX-DNS.COM
+ Name Server: MP.MERCURY.ORDERBOX-DNS.COM
+ Name Server: MP.VENUS.ORDERBOX-DNS.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/networksolutions.com.txt b/tests/fixtures/networksolutions.com.txt
new file mode 100644
index 00000000..0f8f95a6
--- /dev/null
+++ b/tests/fixtures/networksolutions.com.txt
@@ -0,0 +1,58 @@
+ Domain Name: NETWORKSOLUTIONS.COM
+ Registry Domain ID: 4548132_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.networksolutions.com
+ Registrar URL: http://networksolutions.com
+ Updated Date: 2023-12-04T22:00:57Z
+ Creation Date: 1998-04-27T04:00:00Z
+ Registry Expiry Date: 2029-04-26T04:00:00Z
+ Registrar: Network Solutions, LLC
+ Registrar IANA ID: 2
+ Registrar Abuse Contact Email: domain.operations@web.com
+ Registrar Abuse Contact Phone: +1.8777228662
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+ Name Server: BARBARA.NS.CLOUDFLARE.COM
+ Name Server: HENRY.NS.CLOUDFLARE.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/neulevel.biz.txt b/tests/fixtures/neulevel.biz.txt
new file mode 100644
index 00000000..3ecc2362
--- /dev/null
+++ b/tests/fixtures/neulevel.biz.txt
@@ -0,0 +1,95 @@
+Domain Name: neulevel.biz
+Registry Domain ID: REDACTED FOR PRIVACY
+Registrar WHOIS Server:
+Registrar URL: registry.godaddy
+Updated Date: 2025-10-24T03:19:10Z
+Creation Date: 2001-09-30T18:12:59Z
+Registry Expiry Date: 2025-11-06T23:59:00Z
+Registrar: Registry Services, LLC
+Registrar IANA ID: 9998
+Registrar Abuse Contact Email: reg-support@team.neustar
+Registrar Abuse Contact Phone: +1.8446772878
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+Domain Status: autoRenewPeriod https://icann.org/epp#autoRenewPeriod
+Registry Registrant ID: REDACTED FOR PRIVACY
+Registrant Name: REDACTED FOR PRIVACY
+Registrant Organization: Registry Services, LLC
+Registrant Street: REDACTED FOR PRIVACY
+Registrant Street: REDACTED FOR PRIVACY
+Registrant Street: REDACTED FOR PRIVACY
+Registrant City: REDACTED FOR PRIVACY
+Registrant State/Province: AZ
+Registrant Postal Code: REDACTED FOR PRIVACY
+Registrant Country: US
+Registrant Phone: REDACTED FOR PRIVACY
+Registrant Phone Ext: REDACTED FOR PRIVACY
+Registrant Fax: REDACTED FOR PRIVACY
+Registrant Fax Ext: REDACTED FOR PRIVACY
+Registrant Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Registry Admin ID:
+Admin Name:
+Admin Organization:
+Admin Street:
+Admin Street:
+Admin Street:
+Admin City:
+Admin State/Province:
+Admin Postal Code:
+Admin Country:
+Admin Phone:
+Admin Phone Ext:
+Admin Fax:
+Admin Fax Ext:
+Admin Email:
+Registry Tech ID: REDACTED FOR PRIVACY
+Tech Name: REDACTED FOR PRIVACY
+Tech Organization: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech City: REDACTED FOR PRIVACY
+Tech State/Province: REDACTED FOR PRIVACY
+Tech Postal Code: REDACTED FOR PRIVACY
+Tech Country: REDACTED FOR PRIVACY
+Tech Phone: REDACTED FOR PRIVACY
+Tech Phone Ext: REDACTED FOR PRIVACY
+Tech Fax: REDACTED FOR PRIVACY
+Tech Fax Ext: REDACTED FOR PRIVACY
+Tech Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Name Server: pdns4.ultradns.org
+Name Server: pdns5.ultradns.info
+Name Server: pdns1.ultradns.net
+Name Server: pdns6.ultradns.co.uk
+Name Server: pdns3.ultradns.org
+Name Server: pdns2.ultradns.net
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2025-11-30T17:09:57Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+The Service is provided so that you may look up certain information in relation to domain names that we store in our database.
+
+Use of the Service is subject to our policies, in particular you should familiarise yourself with our Acceptable Use Policy and our Privacy Policy.
+
+The information provided by this Service is 'as is' and we make no guarantee of it its accuracy.
+
+You agree that by your use of the Service you will not use the information provided by us in a way which is:
+* inconsistent with any applicable laws,
+* inconsistent with any policy issued by us,
+* to generate, distribute, or facilitate unsolicited mass email, promotions, advertisings or other solicitations, or
+* to enable high volume, automated, electronic processes that apply to the Service.
+
+You acknowledge that:
+* a response from the Service that a domain name is 'available', does not guarantee that is able to be registered,
+* we may restrict, suspend or terminate your access to the Service at any time, and
+* the copying, compilation, repackaging, dissemination or other use of the information provided by the Service is not permitted, without our express written consent.
+
+This information has been prepared and published in order to represent administrative and technical management of the TLD.
+
+We may discontinue or amend any part or the whole of these Terms of Service from time to time at our absolute discretion.
\ No newline at end of file
diff --git a/tests/fixtures/neustar.us.txt b/tests/fixtures/neustar.us.txt
new file mode 100644
index 00000000..13ea851c
--- /dev/null
+++ b/tests/fixtures/neustar.us.txt
@@ -0,0 +1,93 @@
+Domain Name: neustar.us
+Registry Domain ID: D670499-US
+Registrar WHOIS Server:
+Registrar URL: https://www.about.us/
+Updated Date: 2025-06-02T00:00:04Z
+Creation Date: 2002-04-18T19:21:57Z
+Registry Expiry Date: 2026-04-17T23:59:59Z
+Registrar: .us Registry Services LLC
+Registrar IANA ID: 1111112
+Registrar Abuse Contact Email: abuse@about.us
+Registrar Abuse Contact Phone:
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+Registry Registrant ID: C37639215-US
+Registrant Name: .US Registration Policy
+Registrant Organization: Registry Services, LLC
+Registrant Street: 100 S. Mill Ave
+Registrant Street: Suite 1600
+Registrant Street:
+Registrant City: Tempe
+Registrant State/Province: AZ
+Registrant Postal Code: 85281
+Registrant Country: US
+Registrant Phone: +1.4806519999
+Registrant Phone Ext:
+Registrant Fax:
+Registrant Fax Ext:
+Registrant Email: help@about.us
+Registrant Application Purpose: P5
+Registrant Nexus Category: C21
+Registry Admin ID: C37639215-US
+Admin Name: .US Registration Policy
+Admin Organization: Registry Services, LLC
+Admin Street: 100 S. Mill Ave
+Admin Street: Suite 1600
+Admin Street:
+Admin City: Tempe
+Admin State/Province: AZ
+Admin Postal Code: 85281
+Admin Country: US
+Admin Phone: +1.4806519999
+Admin Phone Ext:
+Admin Fax:
+Admin Fax Ext:
+Admin Email: help@about.us
+Admin Application Purpose: P5
+Admin Nexus Category: C21
+Registry Tech ID: C37639215-US
+Tech Name: .US Registration Policy
+Tech Organization: Registry Services, LLC
+Tech Street: 100 S. Mill Ave
+Tech Street: Suite 1600
+Tech Street:
+Tech City: Tempe
+Tech State/Province: AZ
+Tech Postal Code: 85281
+Tech Country: US
+Tech Phone: +1.4806519999
+Tech Phone Ext:
+Tech Fax:
+Tech Fax Ext:
+Tech Email: help@about.us
+Tech Application Purpose: P5
+Tech Nexus Category: C21
+Name Server: pdns4.ultradns.org
+Name Server: pdns5.ultradns.info
+Name Server: pdns1.ultradns.net
+Name Server: pdns6.ultradns.co.uk
+Name Server: pdns3.ultradns.org
+Name Server: pdns2.ultradns.net
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2025-11-30T17:09:10Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+.US WHOIS Complaint Tool - http://www.whoiscomplaints.us
+Advanced WHOIS Instructions - http://whois.us/help.html
+
+Registry Services, LLC, the Registry Administrator for .US, has collected this information for the WHOIS database through a .US-Accredited Registrar. This information is provided to you for informational purposes only and is designed to assist persons in determining contents of a domain name registration record in the registry database.
+
+Registry Services, LLC makes this information available to you "as is" and does not guarantee its accuracy. By submitting a WHOIS query, you agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data:
+
+(1) to allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations via direct mail, electronic mail, or by telephone;
+(2) in contravention of any applicable data and privacy protection laws; or
+(3) to enable high volume, automated, electronic processes that apply to the registry (or its systems).
+
+Compilation, repackaging, dissemination, or other use of the WHOIS database in its entirety, or of a substantial portion thereof, is not allowed without our prior written permission.
+
+We reserve the right to modify or change these conditions at any time without prior or subsequent notification of any kind. By executing this query, in any manner whatsoever, you agree to abide by these terms. NOTE: FAILURE TO LOCATE A RECORD IN THE WHOIS DATABASE IS NOT INDICATIVE OF THE AVAILABILITY OF A DOMAIN NAME. All domain names are subject to certain additional domain name registration rules. For details, please visit our site at www.whois.us.
\ No newline at end of file
diff --git a/tests/fixtures/news.su.txt b/tests/fixtures/news.su.txt
new file mode 100644
index 00000000..8f8238e7
--- /dev/null
+++ b/tests/fixtures/news.su.txt
@@ -0,0 +1,17 @@
+% TCI Whois Service. Terms of use:
+% https://tcinet.ru/documents/whois_ru_rf.pdf (in Russian)
+% https://tcinet.ru/documents/whois_su.pdf (in Russian)
+
+domain: NEWS.SU
+nserver: johnny.ns.cloudflare.com.
+nserver: sarah.ns.cloudflare.com.
+state: REGISTERED, DELEGATED
+person: Private Person
+e-mail: andy.brok@yandex.ru
+registrar: DOMAINSHOP-SU
+created: 2022-08-02T14:06:50Z
+paid-till: 2026-08-02T14:06:50Z
+free-date: 2026-09-04
+source: TCI
+
+Last updated on 2025-11-30T17:08:01Z
diff --git a/tests/fixtures/nic.ae.txt b/tests/fixtures/nic.ae.txt
new file mode 100644
index 00000000..516ce0a0
--- /dev/null
+++ b/tests/fixtures/nic.ae.txt
@@ -0,0 +1,20 @@
+Domain Name: nic.ae
+Registrar ID: Etisalat
+Registrar Name: Etisalat
+Status: clientDeleteProhibited
+Status: clientUpdateProhibited
+
+Registrant Contact ID: CX364448T
+Registrant Contact Name: Emirates Telecommunications Corporation - Etisalat
+Registrant Contact Email: Visit whois.aeda.net.ae for Web based WhoIs
+Registrant Contact Organisation: Emirates Telecommunications Corporation - Etisalat
+
+Tech Contact ID: CX364450T
+Tech Contact Name: Emirates Telecommunications Corporation - Etisalat
+Tech Contact Email: Visit whois.aeda.net.ae for Web based WhoIs
+Tech Contact Organisation: Emirates Telecommunications Corporation - Etisalat
+
+Name Server: ns1.etisalatdomains.ae
+Name Server: ns4.etisalatdomains.ae
+Name Server: ns2.etisalatdomains.ae
+Name Server: ns3.etisalatdomains.ae
\ No newline at end of file
diff --git a/tests/fixtures/nic.aero.txt b/tests/fixtures/nic.aero.txt
new file mode 100644
index 00000000..26fc52f6
--- /dev/null
+++ b/tests/fixtures/nic.aero.txt
@@ -0,0 +1,67 @@
+This domain is protected by the Registry Lock service. If you are the registrant and wish to take action on this lock, please contact your registrar.
+
+Domain Name: nic.aero
+Registry Domain ID: REDACTED
+Registrar WHOIS Server: whois.identitydigital.services
+Registrar URL: https://identity.digital
+Updated Date: 2025-04-22T13:26:44Z
+Creation Date: 2002-03-08T13:26:29Z
+Registry Expiry Date: 2026-03-08T13:26:29Z
+Registrar: Registry Operator acts as Registrar (9999)
+Registrar IANA ID: 9999
+Registrar Abuse Contact Email: abuse@identity.digital
+Registrar Abuse Contact Phone: +1.6664447777
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Registry Registrant ID: REDACTED
+Registrant Name: REDACTED
+Registrant Organization: SITA SC
+Registrant Street: REDACTED
+Registrant City: REDACTED
+Registrant State/Province: GE
+Registrant Postal Code: REDACTED
+Registrant Country: CH
+Registrant Phone: REDACTED
+Registrant Phone Ext: REDACTED
+Registrant Fax: REDACTED
+Registrant Fax Ext: REDACTED
+Registrant Email: REDACTED
+Registry Admin ID: REDACTED
+Admin Name: REDACTED
+Admin Organization: REDACTED
+Admin Street: REDACTED
+Admin City: REDACTED
+Admin State/Province: REDACTED
+Admin Postal Code: REDACTED
+Admin Country: REDACTED
+Admin Phone: REDACTED
+Admin Phone Ext: REDACTED
+Admin Fax: REDACTED
+Admin Fax Ext: REDACTED
+Admin Email: REDACTED
+Registry Tech ID: REDACTED
+Tech Name: REDACTED
+Tech Organization: REDACTED
+Tech Street: REDACTED
+Tech City: REDACTED
+Tech State/Province: REDACTED
+Tech Postal Code: REDACTED
+Tech Country: REDACTED
+Tech Phone: REDACTED
+Tech Phone Ext: REDACTED
+Tech Fax: REDACTED
+Tech Fax Ext: REDACTED
+Tech Email: REDACTED
+Name Server: a0.nic.aero
+Name Server: b0.nic.aero
+Name Server: c0.nic.aero
+Name Server: a2.nic.aero
+Name Server: b2.nic.aero
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form: https://icann.org/wicf/
+>>> Last update of WHOIS database: 2025-11-30T17:09:54Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+Terms of Use: Access to WHOIS information is provided to assist persons in determining the contents of a domain name registration record in the registry database. The data in this record is provided by Identity Digital or the Registry Operator for informational purposes only, and accuracy is not guaranteed. This service is intended only for query-based access. You agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data to (a) allow, enable, or otherwise support the transmission by e-mail, telephone, or facsimile of mass unsolicited, commercial advertising or solicitations to entities other than the data recipient's own existing customers; or (b) enable high volume, automated, electronic processes that send queries or data to the systems of Registry Operator, a Registrar, or Identity Digital except as reasonably necessary to register domain names or modify existing registrations. When using the Whois service, please consider the following: The Whois service is not a replacement for standard EPP commands to the SRS service. Whois is not considered authoritative for registered domain objects. The Whois service may be scheduled for downtime during production or OT&E maintenance periods. Queries to the Whois services are throttled. If too many queries are received from a single IP address within a specified time, the service will begin to reject further queries for a period of time to prevent disruption of Whois service access. Abuse of the Whois system through data mining is mitigated by detecting and limiting bulk query access from single sources. Where applicable, the presence of a [Non-Public Data] tag indicates that such data is not made publicly available due to applicable data privacy laws or requirements. Should you wish to contact the registrant, please refer to the Whois records available through the registrar URL listed above. Access to non-public data may be provided, upon request, where it can be reasonably confirmed that the requester holds a specific legitimate interest and a proper legal basis for accessing the withheld data. Access to this data provided by Identity Digital can be requested by submitting a request via the form found at https://www.identity.digital/about/policies/whois-layered-access/. The Registrar of Record identified in this output may have an RDDS service that can be queried for additional information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. Identity Digital Inc. and Registry Operator reserve the right to modify these terms at any time. By submitting this query, you agree to abide by this policy.
\ No newline at end of file
diff --git a/tests/fixtures/nic.ag.txt b/tests/fixtures/nic.ag.txt
new file mode 100644
index 00000000..16b44f32
--- /dev/null
+++ b/tests/fixtures/nic.ag.txt
@@ -0,0 +1,62 @@
+Domain Name: nic.ag
+Registry Domain ID: REDACTED
+Registrar WHOIS Server:
+Registrar URL:
+Updated Date: 2025-06-16T04:00:31Z
+Creation Date: 1998-05-02T04:00:00Z
+Registry Expiry Date: 2026-05-02T04:00:00Z
+Registrar: NicAg Registrar
+Registrar IANA ID: 800117
+Registrar Abuse Contact Email:
+Registrar Abuse Contact Phone:
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Registry Registrant ID: REDACTED
+Registrant Name: REDACTED
+Registrant Organization: Nic AG LLC
+Registrant Street: REDACTED
+Registrant City: REDACTED
+Registrant State/Province: FL
+Registrant Postal Code: REDACTED
+Registrant Country: US
+Registrant Phone: REDACTED
+Registrant Phone Ext: REDACTED
+Registrant Fax: REDACTED
+Registrant Fax Ext: REDACTED
+Registrant Email: REDACTED
+Registry Admin ID: REDACTED
+Admin Name: REDACTED
+Admin Organization: REDACTED
+Admin Street: REDACTED
+Admin City: REDACTED
+Admin State/Province: REDACTED
+Admin Postal Code: REDACTED
+Admin Country: REDACTED
+Admin Phone: REDACTED
+Admin Phone Ext: REDACTED
+Admin Fax: REDACTED
+Admin Fax Ext: REDACTED
+Admin Email: REDACTED
+Registry Tech ID: REDACTED
+Tech Name: REDACTED
+Tech Organization: REDACTED
+Tech Street: REDACTED
+Tech City: REDACTED
+Tech State/Province: REDACTED
+Tech Postal Code: REDACTED
+Tech Country: REDACTED
+Tech Phone: REDACTED
+Tech Phone Ext: REDACTED
+Tech Fax: REDACTED
+Tech Fax Ext: REDACTED
+Tech Email: REDACTED
+Name Server: ns01.nic.ag
+Name Server: ns02.nic.ag
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form: https://icann.org/wicf/
+>>> Last update of WHOIS database: 2025-12-08T10:39:08Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+Terms of Use: Access to WHOIS information is provided to assist persons in determining the contents of a domain name registration record in the registry database. The data in this record is provided by Identity Digital or the Registry Operator for informational purposes only, and accuracy is not guaranteed. This service is intended only for query-based access. You agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data to (a) allow, enable, or otherwise support the transmission by e-mail, telephone, or facsimile of mass unsolicited, commercial advertising or solicitations to entities other than the data recipient's own existing customers; or (b) enable high volume, automated, electronic processes that send queries or data to the systems of Registry Operator, a Registrar, or Identity Digital except as reasonably necessary to register domain names or modify existing registrations. When using the Whois service, please consider the following: The Whois service is not a replacement for standard EPP commands to the SRS service. Whois is not considered authoritative for registered domain objects. The Whois service may be scheduled for downtime during production or OT&E maintenance periods. Queries to the Whois services are throttled. If too many queries are received from a single IP address within a specified time, the service will begin to reject further queries for a period of time to prevent disruption of Whois service access. Abuse of the Whois system through data mining is mitigated by detecting and limiting bulk query access from single sources. Where applicable, the presence of a [Non-Public Data] tag indicates that such data is not made publicly available due to applicable data privacy laws or requirements. Should you wish to contact the registrant, please refer to the Whois records available through the registrar URL listed above. Access to non-public data may be provided, upon request, where it can be reasonably confirmed that the requester holds a specific legitimate interest and a proper legal basis for accessing the withheld data. Access to this data provided by Identity Digital can be requested by submitting a request via the form found at https://www.identity.digital/about/policies/whois-layered-access/. The Registrar of Record identified in this output may have an RDDS service that can be queried for additional information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. Identity Digital Inc. and Registry Operator reserve the right to modify these terms at any time. By submitting this query, you agree to abide by this policy.
\ No newline at end of file
diff --git a/tests/fixtures/nic.asia.txt b/tests/fixtures/nic.asia.txt
new file mode 100644
index 00000000..121db8af
--- /dev/null
+++ b/tests/fixtures/nic.asia.txt
@@ -0,0 +1,66 @@
+This domain is protected by the Registry Lock service. If you are the registrant and wish to take action on this lock, please contact your registrar.
+
+Domain Name: nic.asia
+Registry Domain ID: REDACTED
+Registrar WHOIS Server: whois.identitydigital.services
+Registrar URL: https://identity.digital
+Updated Date: 2025-04-14T17:10:52Z
+Creation Date: 2020-02-28T17:10:40Z
+Registry Expiry Date: 2026-02-28T17:10:40Z
+Registrar: Registry Operator acts as Registrar (9999)
+Registrar IANA ID: 9999
+Registrar Abuse Contact Email: abuse@identity.digital
+Registrar Abuse Contact Phone: +1.6664447777
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Registry Registrant ID: REDACTED
+Registrant Name: REDACTED
+Registrant Organization: DotAsia Organisation Limited
+Registrant Street: REDACTED
+Registrant City: REDACTED
+Registrant State/Province: Other
+Registrant Postal Code: REDACTED
+Registrant Country: HK
+Registrant Phone: REDACTED
+Registrant Phone Ext: REDACTED
+Registrant Fax: REDACTED
+Registrant Fax Ext: REDACTED
+Registrant Email: REDACTED
+Registry Admin ID: REDACTED
+Admin Name: REDACTED
+Admin Organization: REDACTED
+Admin Street: REDACTED
+Admin City: REDACTED
+Admin State/Province: REDACTED
+Admin Postal Code: REDACTED
+Admin Country: REDACTED
+Admin Phone: REDACTED
+Admin Phone Ext: REDACTED
+Admin Fax: REDACTED
+Admin Fax Ext: REDACTED
+Admin Email: REDACTED
+Registry Tech ID: REDACTED
+Tech Name: REDACTED
+Tech Organization: REDACTED
+Tech Street: REDACTED
+Tech City: REDACTED
+Tech State/Province: REDACTED
+Tech Postal Code: REDACTED
+Tech Country: REDACTED
+Tech Phone: REDACTED
+Tech Phone Ext: REDACTED
+Tech Fax: REDACTED
+Tech Fax Ext: REDACTED
+Tech Email: REDACTED
+Name Server: a0.dig.afilias-nst.info
+Name Server: d0.dig.afilias-nst.info
+Name Server: c0.dig.afilias-nst.info
+Name Server: b0.dig.afilias-nst.info
+DNSSEC: signedDelegation
+URL of the ICANN Whois Inaccuracy Complaint Form: https://icann.org/wicf/
+>>> Last update of WHOIS database: 2025-11-30T17:09:56Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+Terms of Use: Access to WHOIS information is provided to assist persons in determining the contents of a domain name registration record in the registry database. The data in this record is provided by Identity Digital or the Registry Operator for informational purposes only, and accuracy is not guaranteed. This service is intended only for query-based access. You agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data to (a) allow, enable, or otherwise support the transmission by e-mail, telephone, or facsimile of mass unsolicited, commercial advertising or solicitations to entities other than the data recipient's own existing customers; or (b) enable high volume, automated, electronic processes that send queries or data to the systems of Registry Operator, a Registrar, or Identity Digital except as reasonably necessary to register domain names or modify existing registrations. When using the Whois service, please consider the following: The Whois service is not a replacement for standard EPP commands to the SRS service. Whois is not considered authoritative for registered domain objects. The Whois service may be scheduled for downtime during production or OT&E maintenance periods. Queries to the Whois services are throttled. If too many queries are received from a single IP address within a specified time, the service will begin to reject further queries for a period of time to prevent disruption of Whois service access. Abuse of the Whois system through data mining is mitigated by detecting and limiting bulk query access from single sources. Where applicable, the presence of a [Non-Public Data] tag indicates that such data is not made publicly available due to applicable data privacy laws or requirements. Should you wish to contact the registrant, please refer to the Whois records available through the registrar URL listed above. Access to non-public data may be provided, upon request, where it can be reasonably confirmed that the requester holds a specific legitimate interest and a proper legal basis for accessing the withheld data. Access to this data provided by Identity Digital can be requested by submitting a request via the form found at https://www.identity.digital/about/policies/whois-layered-access/. The Registrar of Record identified in this output may have an RDDS service that can be queried for additional information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. Identity Digital Inc. and Registry Operator reserve the right to modify these terms at any time. By submitting this query, you agree to abide by this policy.
\ No newline at end of file
diff --git a/tests/fixtures/nic.at.txt b/tests/fixtures/nic.at.txt
new file mode 100644
index 00000000..f97c56d2
--- /dev/null
+++ b/tests/fixtures/nic.at.txt
@@ -0,0 +1,74 @@
+% Copyright (c)2025 by NIC.AT (1)
+%
+% Restricted rights.
+%
+% Except for agreed Internet operational purposes, no part of this
+% information may be reproduced, stored in a retrieval system, or
+% transmitted, in any form or by any means, electronic, mechanical,
+% recording, or otherwise, without prior permission of NIC.AT on behalf
+% of itself and/or the copyright holders. Any use of this material to
+% target advertising or similar activities is explicitly forbidden and
+% can be prosecuted.
+%
+% It is furthermore strictly forbidden to use the Whois-Database in such
+% a way that jeopardizes or could jeopardize the stability of the
+% technical systems of NIC.AT under any circumstances. In particular,
+% this includes any misuse of the Whois-Database and any use of the
+% Whois-Database which disturbs its operation.
+%
+% Should the user violate these points, NIC.AT reserves the right to
+% deactivate the Whois-Database entirely or partly for the user.
+% Moreover, the user shall be held liable for any and all damage
+% arising from a violation of these points.
+
+domain: nic.at
+registrar:
+registrant: NG8867695-NICAT
+tech-c: UH567003-NICAT
+nserver: ns1.nic.at
+remarks: 192.174.68.98
+nserver: ns1.nic.at
+remarks: 2001:67c:1bc::98
+nserver: ns10.univie.ac.at
+nserver: ns2.nic.at
+remarks: 176.97.158.98
+nserver: ns2.nic.at
+remarks: 2001:67c:10b8::98
+nserver: ns5.nic.at
+remarks: 194.58.198.32
+nserver: ns5.nic.at
+remarks: 2a01:3f1:3032::53
+nserver: ns5.univie.ac.at
+changed: 20200427 16:03:40
+DNSSEC: Signed
+DS key tag 1: 53116
+algorithm 1: 13
+digest type 1: 2
+digest 1: ad2d103749d7915a92d5b2eba79db8e01fc41b2452f9bb9930b2649c70eb39fe
+source: AT-DOM
+
+personname:
+organization: NIC.AT GmbH
+street address: Jakob-Haringerstrasse 8
+postal code: A-5020
+city: Salzburg
+country: Austria
+phone: +4366246690
+fax-no: +43662466929
+e-mail: service@nic.at
+nic-hdl: NG8867695-NICAT
+changed: 20121116 16:58:21
+source: AT-DOM
+
+personname: UNIVIE Hostmaster
+organization:
+street address: Universitaetsstrasse 7
+postal code: A-1010
+city: Vienna
+country: Austria
+phone: +431427714277
+fax-no: +431427714279
+e-mail: domain-admin@univie.ac.at
+nic-hdl: UH567003-NICAT
+changed: 20100625 15:57:11
+source: AT-DOM
diff --git a/tests/fixtures/nic.be.txt b/tests/fixtures/nic.be.txt
new file mode 100644
index 00000000..b4debed6
--- /dev/null
+++ b/tests/fixtures/nic.be.txt
@@ -0,0 +1,63 @@
+% .be Whois Server 6.1
+%
+% The WHOIS service offered by DNS Belgium and the access to the records in the DNS Belgium
+% WHOIS database are provided for information purposes only. It allows
+% persons to check whether a specific domain name is still available or not
+% and to obtain information related to the registration records of
+% existing domain names.
+%
+% DNS Belgium cannot, under any circumstances, be held liable where the stored
+% information would prove to be incomplete or inaccurate in any sense.
+%
+% By submitting a query you agree not to use the information made available
+% to:
+% - allow, enable or otherwise support the transmission of unsolicited,
+% commercial advertising or other solicitations whether via email or otherwise;
+% - target advertising in any possible way;
+% - to cause nuisance in any possible way to the domain name holders by sending
+% messages to them (whether by automated, electronic processes capable of
+% enabling high volumes or other possible means).
+%
+% Without prejudice to the above, it is explicitly forbidden to extract, copy
+% and/or use or re-utilise in any form and by any means (electronically or
+% not) the whole or a quantitatively or qualitatively substantial part
+% of the contents of the WHOIS database without prior and explicit permission
+% by DNS Belgium, nor in any attempt thereof, to apply automated, electronic
+% processes to DNS Belgium (or its systems).
+%
+% You agree that any reproduction and/or transmission of data for commercial
+% purposes will always be considered as the extraction of a substantial
+% part of the content of the WHOIS database.
+%
+% By submitting the query you agree to abide by this policy and accept that
+% DNS Belgium can take measures to limit the use of its whois services in order to
+% protect the privacy of its registrants or the integrity of the database.
+%
+
+Domain: nic.be
+Status: NOT AVAILABLE
+Registered: Wed Apr 1 1998
+
+Registrant:
+ Not shown, please visit www.dnsbelgium.be for webbased whois.
+
+Registrar Technical Contacts:
+ Organisation: Telenet BV
+ Language: nl
+ Phone: +32.93269094
+
+
+Registrar:
+ Name: Telenet BV
+ Website: https://www2.telenet.be/nl/business/producten-diensten/hosting-cloud/domeinnamen/
+
+Nameservers:
+ ns3.combell.net
+ ns4.combell.net
+
+Keys:
+
+Flags:
+ clientTransferProhibited
+
+Please visit www.dnsbelgium.be for more info.
\ No newline at end of file
diff --git a/tests/fixtures/nic.bh.txt b/tests/fixtures/nic.bh.txt
new file mode 100644
index 00000000..c629eb87
--- /dev/null
+++ b/tests/fixtures/nic.bh.txt
@@ -0,0 +1,63 @@
+Domain Name: NIC.BH
+Registry Domain ID: D101705159-CNIC
+Registrar WHOIS Server: whois.centralnic.com
+Registrar URL: https://www.centralnic.com/
+Updated Date: 2023-08-31T16:51:44.0Z
+Creation Date: 2019-04-24T20:31:13.0Z
+Registry Expiry Date: 2029-04-24T23:59:59.0Z
+Registrar: CentralNic Ltd
+Registrar IANA ID: 9999
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverRenewProhibited https://icann.org/epp#serverRenewProhibited
+Registrant Name: Domain Administrator
+Registrant Organization: CentralNic Ltd
+Registrant Street: 35-39 Moorgate
+Registrant City: London
+Registrant State/Province:
+Registrant Postal Code: EC2R 6AR
+Registrant Country: GB
+Registrant Phone: +44.2033880600
+Registrant Fax: +44.2033880601
+Registrant Email: domains@centralnic.com
+Tech Name: Domain Administrator
+Tech Organization: CentralNic Ltd
+Tech Street: 35-39 Moorgate
+Tech City: London
+Tech State/Province:
+Tech Postal Code: EC2R 6AR
+Tech Country: GB
+Tech Phone: +44.2033880600
+Tech Fax: +44.2033880601
+Tech Email: domains@centralnic.com
+Name Server: A.NIC.BH
+Name Server: B.NIC.BH
+Name Server: C.NIC.BH
+Name Server: D.NIC.BH
+DNSSEC: unsigned
+Registrar Abuse Contact Email: ops@centralnic.com
+Registrar Abuse Contact Phone: +44.2033880600
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2025-12-08T10:39:15.0Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+>>> IMPORTANT INFORMATION ABOUT THE DEPLOYMENT OF RDAP: please visit
+https://www.centralnicregistry.com/support/information/rdap <<<
+
+The registration data available in this service is limited. Additional
+data may be available at https://lookup.icann.org
+
+The Whois and RDAP services are provided by CentralNic, and contain
+information pertaining to Internet domain names registered by our
+our customers. By using this service you are agreeing (1) not to use any
+information presented here for any purpose other than determining
+ownership of domain names, (2) not to store or reproduce this data in
+any way, (3) not to use any high-volume, automated, electronic processes
+to obtain data from this service. Abuse of this service is monitored and
+actions in contravention of these terms will result in being permanently
+blacklisted. All data is (c) CentralNic Ltd (https://www.centralnicregistry.com)
+
+Access to the Whois and RDAP services is rate limited. For more
+information, visit https://centralnicregistry.com/policies/whois-guidance.
\ No newline at end of file
diff --git a/tests/fixtures/nic.co.txt b/tests/fixtures/nic.co.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/fixtures/nic.coop.txt b/tests/fixtures/nic.coop.txt
new file mode 100644
index 00000000..ec3f7cae
--- /dev/null
+++ b/tests/fixtures/nic.coop.txt
@@ -0,0 +1,60 @@
+Domain Name: nic.coop
+Registry Domain ID: DO_59f76c35d72c849fba8b632e12102b0d-COOP
+Registrar WHOIS Server: whois.registry.coop
+Registrar URL: https://identity.coop
+Updated Date: 2024-02-26T19:59:18.927Z
+Creation Date: 2022-11-07T19:55:44.638Z
+Registry Expiry Date: 2032-11-07T19:55:44.638Z
+Registrar: DotCoop
+Registrar IANA ID: 9999
+Registrar Abuse Contact Email: info+whois@registry.coop
+Registrar Abuse Contact Phone: +44.1865403136
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Registry Registrant ID: REDACTED FOR PRIVACY
+Registrant Name: REDACTED FOR PRIVACY
+Registrant Organization: DootCoop
+Registrant Street: REDACTED FOR PRIVACY
+Registrant City: REDACTED FOR PRIVACY
+Registrant State/Province: Oxford
+Registrant Postal Code: REDACTED FOR PRIVACY
+Registrant Country: GB
+Registrant Phone: REDACTED FOR PRIVACY
+Registrant Fax: REDACTED FOR PRIVACY
+Registrant Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Name Server: ns03.trs-dns.com
+Name Server: ns03.trs-dns.net
+DNSSEC: signedDelegation
+URL of the ICANN RDDS Inaccuracy Complaint Form: https://icann.org/wicf
+
+>>> Last update of WHOIS database: 2025-11-30T17:10:02.693Z <<<
+
+For more information on domain status codes, please visit https://icann.org/epp
+
+The WHOIS information provided in this page has been redacted
+in compliance with ICANN's Temporary Specification for gTLD
+Registration Data.
+
+The data in this record is provided by Tucows Registry for informational
+purposes only, and it does not guarantee its accuracy. Tucows Registry is
+authoritative for whois information in top-level domains it operates
+under contract with the Internet Corporation for Assigned Names and
+Numbers. Whois information from other top-level domains is provided by
+a third-party under license to Tucows Registry.
+
+This service is intended only for query-based access. By using this
+service, you agree that you will use any data presented only for lawful
+purposes and that, under no circumstances will you use (a) data
+acquired for the purpose of allowing, enabling, or otherwise supporting
+the transmission by e-mail, telephone, facsimile or other
+communications mechanism of mass unsolicited, commercial advertising
+or solicitations to entities other than your existing customers; or
+(b) this service to enable high volume, automated, electronic processes
+that send queries or data to the systems of any Registrar or any
+Registry except as reasonably necessary to register domain names or
+modify existing domain name registrations.
+
+Tucows Registry reserves the right to modify these terms at any time. By
+submitting this query, you agree to abide by this policy. All rights
+reserved.
\ No newline at end of file
diff --git a/tests/fixtures/nic.cz.txt b/tests/fixtures/nic.cz.txt
new file mode 100644
index 00000000..0ddeec52
--- /dev/null
+++ b/tests/fixtures/nic.cz.txt
@@ -0,0 +1,88 @@
+% (c) 2006-2021 CZ.NIC, z.s.p.o.
+%
+% Intended use of supplied data and information
+%
+% Data contained in the domain name register, as well as information
+% supplied through public information services of CZ.NIC association,
+% are appointed only for purposes connected with Internet network
+% administration and operation, or for the purpose of legal or other
+% similar proceedings, in process as regards a matter connected
+% particularly with holding and using a concrete domain name.
+%
+% Full text available at:
+% http://www.nic.cz/page/306/intended-use-of-supplied-data-and-information/
+%
+% See also a search service at http://www.nic.cz/whois/
+%
+%
+% Whoisd Server Version: 3.15.0
+% Timestamp: Mon Dec 08 11:39:27 2025
+
+domain: nic.cz
+registrant: CZ-NIC
+admin-c: FEELA
+admin-c: MAPET
+nsset: CZ.NIC
+keyset: AUTO-ZHHWRIDCGH9F46ZDG2K2VC284
+registrar: REG-CZNIC
+status: Sponsoring registrar change forbidden
+registered: 30.10.1997 01:00:00
+changed: 17.11.2020 14:25:52
+expire: 15.03.2027
+
+contact: CZ-NIC
+org: CZ.NIC, z.s.p.o.
+name: CZ.NIC, z.s.p.o.
+address: Milesovska 1136/5
+address: Praha 3
+address: 130 00
+address: CZ
+registrar: REG-CZNIC
+created: 17.10.2008 12:08:21
+changed: 15.05.2018 21:32:00
+
+contact: FEELA
+name: Ondřej Filip
+registrar: REG-MOJEID
+created: 04.01.2005 13:35:00
+changed: 06.12.2025 15:00:04
+
+contact: MAPET
+name: Martin Peterka
+registrar: REG-MOJEID
+created: 06.03.2002 18:11:00
+changed: 07.04.2025 16:33:55
+
+nsset: CZ.NIC
+nserver: d.ns.nic.cz (193.29.206.1, 2001:678:1::1)
+nserver: a.ns.nic.cz (194.0.12.1, 2001:678:f::1)
+nserver: b.ns.nic.cz (194.0.13.1, 2001:678:10::1)
+tech-c: JTALIR
+registrar: REG-CZNIC
+created: 09.06.2008 14:30:16
+changed: 11.12.2024 12:23:18
+
+contact: JTALIR
+name: Jaromír Talíř
+registrar: REG-MOJEID
+created: 26.10.2010 10:53:34
+changed: 22.01.2025 18:56:06
+
+keyset: AUTO-ZHHWRIDCGH9F46ZDG2K2VC284
+dnskey: 257 3 13 f2hk4mhAPz0mPCOAuX7PxC0et4JVPhthlO7jiRXF8qkRMksnilBYb6k5wEYZMLfOw8+GKP1BfitEoTD04ijZfQ==
+tech-c: CZNIC-AKM
+registrar: REG-CZNIC
+created: 17.11.2020 14:25:52
+changed: 30.10.2025 22:40:53
+
+contact: CZNIC-AKM
+org: CZ.NIC, z.s.p.o.
+name: CZ.NIC, z.s.p.o.
+address: Milesovska 1136/5
+address: Praha 3
+address: 13000
+address: CZ
+registrar: REG-CZNIC
+created: 12.08.2024 15:02:38
+
+
\ No newline at end of file
diff --git a/tests/fixtures/nic.de.txt b/tests/fixtures/nic.de.txt
new file mode 100644
index 00000000..f6f1e175
--- /dev/null
+++ b/tests/fixtures/nic.de.txt
@@ -0,0 +1,25 @@
+% Restricted rights.
+%
+% Terms and Conditions of Use
+%
+% The above data may only be used within the scope of technical or
+% administrative necessities of Internet operation or to remedy legal
+% problems.
+% The use for other purposes, in particular for advertising, is not permitted.
+%
+% The DENIC whois service on port 43 doesn't disclose any information concerning
+% the domain holder, general request and abuse contact.
+% This information can be obtained through use of our web-based whois service
+% available at the DENIC website:
+% http://www.denic.de/en/domains/whois-service/web-whois.html
+%
+%
+
+Domain: nic.de
+Nserver: ns1.denic.de
+Nserver: ns2.denic.de
+Nserver: ns3.denic.de
+Nserver: ns4.denic.net
+Dnskey: 257 3 8 AwEAAb/xrM2MD+xm84YNYby6TxkMaC6PtzF2bB9WBB7ux7iqzhViob4GKvQ6L7CkXjyAxfKbTzrdvXoAPpsAPW4pkThReDAVp3QxvUKrkBM8/uWRF3wpaUoPsAHm1dbcL9aiW3lqlLMZjDEwDfU6lxLcPg9d14fq4dc44FvPx6aYcymkgJoYvR6P1wECpxqlEAR2K1cvMtqCqvVESBQV/EUtWiALNuwR2PbhwtBWJd+e8BdFI7OLkit4uYYux6Yu35uyGQ==
+Status: connect
+Changed: 2020-05-28T14:29:55+02:00
\ No newline at end of file
diff --git a/tests/fixtures/nic.fr.txt b/tests/fixtures/nic.fr.txt
new file mode 100644
index 00000000..73fc68d4
--- /dev/null
+++ b/tests/fixtures/nic.fr.txt
@@ -0,0 +1,132 @@
+%%
+%% This is the AFNIC Whois server.
+%%
+%% complete date format: YYYY-MM-DDThh:mm:ssZ
+%%
+%% Rights restricted by copyright.
+%% See https://www.afnic.fr/en/domain-names-and-support/everything-there-is-to-know-about-domain-names/find-a-domain-name-or-a-holder-using-whois/
+%%
+%%
+
+domain: nic.fr
+status: ACTIVE
+eppstatus: serverTransferProhibited
+eppstatus: serverDeleteProhibited
+hold: NO
+holder-c: NF100-FRNIC
+admin-c: AFNI30-FRNIC
+tech-c: JP-FRNIC
+tech-c: VL-FRNIC
+registrar: Registry Operations
+Expiry Date: 2029-12-31T23:00:00Z
+created: 1995-01-01T00:00:00Z
+last-update: 2024-07-18T15:54:26.801766Z
+source: FRNIC
+
+nserver: ns1.ext.nic.fr
+nserver: ns4.nic.fr
+nserver: ns6.ext.nic.fr
+nserver: ns7.ext.nic.fr
+source: FRNIC
+
+key1-tag: 32674
+key1-algo: 13 [ECDSAP256SHA256]
+key1-dgst-t: 2 [SHA256]
+key1-dgst: 7CDE447E0FBBB921BC94B47A8D553D2DAB0F8B1B170F894C35D43A8A6E24F855
+source: FRNIC
+
+registrar: Registry Operations
+address: AFNIC
+address: immeuble le Stephenson
+address: 1, rue Stephenson
+address: 78180 Montigny-Le-Bretonneux
+country: FR
+phone: +33.139308300
+fax-no: +33.139308301
+e-mail: support@afnic.fr
+website: https://www.afnic.fr
+anonymous: No
+registered: 2014-07-29T15:35:33Z
+source: FRNIC
+
+nic-hdl: NF100-FRNIC
+type: ORGANIZATION
+contact: AFNIC
+address: 7, avenue du 8 mai 1945
+address: 78280 Guyancourt
+country: FR
+phone: +33.139308300
+fax-no: +33.139308301
+e-mail: juridique@afnic.fr
+registrar: Registry Operations
+anonymous: NO
+obsoleted: NO
+eppstatus: associated
+eppstatus: active
+eligstatus: ok
+eligdate: 2014-12-11T00:00:00Z
+reachstatus: ok
+reachmedia: email
+source: FRNIC
+
+nic-hdl: AFNI30-FRNIC
+type: ORGANIZATION
+contact: ASS FRANC NOMMAGE INTERNET EN COOP
+address: Association Française pour le Nommage Internet en Coopération
+address: 7, avenue du 8 mai 1945
+address: 78280 Guyancourt
+country: FR
+phone: +33.139308300
+fax-no: +33.139308301
+e-mail: contact@nic.fr
+registrar: Registry Operations
+changed: 2024-04-11T13:45:52.051456Z
+anonymous: NO
+obsoleted: NO
+eppstatus: associated
+eppstatus: active
+eligstatus: not identified
+reachstatus: not identified
+source: FRNIC
+
+nic-hdl: JP-FRNIC
+type: PERSON
+contact: Jean-Philippe Pick
+address: AFNIC
+address: 7, avenue du 8 mai 1945
+address: 78280 Guyancourt
+country: FR
+phone: +33.139308300
+e-mail: nic@nic.fr
+registrar: Registry Operations
+changed: 2024-03-11T13:40:40.034968Z
+anonymous: NO
+obsoleted: NO
+eppstatus: associated
+eppstatus: active
+eligstatus: not identified
+reachstatus: not identified
+source: FRNIC
+
+nic-hdl: VL-FRNIC
+type: PERSON
+contact: Vincent Levigneron
+address: AFNIC
+address: 7, avenue du 8 mai 1945
+address: 78280 Guyancourt
+country: FR
+phone: +33.139308300
+fax-no: +33.139308301
+e-mail: vincent.levigneron@afnic.fr
+registrar: Registry Operations
+changed: 2024-03-11T13:31:44.500207Z
+anonymous: NO
+obsoleted: NO
+eppstatus: associated
+eppstatus: active
+eligstatus: not identified
+reachstatus: not identified
+source: FRNIC
+
+>>> Last update of WHOIS database: 2025-11-30T17:08:22.091816Z <<<
+
\ No newline at end of file
diff --git a/tests/fixtures/nic.hu.txt b/tests/fixtures/nic.hu.txt
new file mode 100644
index 00000000..c443b1c5
--- /dev/null
+++ b/tests/fixtures/nic.hu.txt
@@ -0,0 +1,10 @@
+% Whois server 4.0 serving the hu ccTLD
+
+
+domain: nic.hu
+record created: 1996-06-27
+Tovabbi adatokert ld.:
+https://www.domain.hu/domain-kereses/
+For further data see:
+https://www.domain.hu/domain-search/
+
\ No newline at end of file
diff --git a/tests/fixtures/nic.it.txt b/tests/fixtures/nic.it.txt
new file mode 100644
index 00000000..aac9b4df
--- /dev/null
+++ b/tests/fixtures/nic.it.txt
@@ -0,0 +1,62 @@
+
+*********************************************************************
+* Please note that the following result could be a subgroup of *
+* the data contained in the database. *
+* *
+* Additional information can be visualized at: *
+* http://web-whois.nic.it *
+*********************************************************************
+
+Domain: nic.it
+Status: ok
+Signed: yes
+Created: 1997-08-27 00:00:00
+Last Update: 2025-11-26 13:46:19
+Expire Date: 2025-12-31
+
+Registrant
+ Organization: ccTLD '.it' Registry - IIT/CNR
+ Address: Via Giuseppe Moruzzi 1
+ Pisa
+ 56124
+ PI
+ IT
+ Created: 2007-03-01 10:26:04
+ Last Update: 2013-01-17 16:43:35
+
+Admin Contact
+ Name: Andrea Passarella
+ Organization: Istituto di Informatica e Telematica del CNR - ccTLD ".it" Registry
+ Address: Via Giuseppe Moruzzi, 1
+ Pisa
+ 56124
+ PI
+ IT
+ Created: 2024-09-16 16:01:21
+ Last Update: 2024-09-16 16:01:21
+
+Technical Contacts
+ Name: Maurizio Martinelli
+ Organization: Istituto di Informatica e Telematica del CNR - ccTLD ".it" Registry
+ Address: Via Giuseppe Moruzzi, 1
+ Pisa
+ 56124
+ PI
+ IT
+ Created: 1998-04-14 00:00:00
+ Last Update: 2013-01-17 16:43:35
+
+Registrar
+ Organization: ccTLD 'it' Registry
+ Name: REGISTRY-REG
+ Web: http://www.registro.it
+ DNSSEC: yes
+
+
+Nameservers
+ dns.nic.it
+ a.dns.it
+ v.dns.it
+ nameserver.cnr.it
+ m.dns.it
+ r.dns.it
diff --git a/tests/fixtures/nic.li.txt b/tests/fixtures/nic.li.txt
new file mode 100644
index 00000000..95fcb23f
--- /dev/null
+++ b/tests/fixtures/nic.li.txt
@@ -0,0 +1 @@
+Requests of this client are not permitted. Please use https://www.nic.ch/whois/ for queries.
diff --git a/tests/fixtures/nic.london.txt b/tests/fixtures/nic.london.txt
new file mode 100644
index 00000000..1cd8a810
--- /dev/null
+++ b/tests/fixtures/nic.london.txt
@@ -0,0 +1,84 @@
+Connecting to LONDON.whois-servers.net...
+
+WHOIS Server:
+Registrar URL: http://www.nic.london
+Updated Date: 2020-02-25T14:43:03Z
+Creation Date: 2014-02-25T14:42:32Z
+Registry Expiry Date: 2021-02-25T14:42:33Z
+Registrar: M+M Registry Admin
+Registrar IANA ID: 9999
+Registrar Abuse Contact Email: ops@mmx.co
+Registrar Abuse Contact Phone:
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Registry Registrant ID: REDACTED FOR PRIVACY
+Registrant Name: REDACTED FOR PRIVACY
+Registrant Organization: REDACTED FOR PRIVACY
+Registrant Street: REDACTED FOR PRIVACY
+Registrant Street: REDACTED FOR PRIVACY
+Registrant Street: REDACTED FOR PRIVACY
+Registrant City: REDACTED FOR PRIVACY
+Registrant State/Province: London
+Registrant Postal Code: REDACTED FOR PRIVACY
+Registrant Country: GB
+Registrant Phone: REDACTED FOR PRIVACY
+Registrant Fax: REDACTED FOR PRIVACY
+Registrant Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Registry Admin ID: REDACTED FOR PRIVACY
+Admin Name: REDACTED FOR PRIVACY
+Admin Organization: REDACTED FOR PRIVACY
+Admin Street: REDACTED FOR PRIVACY
+Admin Street: REDACTED FOR PRIVACY
+Admin Street: REDACTED FOR PRIVACY
+Admin City: REDACTED FOR PRIVACY
+Admin State/Province: REDACTED FOR PRIVACY
+Admin Postal Code: REDACTED FOR PRIVACY
+Admin Country: REDACTED FOR PRIVACY
+Admin Phone: REDACTED FOR PRIVACY
+Admin Fax: REDACTED FOR PRIVACY
+Admin Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Registry Tech ID: REDACTED FOR PRIVACY
+Tech Name: REDACTED FOR PRIVACY
+Tech Organization: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech City: REDACTED FOR PRIVACY
+Tech State/Province: REDACTED FOR PRIVACY
+Tech Postal Code: REDACTED FOR PRIVACY
+Tech Country: REDACTED FOR PRIVACY
+Tech Phone: REDACTED FOR PRIVACY
+Tech Fax: REDACTED FOR PRIVACY
+Tech Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Registry Billing ID: REDACTED FOR PRIVACY
+Billing Name: REDACTED FOR PRIVACY
+Billing Organization: REDACTED FOR PRIVACY
+Billing Street: REDACTED FOR PRIVACY
+Billing Street: REDACTED FOR PRIVACY
+Billing Street: REDACTED FOR PRIVACY
+Billing City: REDACTED FOR PRIVACY
+Billing State/Province: REDACTED FOR PRIVACY
+Billing Postal Code: REDACTED FOR PRIVACY
+Billing Country: REDACTED FOR PRIVACY
+Billing Phone: REDACTED FOR PRIVACY
+Billing Fax: REDACTED FOR PRIVACY
+Billing Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Name Server: dns1.nic.london.
+Name Server: dns2.nic.london.
+Name Server: dns3.nic.london.
+Name Server: dns4.nic.london.
+Name Server: dnsa.nic.london.
+Name Server: dnsb.nic.london.
+Name Server: dnsc.nic.london.
+Name Server: dnsd.nic.london.
+DNSSEC: signedDelegation
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2020-05-12T23:07:07Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+Terms and Conditions
+The whois information provided on this site is intended to provide you with the relevant contact information for a domain name registrant and the identity of certain administrative and technical contacts associated with that domain name. The data in this record is provided by Minds + Machines Registry, a subsidiary of Minds + Machines Group Limited, formerly Top Level Domain Holdings Limited ("the Company"), for informational purposes only. Accuracy is not guaranteed. The Company is the authoritative source for whois information in top-level domains it operates under contract with the Internet Corporation for Assigned Names and Numbers. This service is intended only for query-based access. Note that the lack of a whois record for a particular domain does not indicate that the name is available for registration. By using this service, you agree that you will use any data presented for lawful purposes only and that under no circumstances will you use (a) data acquired for the purpose of allowing, enabling, or otherwise supporting the transmission by email, telephone, facsimile, or other communications mechanisms mass unsolicited, commercial, advertising, or solicitations to entities other than your existing customers; or (b) this service to enable high volume, automated, electronic processes that send queries or data to the systems of any registrar or any registry except as reasonably necessary to register domain names or to modify existing domain name registrations. The Company reserves the right to modify these terms at any time. By submitting this query, you agree to abide by this policy. All rights reserved.
+
+Connecting to ...
diff --git a/tests/fixtures/nic.ly.txt b/tests/fixtures/nic.ly.txt
new file mode 100644
index 00000000..f08d18c5
--- /dev/null
+++ b/tests/fixtures/nic.ly.txt
@@ -0,0 +1,33 @@
+Domain Name: nic.ly
+Registry Domain ID: 37457-CoCCA
+Updated Date: 2025-11-19T08:06:33Z
+Creation Date: 2006-11-12T22:00:00Z
+Registry Expiry Date: 2035-11-12T22:00:00Z
+Registrar Registration Expiration Date: 2035-11-12T22:00:00Z
+Registrar: LTT local (loc)
+Registrar Street Address: Tripoli
+Registrar Email: domains@nic.ly
+Registrar Abuse Contact Email: domains@nic.ly
+Registrar Abuse Contact Phone: 3400020
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Registry Registrant ID: 39202-CoCCA
+Registrant Name: AbdulNasir A. Al-Tubuly
+Registrant Street: Abu SetaNear Al-Furusia
+Registrant City: Tripoli
+Registrant State/Province:
+Registrant Postal Code:
+Registrant Country: LY
+Registrant Email: hostmaster@ltt.ly
+Registrant Phone: +218.213400020
+Name Server: dns1.lttnet.net
+Name Server: dns.lttnet.net
+DNSSEC: unsigned
+>>> Last update of WHOIS database: 2025-11-30T17:08:48.423Z <<<
+
+For more information on domain status codes, please visit https://icann.org/epp
+
+TERMS OF USE: You are not authorized to access or query our WHOIS database through the use of electronic processes that are high-volume and automated. This WHOIS database is provided by as a service to the internet community.
+
+The data is for information purposes only. We do not guarantee its accuracy. By submitting a WHOIS query, you agree to abide by the following terms of use: You agree that you may use this Data only for lawful purposes and that under no circumstances will you use this Data to: (1) allow, enable, or otherwise support the transmission of mass unsolicited, commercial advertising or solicitations via e-mail, telephone, or facsimile; or (2) enable high volume, automated, electronic processes. The compilation, repackaging, dissemination or other use of this data is expressly prohibited.
+
\ No newline at end of file
diff --git a/tests/fixtures/nic.museum.txt b/tests/fixtures/nic.museum.txt
new file mode 100644
index 00000000..0d20b0ab
--- /dev/null
+++ b/tests/fixtures/nic.museum.txt
@@ -0,0 +1,89 @@
+Domain Name: nic.museum
+Registry Domain ID: DOM000000000002-MUSEUM
+Registrar WHOIS Server: whois.nic.museum
+Registrar URL:
+Updated Date: 2025-03-21T19:23:26.151795Z
+Creation Date: 2005-02-04T19:19:09Z
+Registry Expiry Date: 2026-02-04T19:19:09Z
+Registrar: Registry Operations
+Registrar IANA ID: 9999
+Domain Status: active https://icann.org/epp#active
+Registry Registrant ID: REDACTED_FOR_PRIVACY
+Registrant Name: REDACTED_FOR_PRIVACY
+Registrant Organization: Afnic Backend Registry Operator
+Registrant Contact Status: associated
+Registrant Contact Status: active
+Registrant Street: REDACTED_FOR_PRIVACY, REDACTED_FOR_PRIVACY, REDACTED_FOR_PRIVACY
+Registrant City: REDACTED_FOR_PRIVACY
+Registrant Postal Code: REDACTED_FOR_PRIVACY
+Registrant State/Province: REDACTED_FOR_PRIVACY
+Registrant Country: REDACTED_FOR_PRIVACY
+Registrant Phone: REDACTED_FOR_PRIVACY
+Registrant Fax: REDACTED_FOR_PRIVACY
+Registrant Email: REDACTED_FOR_PRIVACY
+Registry Admin ID: REDACTED_FOR_PRIVACY
+Admin Name: REDACTED_FOR_PRIVACY
+Admin Organization: Afnic Backend Registry Operator
+Admin Contact Status: associated
+Admin Contact Status: active
+Admin Street: REDACTED_FOR_PRIVACY, REDACTED_FOR_PRIVACY, REDACTED_FOR_PRIVACY
+Admin City: REDACTED_FOR_PRIVACY
+Admin Postal Code: REDACTED_FOR_PRIVACY
+Admin State/Province: REDACTED_FOR_PRIVACY
+Admin Country: REDACTED_FOR_PRIVACY
+Admin Phone: REDACTED_FOR_PRIVACY
+Admin Fax: REDACTED_FOR_PRIVACY
+Admin Email: REDACTED_FOR_PRIVACY
+Registry Tech ID: REDACTED_FOR_PRIVACY
+Tech Name: REDACTED_FOR_PRIVACY
+Tech Organization: Afnic Backend Registry Operator
+Tech Contact Status: associated
+Tech Contact Status: active
+Tech Street: REDACTED_FOR_PRIVACY, REDACTED_FOR_PRIVACY, REDACTED_FOR_PRIVACY
+Tech City: REDACTED_FOR_PRIVACY
+Tech Postal Code: REDACTED_FOR_PRIVACY
+Tech State/Province: REDACTED_FOR_PRIVACY
+Tech Country: REDACTED_FOR_PRIVACY
+Tech Phone: REDACTED_FOR_PRIVACY
+Tech Fax: REDACTED_FOR_PRIVACY
+Tech Email: REDACTED_FOR_PRIVACY
+Registry Billing ID: REDACTED_FOR_PRIVACY
+Billing Name: REDACTED_FOR_PRIVACY
+Billing Organization: Afnic Backend Registry Operator
+Billing Contact Status: associated
+Billing Contact Status: active
+Billing Street: REDACTED_FOR_PRIVACY, REDACTED_FOR_PRIVACY, REDACTED_FOR_PRIVACY
+Billing City: REDACTED_FOR_PRIVACY
+Billing Postal Code: REDACTED_FOR_PRIVACY
+Billing State/Province: REDACTED_FOR_PRIVACY
+Billing Country: REDACTED_FOR_PRIVACY
+Billing Phone: REDACTED_FOR_PRIVACY
+Billing Fax: REDACTED_FOR_PRIVACY
+Billing Email: REDACTED_FOR_PRIVACY
+Name Server: g.ext.nic.fr
+Name Server: ns1.nic.fr
+Name Server: ns2.nic.fr
+Name Server: ns3.nic.fr
+DNSSEC: signedDelegation
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2025-11-30T17:10:10.336545Z <<<
+For more information on Whois status codes, please visit https://icann.org/epp
+
+Rights restricted by copyright.
+
+If you wish to access the protected data, please visit our website at the following address: www.welcome.museum
+
+Terms of Use : MuseDoma's database is protected by the provisions of the French Law of the 1st of July 1998
+transposing the European Directive of the 11th of March 1996 on database legal protection in the Intellectual Property Code.
+
+MuseDoma is the only entity to hold the producing rights of the databases as substantial investment, quantitative
+as much as qualitative, that were used to achieve this database.
+Complete or partial reproduction and/or use of MuseDoma's database without the express permission of MuseDoma's is strictly forbidden.
+
+Any breach to these rules can carry penal sanctions as counterfeit, without prejudice of a potential damages request from MuseDoma,
+holder of these rights. MuseDoma's database user commits to use the published data according to the laws
+and rules in effect. Moreover, the user is bound to respect the French Data Protection Law.
+The infringement of the French Data Protection Law can carry penal sanctions. As the user will access personal information,
+the user must refrain from collecting or misuse this information. In a more general way, the user must refrain from any act likely
+to infringe the privacy or reputation of individuals.
+
\ No newline at end of file
diff --git a/tests/fixtures/nic.mx.txt b/tests/fixtures/nic.mx.txt
new file mode 100644
index 00000000..b163f86b
--- /dev/null
+++ b/tests/fixtures/nic.mx.txt
@@ -0,0 +1,91 @@
+
+Domain Name: nic.mx
+
+Created On: 1997-01-15
+Expiration Date: 2026-01-14
+Last Updated On: 2025-03-02
+Registrar: Registry .MX
+URL: http://www.registry.mx
+
+Registrant:
+ Name: Network Information Center, S.A. de C.V.
+ City: Monterrey
+ State: Nuevo Leon
+ Country: Mexico
+
+Administrative Contact:
+ Name: Network Information Center, S.A. de C.V.
+ City: Monterrey
+ State: Nuevo Leon
+ Country: Mexico
+
+Technical Contact:
+ Name: Network Information Center, S.A. de C.V.
+ City: Monterrey
+ State: Nuevo Leon
+ Country: Mexico
+
+Billing Contact:
+ Name: Network Information Center, S.A. de C.V.
+ City: Monterrey
+ State: Nuevo Leon
+ Country: Mexico
+
+Name Servers:
+ DNS: a.nic.mx 2001:1250:a000:0:0:0:0:1, 207.248.65.1
+ DNS: b.nic.mx 2001:1250:b000:0:0:0:0:1, 201.131.250.1
+ DNS: c.nic.mx 2001:1250:c000:0:0:0:0:1, 201.131.248.1
+
+DNSSEC DS Records:
+
+
+% NOTICE: The expiration date displayed in this record is the date the
+% registrar's sponsorship of the domain name registration in the registry is
+% currently set to expire. This date does not necessarily reflect the
+% expiration date of the domain name registrant's agreement with the sponsoring
+% registrar. Users may consult the sponsoring registrar's Whois database to
+% view the registrar's reported date of expiration for this registration.
+
+% The requested information ("Information") is provided only for the delegation
+% of domain names and the operation of the DNS administered by NIC Mexico.
+
+% It is absolutely prohibited to use the Information for other purposes,
+% including sending not requested emails for advertising or promoting products
+% and services purposes (SPAM) without the authorization of the owners of the
+% Information and NIC Mexico.
+
+% The database generated from the delegation system is protected by the
+% intellectual property laws and all international treaties on the matter.
+
+% If you need more information on the records displayed here, please contact us
+% by email at ayuda@nic.mx .
+
+% If you want notify the receipt of SPAM or unauthorized access, please send a
+% email to abuse@nic.mx .
+
+% NOTA: La fecha de expiracion mostrada en esta consulta es la fecha que el
+% registrar tiene contratada para el nombre de dominio en el registry. Esta
+% fecha no necesariamente refleja la fecha de expiracion del nombre de dominio
+% que el registrante tiene contratada con el registrar. Puede consultar la base
+% de datos de Whois del registrar para ver la fecha de expiracion reportada por
+% el registrar para este nombre de dominio.
+
+% La informacion que ha solicitado se provee exclusivamente para fines
+% relacionados con la delegacion de nombres de dominio y la operacion del DNS
+% administrado por NIC Mexico.
+
+% Queda absolutamente prohibido su uso para otros propositos, incluyendo el
+% envio de Correos Electronicos no solicitados con fines publicitarios o de
+% promocion de productos y servicios (SPAM) sin mediar la autorizacion de los
+% afectados y de NIC Mexico.
+
+% La base de datos generada a partir del sistema de delegacion, esta protegida
+% por las leyes de Propiedad Intelectual y todos los tratados internacionales
+% sobre la materia.
+
+% Si necesita mayor informacion sobre los registros aqui mostrados, favor de
+% comunicarse a ayuda@nic.mx.
+
+% Si desea notificar sobre correo no solicitado o accesos no autorizados, favor
+% de enviar su mensaje a abuse@nic.mx.
+
\ No newline at end of file
diff --git a/tests/fixtures/nic.pl.txt b/tests/fixtures/nic.pl.txt
new file mode 100644
index 00000000..7ae4fea5
--- /dev/null
+++ b/tests/fixtures/nic.pl.txt
@@ -0,0 +1,26 @@
+DOMAIN NAME: nic.pl
+registrant type: organization
+nameservers: ns-01.hyperone-dns.com.
+ ns-01.hyperone-dns.net.
+ ns-01.hyperone-dns.pl. [62.181.3.100]
+created: 1998.03.11 12:00:00
+last modified: 2021.02.12 13:35:25
+renewal date: 2026.03.10 13:00:00
+
+option created: 2017.01.31 19:01:09
+option expiration date: 2026.01.31 19:01:09
+
+dnssec: Unsigned
+
+REGISTRAR:
+Warsaw Data Center sp. z o.o.
+ul. Boduena 4
+00-011 Warszawa
+Polska/Poland
+http://www.wdc.pl/domains/
+info@domains.wdc.pl
+
+WHOIS database responses: https://dns.pl/en/whois
+
+WHOIS displays data with a delay not exceeding 15 minutes in relation to the .pl Registry system
+
\ No newline at end of file
diff --git a/tests/fixtures/nic.ru.txt b/tests/fixtures/nic.ru.txt
new file mode 100644
index 00000000..6bf70299
--- /dev/null
+++ b/tests/fixtures/nic.ru.txt
@@ -0,0 +1,19 @@
+% TCI Whois Service. Terms of use:
+% https://tcinet.ru/documents/whois_ru_rf.pdf (in Russian)
+% https://tcinet.ru/documents/whois_su.pdf (in Russian)
+
+domain: NIC.RU
+nserver: ns5.nic.ru. 31.177.67.100, 2a02:2090:e800:9000:31:177:67:100
+nserver: ns6.nic.ru. 31.177.74.100, 2a02:2090:ec00:9040:31:177:74:100
+nserver: ns9.nic.ru. 31.177.85.186, 2a02:2090:e400:7000:31:177:85:186
+state: REGISTERED, DELEGATED, VERIFIED
+org: JSC 'RU-CENTER'
+taxpayer-id: 7733573894
+registrar: RU-CENTER-RU
+admin-contact: https://www.nic.ru/whois
+created: 1997-11-28T06:15:56Z
+paid-till: 2026-11-30T21:00:00Z
+free-date: 2027-01-01
+source: TCI
+
+Last updated on 2025-11-30T17:08:01Z
diff --git a/tests/fixtures/nic.sc.txt b/tests/fixtures/nic.sc.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/fixtures/nic.tel.txt b/tests/fixtures/nic.tel.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/fixtures/nic.ve.txt b/tests/fixtures/nic.ve.txt
new file mode 100644
index 00000000..4c049d9f
--- /dev/null
+++ b/tests/fixtures/nic.ve.txt
@@ -0,0 +1,43 @@
+% Servidor whois del Centro de Información de Red de Venezuela (NIC.VE)
+% Este servidor contiene información autoritativa exclusivamente de dominios .ve
+%
+% Whoisd Server Version: 3.12.1
+% Timestamp: Sun Nov 30 13:09:12 2025
+
+domain: nic.ve
+registrant: CON000031823
+admin-c: CON000031823
+nsset: DNS000114779
+keyset: KEY000000001
+registrar: NIC-VE
+registered: 08.08.2019 18:04:00
+changed: 03.06.2024 14:34:08
+expire: 31.12.2034
+
+contact: CON000031823
+address: Definir Dirección
+address: Caracas
+address: 1012
+address: VE
+registrar: NIC-VE
+created: 04.08.2019 17:18:51
+
+nsset: DNS000114779
+nserver: ns3.nic.ve (190.9.129.56)
+nserver: ns4.nic.ve (190.202.128.43)
+nserver: ns5.nic.ve (45.175.22.88, 2801:18:8800:3:18ba:beff:fe61:d08b)
+nserver: ns6.nic.ve (45.175.22.4, 2801:18:8800:1::4)
+tech-c: CON000031823
+registrar: NIC-VE
+created: 08.08.2019 18:03:59
+changed: 25.09.2019 08:52:41
+
+keyset: KEY000000001
+dnskey: 257 3 8 AwEAAb04w67lcNW2MkTcvAoWoJi8GMllpJ0vl2PM/6L+ZB6M5jMmGsFiz53UGxK8YGBHs0PCaFG1N2RYB/DDv49T0elsTUhRQQRLXSiHRcAvUVtIitBHCnL5ipPU+U3QZiMUrnkRsWQR4Kq/lHTdu6YBJUNCuH9S1NZ54+lE7mm3N1OnUKIvvxet7jAokD0hPvIikAw+MGkV3AgDkQMC+jjnWEpc4bq/vKscIjnRYr9thwwBmZ5todN49yJH1rH07+9nxQ0/j0O8dxweUn9L6dxL6/xdmq3lihfnIOb8YPiqN8q1QIpeCwIvO7TOPRdW71/b/c/Gm2LeKNJtS/oVIPhFJd30UTtQi//EsaZnu5u/eDT96d9wTiiffLiJMZK0tWF0xsuV/VdHUrhDLrZlPW0Wt2dAKTe32F2ZavMUNM+cKzvNSY6ENxmxRrir76oMngfLc8iJ31X+rhSr/8+r8KdzuLLPe7EOqADa2x5Qsh8MDwdDu3aPXJCKlz8J8eFm1hMI3doqyvFfso6sta1Pnzk/USGAcDwFPLPZ+qr+Oj/dWM73PXYiRkF4FUmLgrSaDUUbA4Lo+Q21vrFgcBWdb24xlAKPSRNg9I/zDp6lBD7iTb7119mLRvgdzgn3nN2fBCmCNWaa2d8oJej1BW7hxnaip3F+Hu7sbrPl6yTrDtzZSeFV
+dnskey: 257 3 8 AwEAAd9rDwEcU9hB7p90rseNRKtvvCzNAtD3MXt+LpxboWjM8d6mvOg7plcWOGgbJegnSlSA/wIczF3Pmew7wGMcSVhLOBw5rBReEsUazVWgtT7Us8n3aik/44Ddf1AkrceVCtfg4syjaQtKC8vOY59W3HShS8YFM+RjcJV2J0cEp9jhot7iIQjSbGF+YlOk0+ySA1kVnH60QQ1LnFxWkwGwZLu1zYm37xtIy7Ib1YQT6iL3TCGFNOH1+/nvjWIsYiUNfKu5dVgnVTkIAx2DUGhu9EM+CNyf21Hx01Rf2RNOibphtoasPt0c4Swxvdx/Vc1j9RonlnNufACBl/f8gYGketBEuU75ydKdDt+CjZCQsiNOc55NKK9ZPH5zlP0nGqmpNn1Ojn2XJmFPGfZvDC2Bimgmb4WOqtLzUgCiPmyxy9H3Q/h1NJvGrKRc99uR5KsAxgWBcqXH1L/izOBwPOi+/Fm8XeE2bxNYnh8wFG6XGCDaBG+7hZsB2zARCGrDap5+Ub9gqlOWeAA/mAXK2zCw5zEOp24zNIvSpzkTC2c32Vd9DNUhKntuED+TnC9dIdRaod26cO4Ta44dkI6WZmKGNIzLNUGzY4Fz4emIq41lg0gjtKFNtuyA7rhoR7EXRE9eOAJascJb71Gtn10anOcLhAvxXT2yNV62f2Ei7HsWmnBd
+tech-c: CON000031823
+registrar: NIC-VE
+created: 11.03.2020 11:48:43
+changed: 30.05.2025 13:49:43
+
+
\ No newline at end of file
diff --git a/tests/fixtures/nic.xxx.txt b/tests/fixtures/nic.xxx.txt
new file mode 100644
index 00000000..15948b20
--- /dev/null
+++ b/tests/fixtures/nic.xxx.txt
@@ -0,0 +1,90 @@
+Domain Name: nic.xxx
+Registry Domain ID: REDACTED FOR PRIVACY
+Registrar WHOIS Server: whois.nic.adult
+Registrar URL: http://nic.adult
+Updated Date: 2025-10-14T16:14:56Z
+Creation Date: 2021-04-07T04:58:35Z
+Registry Expiry Date: 2026-04-07T04:58:35Z
+Registrar: ICM Registry LLC
+Registrar IANA ID: 9999
+Registrar Abuse Contact Email: gtld-support@registry.godaddy
+Registrar Abuse Contact Phone: +61.123
+Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+Domain Status: serverRenewProhibited https://icann.org/epp#serverRenewProhibited
+Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+Registry Registrant ID: REDACTED FOR PRIVACY
+Registrant Name: REDACTED FOR PRIVACY
+Registrant Organization: REDACTED FOR PRIVACY
+Registrant Street: REDACTED FOR PRIVACY
+Registrant Street: REDACTED FOR PRIVACY
+Registrant Street: REDACTED FOR PRIVACY
+Registrant City: REDACTED FOR PRIVACY
+Registrant State/Province: REDACTED FOR PRIVACY
+Registrant Postal Code: REDACTED FOR PRIVACY
+Registrant Country: us
+Registrant Phone: REDACTED FOR PRIVACY
+Registrant Phone Ext: REDACTED FOR PRIVACY
+Registrant Fax: REDACTED FOR PRIVACY
+Registrant Fax Ext: REDACTED FOR PRIVACY
+Registrant Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Registry Admin ID:
+Admin Name:
+Admin Organization:
+Admin Street:
+Admin Street:
+Admin Street:
+Admin City:
+Admin State/Province:
+Admin Postal Code:
+Admin Country:
+Admin Phone:
+Admin Phone Ext:
+Admin Fax:
+Admin Fax Ext:
+Admin Email:
+Registry Tech ID: REDACTED FOR PRIVACY
+Tech Name: REDACTED FOR PRIVACY
+Tech Organization: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech City: REDACTED FOR PRIVACY
+Tech State/Province: REDACTED FOR PRIVACY
+Tech Postal Code: REDACTED FOR PRIVACY
+Tech Country: REDACTED FOR PRIVACY
+Tech Phone: REDACTED FOR PRIVACY
+Tech Phone Ext: REDACTED FOR PRIVACY
+Tech Fax: REDACTED FOR PRIVACY
+Tech Fax Ext: REDACTED FOR PRIVACY
+Tech Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Name Server: d.nic.xxx
+Name Server: a.nic.xxx
+Name Server: c.nic.xxx
+Name Server: b.nic.xxx
+DNSSEC: signedDelegation
+URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of WHOIS database: 2025-11-30T17:10:20Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+The Service is provided so that you may look up certain information in relation to domain names that we store in our database.
+
+Use of the Service is subject to our policies, in particular you should familiarise yourself with our Acceptable Use Policy and our Privacy Policy.
+
+The information provided by this Service is 'as is' and we make no guarantee of it its accuracy.
+
+You agree that by your use of the Service you will not use the information provided by us in a way which is:
+* inconsistent with any applicable laws,
+* inconsistent with any policy issued by us,
+* to generate, distribute, or facilitate unsolicited mass email, promotions, advertisings or other solicitations, or
+* to enable high volume, automated, electronic processes that apply to the Service.
+
+You acknowledge that:
+* a response from the Service that a domain name is 'available', does not guarantee that is able to be registered,
+* we may restrict, suspend or terminate your access to the Service at any time, and
+* the copying, compilation, repackaging, dissemination or other use of the information provided by the Service is not permitted, without our express written consent.
+
+This information has been prepared and published in order to represent administrative and technical management of the TLD.
+
+We may discontinue or amend any part or the whole of these Terms of Service from time to time at our absolute discretion.
\ No newline at end of file
diff --git a/tests/fixtures/nicco.com.txt b/tests/fixtures/nicco.com.txt
new file mode 100644
index 00000000..0c784c4a
--- /dev/null
+++ b/tests/fixtures/nicco.com.txt
@@ -0,0 +1,55 @@
+ Domain Name: NICCO.COM
+ Registry Domain ID: 39551198_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.nicco.com
+ Registrar URL: http://www.nicco.com
+ Updated Date: 2025-11-02T08:11:24Z
+ Creation Date: 2000-11-01T11:42:51Z
+ Registry Expiry Date: 2026-11-01T10:42:51Z
+ Registrar: Nikko Reg LLP
+ Registrar IANA ID: 840
+ Registrar Abuse Contact Email: accreditation@nicco.com
+ Registrar Abuse Contact Phone: +18664032975
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Name Server: NS1.NICCO.COM
+ Name Server: NS2.NICCO.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/nicline.com.txt b/tests/fixtures/nicline.com.txt
new file mode 100644
index 00000000..0ea83a30
--- /dev/null
+++ b/tests/fixtures/nicline.com.txt
@@ -0,0 +1,55 @@
+ Domain Name: NICLINE.COM
+ Registry Domain ID: 22280656_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.nicline.com
+ Registrar URL: http://www.arsys.es
+ Updated Date: 2025-03-03T07:20:18Z
+ Creation Date: 2000-03-13T12:29:12Z
+ Registry Expiry Date: 2026-03-13T11:29:12Z
+ Registrar: Arsys Internet, S.L. dba NICLINE.COM
+ Registrar IANA ID: 379
+ Registrar Abuse Contact Email: abuse@nicline.com
+ Registrar Abuse Contact Phone: +34.941620100
+ Domain Status: ok https://icann.org/epp#ok
+ Name Server: NS-ARSYS.UI-DNS.BIZ
+ Name Server: NS-ARSYS.UI-DNS.COM
+ Name Server: NS-ARSYS.UI-DNS.ES
+ Name Server: NS-ARSYS.UI-DNS.ORG
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/nominalia.com.txt b/tests/fixtures/nominalia.com.txt
new file mode 100644
index 00000000..6104d87a
--- /dev/null
+++ b/tests/fixtures/nominalia.com.txt
@@ -0,0 +1,55 @@
+ Domain Name: NOMINALIA.COM
+ Registry Domain ID: 4546874_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.nominalia.com
+ Registrar URL: http://www.nominalia.com
+ Updated Date: 2020-10-12T14:39:27Z
+ Creation Date: 1997-06-24T04:00:00Z
+ Registry Expiry Date: 2027-11-30T15:37:55Z
+ Registrar: Nominalia Internet SL
+ Registrar IANA ID: 76
+ Registrar Abuse Contact Email: abuse@nominalia.com
+ Registrar Abuse Contact Phone: +39.05520021555
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Name Server: DNS1.NOMINALIA.COM
+ Name Server: DNS2.NOMINALIA.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/norid.no.txt b/tests/fixtures/norid.no.txt
new file mode 100644
index 00000000..3fc7dc32
--- /dev/null
+++ b/tests/fixtures/norid.no.txt
@@ -0,0 +1,45 @@
+Connecting to NO.whois-servers.net...
+
+% By looking up information in the domain registration directory
+% service, you confirm that you accept the terms and conditions of the
+% service:
+% https://www.norid.no/en/domeneoppslag/vilkar/
+%
+% UNINETT Norid AS holds the copyright to the lookup service, content,
+% layout and the underlying collections of information used in the
+% service (cf. the Act on Intellectual Property of May 2, 1961, No.
+% 2). Any commercial % use of information from the service, including
+% targeted marketing, is prohibited. Using information from the domain
+% registration directory service in % violation of the terms and
+% conditions may result in legal prosecution.
+%
+% The whois service at port 43 is intended to contribute to resolving
+% technical problems where individual domains threaten the
+% functionality, security and stability of other domains or the
+% internet as an infrastructure. It does not give any information
+% about who the holder of a domain is. To find information about a
+% domain holder, please visit our website:
+% https://www.norid.no/en/domeneoppslag/
+
+Domain Information
+
+NORID Handle...............: NOR18456D-NORID
+Domain Name................: norid.no
+Registrar Handle...........: REG2-NORID
+Tech-c Handle..............: UH9R-NORID
+Name Server Handle.........: NAC2H-NORID
+Name Server Handle.........: NN14H-NORID
+Name Server Handle.........: NSUN1239H-NORID
+Name Server Handle.........: SERV41H-NORID
+DNSSEC.....................: Signed
+DS Key Tag 1...........: 50212
+Algorithm 1...........: 8
+Digest Type 1...........: 2
+Digest 1...........: 555cd4da5203e4d74a1c94e3433502ec9d8d4a09a28e6a85f47ade020137f423
+
+Additional information:
+Created: 1999-11-15
+Last updated: 2018-05-24
+
+
+Connecting to p information in the domain registration directory...
diff --git a/tests/fixtures/nunames.nu.txt b/tests/fixtures/nunames.nu.txt
new file mode 100644
index 00000000..3ab1b937
--- /dev/null
+++ b/tests/fixtures/nunames.nu.txt
@@ -0,0 +1,32 @@
+# Copyright (c) 1997- The Swedish Internet Foundation.
+# All rights reserved.
+# The information obtained through searches, or otherwise, is protected
+# by the Swedish Copyright Act (1960:729) and international conventions.
+# It is also subject to database protection according to the Swedish
+# Copyright Act.
+# Any use of this material to target advertising or
+# similar activities is forbidden and will be prosecuted.
+# If any of the information below is transferred to a third
+# party, it must be done in its entirety. This server must
+# not be used as a backend for a search engine.
+# Result of search for registered domain names under
+# the .se top level domain.
+# This whois printout is printed with UTF-8 encoding.
+#
+state: active
+domain: nunames.nu
+holder: qi9c3zbvhr
+created: 1997-05-30
+modified: 2024-06-05
+expires: 2097-05-30
+nserver: lns3.nudomain.nu
+nserver: lns2.nudomain.nu
+nserver: lns1.nudomain.nu
+nserver: lns0.nudomain.nu
+nserver: ns1.worldwidedns.net
+nserver: ns2.worldwidedns.net
+nserver: ns3.worldwidedns.net
+dnssec: unsigned delegation
+registry-lock: unlocked
+status: ok
+registrar: NuNames.NU
\ No newline at end of file
diff --git a/tests/fixtures/olsns.co.uk.txt b/tests/fixtures/olsns.co.uk.txt
new file mode 100644
index 00000000..8a850329
--- /dev/null
+++ b/tests/fixtures/olsns.co.uk.txt
@@ -0,0 +1,38 @@
+
+ Domain name:
+ olsns.co.uk
+
+ Data validation:
+ Nominet was able to match the registrant's name and address against a 3rd party data source on 10-Dec-2012
+
+ Registrar:
+ Entorno Digital S.A t/a Entorno [Tag = ENTORNO-ES]
+ URL: https://www.entorno.com
+
+ Relevant dates:
+ Registered on: 21-Feb-2001
+ Expiry date: 21-Feb-2026
+ Last updated: 19-Feb-2025
+
+ Registration status:
+ Registered until expiry date.
+
+ Name servers:
+ a.ns.olsns.co.uk 82.98.178.81
+ b.ns.olsns.co.uk 82.98.170.158
+
+ WHOIS lookup made at 17:09:09 30-Nov-2025
+
+--
+This WHOIS information is provided for free by Nominet UK the central registry
+for .uk domain names. This information and the .uk WHOIS are:
+
+ Copyright Nominet UK 1996 - 2025.
+
+You may not access the .uk WHOIS or use any data from it except as permitted
+by the terms of use available in full at https://www.nominet.uk/whoisterms,
+which includes restrictions on: (A) use of the data for advertising, or its
+repackaging, recompilation, redistribution or reuse (B) obscuring, removing
+or hiding any or all of this notice and (C) exceeding query rate or volume
+limits. The data is provided on an 'as-is' basis and may lag behind the
+register. Access may be withdrawn or restricted at any time.
\ No newline at end of file
diff --git a/tests/fixtures/olsns.com.txt b/tests/fixtures/olsns.com.txt
new file mode 100644
index 00000000..1eeb9352
--- /dev/null
+++ b/tests/fixtures/olsns.com.txt
@@ -0,0 +1,53 @@
+ Domain Name: OLSNS.COM
+ Registry Domain ID: 63245116_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.entorno.com
+ Registrar URL: http://www.entorno.es
+ Updated Date: 2025-11-22T23:49:19Z
+ Creation Date: 2001-02-21T20:29:51Z
+ Registry Expiry Date: 2026-02-21T20:29:51Z
+ Registrar: Entorno Digital, S.A.
+ Registrar IANA ID: 696
+ Registrar Abuse Contact Email: abuse@entorno.es
+ Registrar Abuse Contact Phone: +34935942101
+ Domain Status: ok https://icann.org/epp#ok
+ Name Server: A.NS.OLSNS.COM
+ Name Server: B.NS.OLSNS.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/onlinenic.com.txt b/tests/fixtures/onlinenic.com.txt
new file mode 100644
index 00000000..9195c475
--- /dev/null
+++ b/tests/fixtures/onlinenic.com.txt
@@ -0,0 +1,56 @@
+ Domain Name: ONLINENIC.COM
+ Registry Domain ID: 9494382_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.onlinenic.com
+ Registrar URL: http://www.onlinenic.com
+ Updated Date: 2025-11-30T06:02:14Z
+ Creation Date: 1999-08-26T07:53:02Z
+ Registry Expiry Date: 2026-08-26T07:53:02Z
+ Registrar: OnlineNIC, Inc.
+ Registrar IANA ID: 82
+ Registrar Abuse Contact Email: abuse@onlinenic.com
+ Registrar Abuse Contact Phone: +1 833-678-1173
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: NS-1525.AWSDNS-62.ORG
+ Name Server: NS-1555.AWSDNS-02.CO.UK
+ Name Server: NS-232.AWSDNS-29.COM
+ Name Server: NS-861.AWSDNS-43.NET
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/ostap.dev.txt b/tests/fixtures/ostap.dev.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/fixtures/ovh.com.txt b/tests/fixtures/ovh.com.txt
new file mode 100644
index 00000000..18251012
--- /dev/null
+++ b/tests/fixtures/ovh.com.txt
@@ -0,0 +1,58 @@
+ Domain Name: OVH.COM
+ Registry Domain ID: 1938925_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.ovh.com
+ Registrar URL: http://www.ovh.com
+ Updated Date: 2024-11-25T14:32:20Z
+ Creation Date: 1997-02-07T05:00:00Z
+ Registry Expiry Date: 2033-02-08T05:00:00Z
+ Registrar: OVH sas
+ Registrar IANA ID: 433
+ Registrar Abuse Contact Email: abuse@ovh.net
+ Registrar Abuse Contact Phone: +33.972101007
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: DNS.OVH.NET
+ Name Server: DNS10.OVH.NET
+ Name Server: DNS200.ANYCAST.ME
+ Name Server: NS.OVH.NET
+ Name Server: NS10.OVH.NET
+ Name Server: NS200.ANYCAST.ME
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/peter.morgan.name.txt b/tests/fixtures/peter.morgan.name.txt
new file mode 100644
index 00000000..e8ae5118
--- /dev/null
+++ b/tests/fixtures/peter.morgan.name.txt
@@ -0,0 +1,31 @@
+
+Disclaimer: VeriSign, Inc. makes every effort to maintain the
+completeness and accuracy of the Whois data, but cannot guarantee
+that the results are error-free. Therefore, any data provided
+through the Whois service are on an as is basis without any
+warranties.
+BY USING THE WHOIS SERVICE AND THE DATA CONTAINED
+HEREIN OR IN ANY REPORT GENERATED WITH RESPECT THERETO, IT IS
+ACCEPTED THAT VERISIGN, INC. IS NOT LIABLE FOR
+ANY DAMAGES OF ANY KIND ARISING OUT OF, OR IN CONNECTION WITH, THE
+REPORT OR THE INFORMATION PROVIDED BY THE WHOIS SERVICE, NOR
+OMISSIONS OR MISSING INFORMATION. THE RESULTS OF ANY WHOIS REPORT OR
+INFORMATION PROVIDED BY THE WHOIS SERVICE CANNOT BE RELIED UPON IN
+CONTEMPLATION OF LEGAL PROCEEDINGS WITHOUT FURTHER VERIFICATION, NOR
+DO SUCH RESULTS CONSTITUTE A LEGAL OPINION. Acceptance of the
+results of the Whois constitutes acceptance of these terms,
+conditions and limitations. Whois data may be requested only for
+lawful purposes, in particular, to protect legal rights and
+obligations. Illegitimate uses of Whois data include, but are not
+limited to, unsolicited email, data mining, direct marketing or any
+other improper purpose. Any request made for Whois data will be
+documented by VeriSign, Inc. but will not be used for any commercial purpose whatsoever.
+
+ ****
+
+No match for "PETER.MORGAN.NAME".
+
+>>> Last update of whois database: 2025-11-30T17:10:01Z <<<
+
+To request access to data listed as “Redacted” or “Redacted for Privacy” in the
+above WHOIS result, please contact Customer Service at info@verisign-grs.com
\ No newline at end of file
diff --git a/tests/fixtures/register.com.txt b/tests/fixtures/register.com.txt
new file mode 100644
index 00000000..8a166f6e
--- /dev/null
+++ b/tests/fixtures/register.com.txt
@@ -0,0 +1,58 @@
+ Domain Name: REGISTER.COM
+ Registry Domain ID: 3441369_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.register.com
+ Registrar URL: http://www.register.com
+ Updated Date: 2020-12-02T17:29:35Z
+ Creation Date: 1994-11-01T05:00:00Z
+ Registry Expiry Date: 2028-08-04T14:10:18Z
+ Registrar: Register.com - Network Solutions, LLC
+ Registrar IANA ID: 9
+ Registrar Abuse Contact Email: domain.operations@web.com
+ Registrar Abuse Contact Phone: +1.8777228662
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+ Name Server: HEIDI.NS.CLOUDFLARE.COM
+ Name Server: REX.NS.CLOUDFLARE.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/registro.br.txt b/tests/fixtures/registro.br.txt
new file mode 100644
index 00000000..9ce4d239
--- /dev/null
+++ b/tests/fixtures/registro.br.txt
@@ -0,0 +1,42 @@
+% Copyright (c) Nic.br - Use of this data is governed by the Use and
+% Privacy Policy at https://registro.br/upp . Distribution,
+% commercialization, reproduction, and use for advertising or similar
+% purposes are expressly prohibited.
+% 2025-12-08T07:39:16-03:00 - 93.70.70.58
+
+domain: registro.br
+owner: Ncleo de Inf. e Coord. do Ponto BR - NIC.BR
+owner-c: FAN
+tech-c: FAN
+nserver: a.dns.br
+nsstat: 20251208 AA
+nslastaa: 20251208
+nserver: b.dns.br
+nsstat: 20251208 AA
+nslastaa: 20251208
+nserver: c.dns.br
+nsstat: 20251208 AA
+nslastaa: 20251208
+nserver: d.dns.br
+nsstat: 20251208 AA
+nslastaa: 20251208
+nserver: e.dns.br
+nsstat: 20251208 AA
+nslastaa: 20251208
+dsrecord: 59973 ECDSA-SHA-256 17A233B59FE51E6205205E0556343DB121AB5023663A1B5628133AFFEA95A5C9
+dsstatus: 20251208 DSOK
+dslastok: 20251208
+created: 19990221 #142485
+changed: 20180402
+status: published
+
+nic-hdl-br: FAN
+person: Frederico Augusto de Carvalho Neves
+created: 19971217
+changed: 20241121
+
+% Security and mail abuse issues should also be addressed to cert.br,
+% respectivelly to cert@cert.br and mail-abuse@cert.br
+%
+% whois.registro.br only accepts exact match queries for domains,
+% registrants, contacts, tickets, providers, IPs, and ASNs.
\ No newline at end of file
diff --git a/tests/fixtures/registry.in.txt b/tests/fixtures/registry.in.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/fixtures/registrypro.pro.txt b/tests/fixtures/registrypro.pro.txt
new file mode 100644
index 00000000..fa463b78
--- /dev/null
+++ b/tests/fixtures/registrypro.pro.txt
@@ -0,0 +1,3 @@
+Domain not found.
+
+>>> Please update your code or tell your system administrator to use whois.nic.pro, the authoritative WHOIS server for this domain. <<<
\ No newline at end of file
diff --git a/tests/fixtures/rrpproxy.net.txt b/tests/fixtures/rrpproxy.net.txt
new file mode 100644
index 00000000..58540591
--- /dev/null
+++ b/tests/fixtures/rrpproxy.net.txt
@@ -0,0 +1,57 @@
+ Domain Name: RRPPROXY.NET
+ Registry Domain ID: 69690466_DOMAIN_NET-VRSN
+ Registrar WHOIS Server: whois.rrpproxy.net
+ Registrar URL: http://www.key-systems.net
+ Updated Date: 2023-04-27T12:01:45Z
+ Creation Date: 2001-04-19T18:39:15Z
+ Registry Expiry Date: 2024-04-19T18:39:15Z
+ Registrar: Key-Systems GmbH
+ Registrar IANA ID: 269
+ Registrar Abuse Contact Email: abuse@key-systems.net
+ Registrar Abuse Contact Phone: +49.68949396850
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: PDNS109.ULTRADNS.BIZ
+ Name Server: PDNS109.ULTRADNS.COM
+ Name Server: PDNS109.ULTRADNS.NET
+ Name Server: PDNS109.ULTRADNS.ORG
+ DNSSEC: signedDelegation
+ DNSSEC DS Data: 48716 8 2 3E7C520821174D813540049471A25A447E433DAFA5485F759327FDD2CE21A0C7
+ DNSSEC DS Data: 52504 8 2 1358E557B6AED48017FDF3615AAC04930F473C12A59717B29712678210F11D4B
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2023-08-11T10:02:59Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/samoanic.ws.txt b/tests/fixtures/samoanic.ws.txt
new file mode 100644
index 00000000..3901111e
--- /dev/null
+++ b/tests/fixtures/samoanic.ws.txt
@@ -0,0 +1,60 @@
+Domain Name: SAMOANIC.WS
+Domain ID: D865CD2902FC835CE040010AAB015FFF-GDI
+WHOIS Server:
+Registrar URL: http://samoanic.ws/whois.dhtml
+Updated Date: 2025-03-09T09:20:19Z
+Creation Date: 2000-03-09T19:11:00Z
+Registrar Registration Expiration Date: 2026-03-09T19:11:00Z
+Registrar: Computer Services Limited
+Registrar IANA ID:
+Registrar Abuse Contact Email: helpdesk@samoa.ws
+Registrar Abuse Contact Phone: 68520926
+Domain Status: ok
+Registry Registrant ID: D865CD2902FC835CE040010AAB015FFF-GDI
+Registrant Name: CSL
+Registrant Organization: Computer Services Limited
+Registrant Street: 701 Palomar Airport Rd. 3rd floor
+Registrant City: Carlsbad
+Registrant State/Province: CA
+Registrant Postal Code: 92009
+Registrant Country: US
+Registrant Phone: +1.68520926
+Registrant Phone Ext:
+Registrant Fax:
+Registrant Fax Ext:
+Registrant Email: domains@samoa.ws
+Registry Admin ID: D865CD2902FC835CE040010AAB015FFF-GDI
+Admin Name: CSL
+Admin Organization: Computer Services Limited
+Admin Street: 701 Palomar Airport Rd. 3rd floor
+Admin City: Carlsbad
+Admin State/Province: CA
+Admin Postal Code: 92009
+Admin Country: US
+Admin Phone: +1.68520926
+Admin Phone Ext:
+Admin Fax:
+Admin Fax Ext:
+Admin Email: domains@samoa.ws
+Registry Tech ID: D865CD2902FC835CE040010AAB015FFF-GDI
+Tech Name: CSL
+Tech Organization: Computer Services Limited
+Tech Street: 701 Palomar Airport Rd. 3rd floor
+Tech City: Carlsbad
+Tech State/Province: CA
+Tech Postal Code: 92009
+Tech Country: US
+Tech Phone: +1.68520926
+Tech Phone Ext:
+Tech Fax:
+Tech Fax Ext:
+Tech Email: domains@samoa.ws
+Name Server: ns2.ncsdi.ws.
+Name Server: ns3.ncsdi.ws.
+Name Server: ns4.ncsdi.ws.
+Name Server: ns5.ncsdi.ws.
+DNSSEC: unsigned
+URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
+>>> Last update of WHOIS database: 2025-11-30T17:09:14Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
diff --git a/tests/fixtures/schlund.com.txt b/tests/fixtures/schlund.com.txt
new file mode 100644
index 00000000..816135b3
--- /dev/null
+++ b/tests/fixtures/schlund.com.txt
@@ -0,0 +1,55 @@
+ Domain Name: SCHLUND.COM
+ Registry Domain ID: 1245437_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.ionos.com
+ Registrar URL: http://www.ionos.com
+ Updated Date: 2025-10-10T07:01:42Z
+ Creation Date: 1996-10-10T04:00:00Z
+ Registry Expiry Date: 2026-10-09T04:00:00Z
+ Registrar: IONOS SE
+ Registrar IANA ID: 83
+ Registrar Abuse Contact Email: abuse@ionos.com
+ Registrar Abuse Contact Phone: +1.6105601459
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Name Server: NS-1AND1.UI-DNS.BIZ
+ Name Server: NS-1AND1.UI-DNS.COM
+ Name Server: NS-1AND1.UI-DNS.DE
+ Name Server: NS-1AND1.UI-DNS.ORG
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/scottishrecoveryconsortium.org.txt b/tests/fixtures/scottishrecoveryconsortium.org.txt
new file mode 100644
index 00000000..53f6b0fe
--- /dev/null
+++ b/tests/fixtures/scottishrecoveryconsortium.org.txt
@@ -0,0 +1,234 @@
+Connecting to ORG.whois-servers.net...
+
+WHOIS Server: whois.tucows.com
+Registrar URL: http://www.tucows.com
+Updated Date: 2020-01-13T11:22:25Z
+Creation Date: 2012-10-01T15:32:42Z
+Registry Expiry Date: 2020-10-01T15:32:42Z
+Registrar Registration Expiration Date:
+Registrar: Tucows Inc.
+Registrar IANA ID: 69
+Registrar Abuse Contact Email: domainabuse@tucows.com
+Registrar Abuse Contact Phone: +1.4165350123
+Reseller:
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Registrant Organization: Scottish Recovery Consortium
+Registrant State/Province: Glasgow
+Registrant Country: GB
+Name Server: NS1.STACKDNS.COM
+Name Server: NS2.STACKDNS.COM
+Name Server: NS3.STACKDNS.COM
+DNSSEC: unsigned
+URL of the ICANN Whois Inaccuracy Complaint Form https://www.icann.org/wicf/)
+>>> Last update of WHOIS database: 2020-05-29T22:11:59Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+Access to Public Interest Registry WHOIS information is provided to assist persons in determining the contents of a domain name registration record in the Public Interest Registry registry database. The data in this record is provided by Public Interest Registry for informational purposes only, and Public Interest Registry does not guarantee its accuracy. This service is intended only for query-based access. You agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data to (a) allow, enable, or otherwise support the transmission by e-mail, telephone, or facsimile of mass unsolicited, commercial advertising or solicitations to entities other than the data recipient's own existing customers; or (b) enable high volume, automated, electronic processes that send queries or data to the systems of Registry Operator, a Registrar, or Afilias except as reasonably necessary to register domain names or modify existing registrations. All rights reserved. Public Interest Registry reserves the right to modify these terms at any time. By submitting this query, you agree to abide by this policy.
+
+The Registrar of Record identified in this output may have an RDDS service that can be queried for additional information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+
+Connecting to whois.tucows.com...
+
+WHOIS Server: whois.tucows.com
+Registrar URL: http://tucowsdomains.com
+Updated Date: 2020-01-13T11:22:22
+Creation Date: 2012-10-01T15:32:42
+Registrar Registration Expiration Date: 2020-10-01T15:32:42
+Registrar: TUCOWS, INC.
+Registrar IANA ID: 69
+Reseller: Fasthosts Internet Limited
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Registry Registrant ID:
+Registrant Name: REDACTED FOR PRIVACY
+Registrant Organization: REDACTED FOR PRIVACY
+Registrant Street: REDACTED FOR PRIVACY
+Registrant City: REDACTED FOR PRIVACY
+Registrant State/Province: Glasgow
+Registrant Postal Code: REDACTED FOR PRIVACY
+Registrant Country: GB
+Registrant Phone: REDACTED FOR PRIVACY
+Registrant Phone Ext:
+Registrant Fax: REDACTED FOR PRIVACY
+Registrant Fax Ext:
+Registrant Email: https://tieredaccess.com/contact/2fc25366-18de-445d-ad3e-36338247fa37
+Registry Admin ID:
+Admin Name: REDACTED FOR PRIVACY
+Admin Organization: REDACTED FOR PRIVACY
+Admin Street: REDACTED FOR PRIVACY
+Admin City: REDACTED FOR PRIVACY
+Admin State/Province: REDACTED FOR PRIVACY
+Admin Postal Code: REDACTED FOR PRIVACY
+Admin Country: REDACTED FOR PRIVACY
+Admin Phone: REDACTED FOR PRIVACY
+Admin Phone Ext:
+Admin Fax: REDACTED FOR PRIVACY
+Admin Fax Ext:
+Admin Email: REDACTED FOR PRIVACY
+Registry Tech ID:
+Tech Name: REDACTED FOR PRIVACY
+Tech Organization: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech City: REDACTED FOR PRIVACY
+Tech State/Province: REDACTED FOR PRIVACY
+Tech Postal Code: REDACTED FOR PRIVACY
+Tech Country: REDACTED FOR PRIVACY
+Tech Phone: REDACTED FOR PRIVACY
+Tech Phone Ext:
+Tech Fax: REDACTED FOR PRIVACY
+Tech Fax Ext:
+Tech Email: REDACTED FOR PRIVACY
+Name Server: ns1.stackdns.com
+Name Server: ns2.stackdns.com
+Name Server: ns3.stackdns.com
+DNSSEC: unsigned
+Registrar Abuse Contact Email: domainabuse@tucows.com
+Registrar Abuse Contact Phone: +1.4165350123
+URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
+>>> Last update of WHOIS database: 2020-05-29T22:12:59Z <<<
+
+"For more information on Whois status codes, please visit https://icann.org/epp"
+
+Registration Service Provider:
+ Fasthosts Internet Limited, domains@fasthosts.co.uk
+ +44.3330142700
+ http://www.Fasthosts.co.uk
+ http://facebook.com/fasthostsinternet
+
+The Data in the Tucows Registrar WHOIS database is provided to you by Tucows
+for information purposes only, and may be used to assist you in obtaining
+information about or related to a domain name's registration record.
+
+Tucows makes this information available "as is," and does not guarantee its
+accuracy.
+
+By submitting a WHOIS query, you agree that you will use this data only for
+lawful purposes and that, under no circumstances will you use this data to:
+a) allow, enable, or otherwise support the transmission by e-mail,
+telephone, or facsimile of mass, unsolicited, commercial advertising or
+solicitations to entities other than the data recipient's own existing
+customers; or (b) enable high volume, automated, electronic processes that
+send queries or data to the systems of any Registry Operator or
+ICANN-Accredited registrar, except as reasonably necessary to register
+domain names or modify existing registrations.
+
+The compilation, repackaging, dissemination or other use of this Data is
+expressly prohibited without the prior written consent of Tucows.
+
+Tucows reserves the right to terminate your access to the Tucows WHOIS
+database in its sole discretion, including without limitation, for excessive
+querying of the WHOIS database or for failure to otherwise abide by this
+policy.
+
+Tucows reserves the right to modify these terms at any time.
+
+By submitting this query, you agree to abide by these terms.
+
+NOTE: THE WHOIS DATABASE IS A CONTACT DATABASE ONLY. LACK OF A DOMAIN
+RECORD DOES NOT SIGNIFY DOMAIN AVAILABILITY.
+
+
+
+Domain Name: SCOTTISHRECOVERYCONSORTIUM.ORG
+Registry Domain ID: D166733159-LROR
+Registrar WHOIS Server: whois.tucows.com
+Registrar URL: http://tucowsdomains.com
+Updated Date: 2020-01-13T11:22:22
+Creation Date: 2012-10-01T15:32:42
+Registrar Registration Expiration Date: 2020-10-01T15:32:42
+Registrar: TUCOWS, INC.
+Registrar IANA ID: 69
+Reseller: Fasthosts Internet Limited
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+Registry Registrant ID:
+Registrant Name: REDACTED FOR PRIVACY
+Registrant Organization: REDACTED FOR PRIVACY
+Registrant Street: REDACTED FOR PRIVACY
+Registrant City: REDACTED FOR PRIVACY
+Registrant State/Province: Glasgow
+Registrant Postal Code: REDACTED FOR PRIVACY
+Registrant Country: GB
+Registrant Phone: REDACTED FOR PRIVACY
+Registrant Phone Ext:
+Registrant Fax: REDACTED FOR PRIVACY
+Registrant Fax Ext:
+Registrant Email: https://tieredaccess.com/contact/2fc25366-18de-445d-ad3e-36338247fa37
+Registry Admin ID:
+Admin Name: REDACTED FOR PRIVACY
+Admin Organization: REDACTED FOR PRIVACY
+Admin Street: REDACTED FOR PRIVACY
+Admin City: REDACTED FOR PRIVACY
+Admin State/Province: REDACTED FOR PRIVACY
+Admin Postal Code: REDACTED FOR PRIVACY
+Admin Country: REDACTED FOR PRIVACY
+Admin Phone: REDACTED FOR PRIVACY
+Admin Phone Ext:
+Admin Fax: REDACTED FOR PRIVACY
+Admin Fax Ext:
+Admin Email: REDACTED FOR PRIVACY
+Registry Tech ID:
+Tech Name: REDACTED FOR PRIVACY
+Tech Organization: REDACTED FOR PRIVACY
+Tech Street: REDACTED FOR PRIVACY
+Tech City: REDACTED FOR PRIVACY
+Tech State/Province: REDACTED FOR PRIVACY
+Tech Postal Code: REDACTED FOR PRIVACY
+Tech Country: REDACTED FOR PRIVACY
+Tech Phone: REDACTED FOR PRIVACY
+Tech Phone Ext:
+Tech Fax: REDACTED FOR PRIVACY
+Tech Fax Ext:
+Tech Email: REDACTED FOR PRIVACY
+Name Server: ns1.stackdns.com
+Name Server: ns2.stackdns.com
+Name Server: ns3.stackdns.com
+DNSSEC: unsigned
+Registrar Abuse Contact Email: domainabuse@tucows.com
+Registrar Abuse Contact Phone: +1.4165350123
+URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
+>>> Last update of WHOIS database: 2020-05-29T22:12:59Z <<<
+
+"For more information on Whois status codes, please visit https://icann.org/epp"
+
+Registration Service Provider:
+ Fasthosts Internet Limited, domains@fasthosts.co.uk
+ +44.3330142700
+ http://www.Fasthosts.co.uk
+ http://facebook.com/fasthostsinternet
+
+The Data in the Tucows Registrar WHOIS database is provided to you by Tucows
+for information purposes only, and may be used to assist you in obtaining
+information about or related to a domain name's registration record.
+
+Tucows makes this information available "as is," and does not guarantee its
+accuracy.
+
+By submitting a WHOIS query, you agree that you will use this data only for
+lawful purposes and that, under no circumstances will you use this data to:
+a) allow, enable, or otherwise support the transmission by e-mail,
+telephone, or facsimile of mass, unsolicited, commercial advertising or
+solicitations to entities other than the data recipient's own existing
+customers; or (b) enable high volume, automated, electronic processes that
+send queries or data to the systems of any Registry Operator or
+ICANN-Accredited registrar, except as reasonably necessary to register
+domain names or modify existing registrations.
+
+The compilation, repackaging, dissemination or other use of this Data is
+expressly prohibited without the prior written consent of Tucows.
+
+Tucows reserves the right to terminate your access to the Tucows WHOIS
+database in its sole discretion, including without limitation, for excessive
+querying of the WHOIS database or for failure to otherwise abide by this
+policy.
+
+Tucows reserves the right to modify these terms at any time.
+
+By submitting this query, you agree to abide by these terms.
+
+NOTE: THE WHOIS DATABASE IS A CONTACT DATABASE ONLY. LACK OF A DOMAIN
+RECORD DOES NOT SIGNIFY DOMAIN AVAILABILITY.
+
+
diff --git a/tests/fixtures/sex.co.za.txt b/tests/fixtures/sex.co.za.txt
new file mode 100644
index 00000000..070ceddb
--- /dev/null
+++ b/tests/fixtures/sex.co.za.txt
@@ -0,0 +1,43 @@
+document.documentElement.className = 'js';let jqueryParams=[],jQuery=function(r){return jqueryParams=[...jqueryParams,r],jQuery},$=function(r){return jqueryParams=[...jqueryParams,r],$};window.jQuery=jQuery,window.$=jQuery;let customHeadScripts=!1;jQuery.fn=jQuery.prototype={},$.fn=jQuery.prototype={},jQuery.noConflict=function(r){if(window.jQuery)return jQuery=window.jQuery,$=window.jQuery,customHeadScripts=!0,jQuery.noConflict},jQuery.ready=function(r){jqueryParams=[...jqueryParams,r]},$.ready=function(r){jqueryParams=[...jqueryParams,r]},jQuery.load=function(r){jqueryParams=[...jqueryParams,r]},$.load=function(r){jqueryParams=[...jqueryParams,r]},jQuery.fn.ready=function(r){jqueryParams=[...jqueryParams,r]},$.fn.ready=function(r){jqueryParams=[...jqueryParams,r]};Home - ZARC
+{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://zarc.web.za/","url":"https://zarc.web.za/","name":"Home - ZARC","isPartOf":{"@id":"https://zarc.web.za/#website"},"primaryImageOfPage":{"@id":"https://zarc.web.za/#primaryimage"},"image":{"@id":"https://zarc.web.za/#primaryimage"},"thumbnailUrl":"https://zarc.web.za/wp-content/uploads/2025/08/zarc-logo-1-300x300.png","datePublished":"2025-03-26T10:11:00+00:00","dateModified":"2025-11-17T13:31:33+00:00","description":"ZA Registry Consortium (ZARC) is the contracted Registry Operator for South Africa’s second-level domains (SLDs): CO.ZA, ORG.ZA, NET.ZA, and WEB.ZA.","breadcrumb":{"@id":"https://zarc.web.za/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://zarc.web.za/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https://zarc.web.za/#primaryimage","url":"https://zarc.web.za/wp-content/uploads/2025/08/zarc-logo-1.png","contentUrl":"https://zarc.web.za/wp-content/uploads/2025/08/zarc-logo-1.png","width":500,"height":500},{"@type":"BreadcrumbList","@id":"https://zarc.web.za/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home"}]},{"@type":"WebSite","@id":"https://zarc.web.za/#website","url":"https://zarc.web.za/","name":"ZARC","description":"Enhancing Domain Security","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://zarc.web.za/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}.wp-block-audio :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-audio :where(figcaption){color:#ffffffa6}.wp-block-audio{margin:0 0 1em}.wp-block-code{border:1px solid #ccc;border-radius:4px;font-family:Menlo,Consolas,monaco,monospace;padding:.8em 1em}.wp-block-embed :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-embed :where(figcaption){color:#ffffffa6}.wp-block-embed{margin:0 0 1em}.blocks-gallery-caption{color:#555;font-size:13px;text-align:center}.is-dark-theme .blocks-gallery-caption{color:#ffffffa6}:root :where(.wp-block-image figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme :root :where(.wp-block-image figcaption){color:#ffffffa6}.wp-block-image{margin:0 0 1em}.wp-block-pullquote{border-bottom:4px solid;border-top:4px solid;color:currentColor;margin-bottom:1.75em}.wp-block-pullquote cite,.wp-block-pullquote footer,.wp-block-pullquote__citation{color:currentColor;font-size:.8125em;font-style:normal;text-transform:uppercase}.wp-block-quote{border-left:.25em solid;margin:0 0 1.75em;padding-left:1em}.wp-block-quote cite,.wp-block-quote footer{color:currentColor;font-size:.8125em;font-style:normal;position:relative}.wp-block-quote:where(.has-text-align-right){border-left:none;border-right:.25em solid;padding-left:0;padding-right:1em}.wp-block-quote:where(.has-text-align-center){border:none;padding-left:0}.wp-block-quote.is-large,.wp-block-quote.is-style-large,.wp-block-quote:where(.is-style-plain){border:none}.wp-block-search .wp-block-search__label{font-weight:700}.wp-block-search__button{border:1px solid #ccc;padding:.375em .625em}:where(.wp-block-group.has-background){padding:1.25em 2.375em}.wp-block-separator.has-css-opacity{opacity:.4}.wp-block-separator{border:none;border-bottom:2px solid;margin-left:auto;margin-right:auto}.wp-block-separator.has-alpha-channel-opacity{opacity:1}.wp-block-separator:not(.is-style-wide):not(.is-style-dots){width:100px}.wp-block-separator.has-background:not(.is-style-dots){border-bottom:none;height:1px}.wp-block-separator.has-background:not(.is-style-wide):not(.is-style-dots){height:2px}.wp-block-table{margin:0 0 1em}.wp-block-table td,.wp-block-table th{word-break:normal}.wp-block-table :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-table :where(figcaption){color:#ffffffa6}.wp-block-video :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-video :where(figcaption){color:#ffffffa6}.wp-block-video{margin:0 0 1em}:root :where(.wp-block-template-part.has-background){margin-bottom:0;margin-top:0;padding:1.25em 2.375em}:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:root { --wp--style--global--content-size: 823px;--wp--style--global--wide-size: 1080px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;line-height: inherit;padding: calc(0.667em + 2px) calc(1.333em + 2px);text-decoration: none;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}/*!Theme Name: DiviTheme URI: http://www.elegantthemes.com/gallery/divi/Version: 4.27.4Description: Smart. Flexible. Beautiful. Divi is the most powerful theme in our collection.Author: Elegant ThemesAuthor URI: http://www.elegantthemes.comLicense: GNU General Public License v2License URI: http://www.gnu.org/licenses/gpl-2.0.html*/a,abbr,acronym,address,applet,b,big,blockquote,body,center,cite,code,dd,del,dfn,div,dl,dt,em,fieldset,font,form,h1,h2,h3,h4,h5,h6,html,i,iframe,img,ins,kbd,label,legend,li,object,ol,p,pre,q,s,samp,small,span,strike,strong,sub,sup,tt,u,ul,var{margin:0;padding:0;border:0;outline:0;font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}blockquote{margin:20px 0 30px;border-left:5px solid;padding-left:20px}:focus{outline:0}del{text-decoration:line-through}pre{overflow:auto;padding:10px}figure{margin:0}table{border-collapse:collapse;border-spacing:0}article,aside,footer,header,hgroup,nav,section{display:block}body{font-family:Open Sans,Arial,sans-serif;font-size:14px;color:#666;background-color:#fff;line-height:1.7em;font-weight:500;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.page-template-page-template-blank-php #page-container{padding-top:0!important}body.et_cover_background{background-size:cover!important;background-position:top!important;background-repeat:no-repeat!important;background-attachment:fixed}a{color:#2ea3f2}a,a:hover{text-decoration:none}p{padding-bottom:1em}p:not(.has-background):last-of-type{padding-bottom:0}p.et_normal_padding{padding-bottom:1em}strong{font-weight:700}cite,em,i{font-style:italic}code,pre{font-family:Courier New,monospace;margin-bottom:10px}ins{text-decoration:none}sub,sup{height:0;line-height:1;position:relative;vertical-align:baseline}sup{bottom:.8em}sub{top:.3em}dl{margin:0 0 1.5em}dl dt{font-weight:700}dd{margin-left:1.5em}blockquote p{padding-bottom:0}embed,iframe,object,video{max-width:100%}h1,h2,h3,h4,h5,h6{color:#333;padding-bottom:10px;line-height:1em;font-weight:500}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:inherit}h1{font-size:30px}h2{font-size:26px}h3{font-size:22px}h4{font-size:18px}h5{font-size:16px}h6{font-size:14px}input{-webkit-appearance:none}input[type=checkbox]{-webkit-appearance:checkbox}input[type=radio]{-webkit-appearance:radio}input.text,input.title,input[type=email],input[type=password],input[type=tel],input[type=text],select,textarea{background-color:#fff;border:1px solid #bbb;padding:2px;color:#4e4e4e}input.text:focus,input.title:focus,input[type=text]:focus,select:focus,textarea:focus{border-color:#2d3940;color:#3e3e3e}input.text,input.title,input[type=text],select,textarea{margin:0}textarea{padding:4px}button,input,select,textarea{font-family:inherit}img{max-width:100%;height:auto}.clear{clear:both}br.clear{margin:0;padding:0}.pagination{clear:both}#et_search_icon:hover,.et-social-icon a:hover,.et_password_protected_form .et_submit_button,.form-submit .et_pb_buttontton.alt.disabled,.nav-single a,.posted_in a{color:#2ea3f2}.et-search-form,blockquote{border-color:#2ea3f2}#main-content{background-color:#fff}.container{width:80%;max-width:1080px;margin:auto;position:relative}body:not(.et-tb) #main-content .container,body:not(.et-tb-has-header) #main-content .container{padding-top:58px}.et_full_width_page #main-content .container:before{display:none}.main_title{margin-bottom:20px}.et_password_protected_form .et_submit_button:hover,.form-submit .et_pb_button:hover{background:rgba(0,0,0,.05)}.et_button_icon_visible .et_pb_button{padding-right:2em;padding-left:.7em}.et_button_icon_visible .et_pb_button:after{opacity:1;margin-left:0}.et_button_left .et_pb_button:hover:after{left:.15em}.et_button_left .et_pb_button:after{margin-left:0;left:1em}.et_button_icon_visible.et_button_left .et_pb_button,.et_button_left .et_pb_button:hover,.et_button_left .et_pb_module .et_pb_button:hover{padding-left:2em;padding-right:.7em}.et_button_icon_visible.et_button_left .et_pb_button:after,.et_button_left .et_pb_button:hover:after{left:.15em}.et_password_protected_form .et_submit_button:hover,.form-submit .et_pb_button:hover{padding:.3em 1em}.et_button_no_icon .et_pb_button:after{display:none}.et_button_no_icon.et_button_icon_visible.et_button_left .et_pb_button,.et_button_no_icon.et_button_left .et_pb_button:hover,.et_button_no_icon .et_pb_button,.et_button_no_icon .et_pb_button:hover{padding:.3em 1em!important}.et_button_custom_icon .et_pb_button:after{line-height:1.7em}.et_button_custom_icon.et_button_icon_visible .et_pb_button:after,.et_button_custom_icon .et_pb_button:hover:after{margin-left:.3em}#left-area .post_format-post-format-gallery .wp-block-gallery:first-of-type{padding:0;margin-bottom:-16px}.entry-content table:not(.variations){border:1px solid #eee;margin:0 0 15px;text-align:left;width:100%}.entry-content thead th,.entry-content tr th{color:#555;font-weight:700;padding:9px 24px}.entry-content tr td{border-top:1px solid #eee;padding:6px 24px}#left-area ul,.entry-content ul,.et-l--body ul,.et-l--footer ul,.et-l--header ul{list-style-type:disc;padding:0 0 23px 1em;line-height:26px}#left-area ol,.entry-content ol,.et-l--body ol,.et-l--footer ol,.et-l--header ol{list-style-type:decimal;list-style-position:inside;padding:0 0 23px;line-height:26px}#left-area ul li ul,.entry-content ul li ol{padding:2px 0 2px 20px}#left-area ol li ul,.entry-content ol li ol,.et-l--body ol li ol,.et-l--footer ol li ol,.et-l--header ol li ol{padding:2px 0 2px 35px}#left-area ul.wp-block-gallery{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style-type:none;padding:0}#left-area ul.products{padding:0!important;line-height:1.7!important;list-style:none!important}.gallery-item a{display:block}.gallery-caption,.gallery-item a{width:90%}#wpadminbar{z-index:100001}#left-area .post-meta{font-size:14px;padding-bottom:15px}#left-area .post-meta a{text-decoration:none;color:#666}#left-area .et_featured_image{padding-bottom:7px}.single .post{padding-bottom:25px}body.single .et_audio_content{margin-bottom:-6px}.nav-single a{text-decoration:none;color:#2ea3f2;font-size:14px;font-weight:400}.nav-previous{float:left}.nav-next{float:right}.et_password_protected_form p input{background-color:#eee;border:none!important;width:100%!important;border-radius:0!important;font-size:14px;color:#999!important;padding:16px!important;-webkit-box-sizing:border-box;box-sizing:border-box}.et_password_protected_form label{display:none}.et_password_protected_form .et_submit_button{font-family:inherit;display:block;float:right;margin:8px auto 0;cursor:pointer}.post-password-required p.nocomments.container{max-width:100%}.post-password-required p.nocomments.container:before{display:none}.aligncenter,div.post .new-post .aligncenter{display:block;margin-left:auto;margin-right:auto}.wp-caption{border:1px solid #ddd;text-align:center;background-color:#f3f3f3;margin-bottom:10px;max-width:96%;padding:8px}.wp-caption.alignleft{margin:0 30px 20px 0}.wp-caption.alignright{margin:0 0 20px 30px}.wp-caption img{margin:0;padding:0;border:0}.wp-caption p.wp-caption-text{font-size:12px;padding:0 4px 5px;margin:0}.alignright{float:right}.alignleft{float:left}img.alignleft{display:inline;float:left;margin-right:15px}img.alignright{display:inline;float:right;margin-left:15px}.page.et_pb_pagebuilder_layout #main-content{background-color:transparent}body #main-content .et_builder_inner_content>h1,body #main-content .et_builder_inner_content>h2,body #main-content .et_builder_inner_content>h3,body #main-content .et_builder_inner_content>h4,body #main-content .et_builder_inner_content>h5,body #main-content .et_builder_inner_content>h6{line-height:1.4em}body #main-content .et_builder_inner_content>p{line-height:1.7em}.wp-block-pullquote{margin:20px 0 30px}.wp-block-pullquote.has-background blockquote{border-left:none}.wp-block-group.has-background{padding:1.5em 1.5em .5em}@media (min-width:981px){#left-area{width:79.125%;padding-bottom:23px}#main-content .container:before{content:"";position:absolute;top:0;height:100%;width:1px;background-color:#e2e2e2}.et_full_width_page #left-area,.et_no_sidebar #left-area{float:none;width:100%!important}.et_full_width_page #left-area{padding-bottom:0}.et_no_sidebar #main-content .container:before{display:none}}@media (max-width:980px){#page-container{padding-top:80px}.et-tb #page-container,.et-tb-has-header #page-container{padding-top:0!important}#left-area,#sidebar{width:100%!important}#main-content .container:before{display:none!important}.et_full_width_page .et_gallery_item:nth-child(4n+1){clear:none}}@media print{#page-container{padding-top:0!important}}#wp-admin-bar-et-use-visual-builder a:before{font-family:ETmodules!important;content:"\e625";font-size:30px!important;width:28px;margin-top:-3px;color:#974df3!important}#wp-admin-bar-et-use-visual-builder:hover a:before{color:#fff!important}#wp-admin-bar-et-use-visual-builder:hover a,#wp-admin-bar-et-use-visual-builder a:hover{transition:background-color .5s ease;-webkit-transition:background-color .5s ease;-moz-transition:background-color .5s ease;background-color:#7e3bd0!important;color:#fff!important}* html .clearfix,:first-child+html .clearfix{zoom:1}.iphone .et_pb_section_video_bg video::-webkit-media-controls-start-playback-button{display:none!important;-webkit-appearance:none}.et_mobile_device .et_pb_section_parallax .et_pb_parallax_css{background-attachment:scroll}.et-social-facebook a.icon:before{content:"\e093"}.et-social-twitter a.icon:before{content:"\e094"}.et-social-google-plus a.icon:before{content:"\e096"}.et-social-instagram a.icon:before{content:"\e09a"}.et-social-rss a.icon:before{content:"\e09e"}.ai1ec-single-event:after{content:" ";display:table;clear:both}.evcal_event_details .evcal_evdata_cell .eventon_details_shading_bot.eventon_details_shading_bot{z-index:3}.wp-block-divi-layout{margin-bottom:1em}*{-webkit-box-sizing:border-box;box-sizing:border-box}#et-info-email:before,#et-info-phone:before,#et_search_icon:before,.comment-reply-link:after,.et-cart-info span:before,.et-pb-arrow-next:before,.et-pb-arrow-prev:before,.et-social-icon a:before,.et_audio_container .mejs-playpause-button button:before,.et_audio_container .mejs-volume-button button:before,.et_overlay:before,.et_password_protected_form .et_submit_button:after,.et_pb_button:after,.et_pb_contact_reset:after,.et_pb_contact_submit:after,.et_pb_font_icon:before,.et_pb_newsletter_button:after,.et_pb_pricing_table_button:after,.et_pb_promo_button:after,.et_pb_testimonial:before,.et_pb_toggle_title:before,.form-submit .et_pb_button:after,.mobile_menu_bar:before,a.et_pb_more_button:after{font-family:ETmodules!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-shadow:0 0;direction:ltr}.et-pb-icon,.et_pb_custom_button_icon.et_pb_button:after,.et_pb_login .et_pb_custom_button_icon.et_pb_button:after,.et_pb_woo_custom_button_icon .button.et_pb_custom_button_icon.et_pb_button:after,.et_pb_woo_custom_button_icon .button.et_pb_custom_button_icon.et_pb_button:hover:after{content:attr(data-icon)}.et-pb-icon{font-family:ETmodules;speak:none;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;font-size:96px;font-style:normal;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;direction:ltr}#et-ajax-saving{display:none;-webkit-transition:background .3s,-webkit-box-shadow .3s;transition:background .3s,-webkit-box-shadow .3s;transition:background .3s,box-shadow .3s;transition:background .3s,box-shadow .3s,-webkit-box-shadow .3s;-webkit-box-shadow:rgba(0,139,219,.247059) 0 0 60px;box-shadow:0 0 60px rgba(0,139,219,.247059);position:fixed;top:50%;left:50%;width:50px;height:50px;background:#fff;border-radius:50px;margin:-25px 0 0 -25px;z-index:999999;text-align:center}#et-ajax-saving img{margin:9px}.et-safe-mode-indicator,.et-safe-mode-indicator:focus,.et-safe-mode-indicator:hover{-webkit-box-shadow:0 5px 10px rgba(41,196,169,.15);box-shadow:0 5px 10px rgba(41,196,169,.15);background:#29c4a9;color:#fff;font-size:14px;font-weight:600;padding:12px;line-height:16px;border-radius:3px;position:fixed;bottom:30px;right:30px;z-index:999999;text-decoration:none;font-family:Open Sans,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.et_pb_button{font-size:20px;font-weight:500;padding:.3em 1em;line-height:1.7em!important;background-color:transparent;background-size:cover;background-position:50%;background-repeat:no-repeat;border:2px solid;border-radius:3px;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-property:all!important;transition-property:all!important}.et_pb_button,.et_pb_button_inner{position:relative}.et_pb_button:hover,.et_pb_module .et_pb_button:hover{border:2px solid transparent;padding:.3em 2em .3em .7em}.et_pb_button:hover{background-color:hsla(0,0%,100%,.2)}.et_pb_bg_layout_light.et_pb_button:hover,.et_pb_bg_layout_light .et_pb_button:hover{background-color:rgba(0,0,0,.05)}.et_pb_button:after,.et_pb_button:before{font-size:32px;line-height:1em;content:"\35";opacity:0;position:absolute;margin-left:-1em;-webkit-transition:all .2s;transition:all .2s;text-transform:none;-webkit-font-feature-settings:"kern" off;font-feature-settings:"kern" off;font-variant:none;font-style:normal;font-weight:400;text-shadow:none}.et_pb_button.et_hover_enabled:hover:after,.et_pb_button.et_pb_hovered:hover:after{-webkit-transition:none!important;transition:none!important}.et_pb_button:before{display:none}.et_pb_button:hover:after{opacity:1;margin-left:0}.et_pb_column_1_3 h1,.et_pb_column_1_4 h1,.et_pb_column_1_5 h1,.et_pb_column_1_6 h1,.et_pb_column_2_5 h1{font-size:26px}.et_pb_column_1_3 h2,.et_pb_column_1_4 h2,.et_pb_column_1_5 h2,.et_pb_column_1_6 h2,.et_pb_column_2_5 h2{font-size:23px}.et_pb_column_1_3 h3,.et_pb_column_1_4 h3,.et_pb_column_1_5 h3,.et_pb_column_1_6 h3,.et_pb_column_2_5 h3{font-size:20px}.et_pb_column_1_3 h4,.et_pb_column_1_4 h4,.et_pb_column_1_5 h4,.et_pb_column_1_6 h4,.et_pb_column_2_5 h4{font-size:18px}.et_pb_column_1_3 h5,.et_pb_column_1_4 h5,.et_pb_column_1_5 h5,.et_pb_column_1_6 h5,.et_pb_column_2_5 h5{font-size:16px}.et_pb_column_1_3 h6,.et_pb_column_1_4 h6,.et_pb_column_1_5 h6,.et_pb_column_1_6 h6,.et_pb_column_2_5 h6{font-size:15px}.et_pb_bg_layout_dark,.et_pb_bg_layout_dark h1,.et_pb_bg_layout_dark h2,.et_pb_bg_layout_dark h3,.et_pb_bg_layout_dark h4,.et_pb_bg_layout_dark h5,.et_pb_bg_layout_dark h6{color:#fff!important}.et_pb_module.et_pb_text_align_left{text-align:left}.et_pb_module.et_pb_text_align_center{text-align:center}.et_pb_module.et_pb_text_align_right{text-align:right}.et_pb_module.et_pb_text_align_justified{text-align:justify}.clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.et_pb_bg_layout_light .et_pb_more_button{color:#2ea3f2}.et_builder_inner_content{position:relative;z-index:1}header .et_builder_inner_content{z-index:2}.et_pb_css_mix_blend_mode_passthrough{mix-blend-mode:unset!important}.et_pb_image_container{margin:-20px -20px 29px}.et_pb_module_inner{position:relative}.et_hover_enabled_preview{z-index:2}.et_hover_enabled:hover{position:relative;z-index:2}.et_pb_all_tabs,.et_pb_module,.et_pb_posts_nav a,.et_pb_tab,.et_pb_with_background{position:relative;background-size:cover;background-position:50%;background-repeat:no-repeat}.et_pb_background_mask,.et_pb_background_pattern{bottom:0;left:0;position:absolute;right:0;top:0}.et_pb_background_mask{background-size:calc(100% + 2px) calc(100% + 2px);background-repeat:no-repeat;background-position:50%;overflow:hidden}.et_pb_background_pattern{background-position:0 0;background-repeat:repeat}.et_pb_with_border{position:relative;border:0 solid #333}.post-password-required .et_pb_row{padding:0;width:100%}.post-password-required .et_password_protected_form{min-height:0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_password_protected_form h1,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_password_protected_form h1{display:none}.et_pb_no_bg{padding:0!important}.et_overlay.et_pb_inline_icon:before,.et_pb_inline_icon:before{content:attr(data-icon)}.et_pb_more_button{color:inherit;text-shadow:none;text-decoration:none;display:inline-block;margin-top:20px}.et_parallax_bg_wrap{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0}.et_parallax_bg{background-repeat:no-repeat;background-position:top;background-size:cover;position:absolute;bottom:0;left:0;width:100%;height:100%;display:block}.et_parallax_bg.et_parallax_bg__hover,.et_parallax_bg.et_parallax_bg_phone,.et_parallax_bg.et_parallax_bg_tablet,.et_parallax_gradient.et_parallax_gradient__hover,.et_parallax_gradient.et_parallax_gradient_phone,.et_parallax_gradient.et_parallax_gradient_tablet,.et_pb_section_parallax_hover:hover .et_parallax_bg:not(.et_parallax_bg__hover),.et_pb_section_parallax_hover:hover .et_parallax_gradient:not(.et_parallax_gradient__hover){display:none}.et_pb_section_parallax_hover:hover .et_parallax_bg.et_parallax_bg__hover,.et_pb_section_parallax_hover:hover .et_parallax_gradient.et_parallax_gradient__hover{display:block}.et_parallax_gradient{bottom:0;display:block;left:0;position:absolute;right:0;top:0}.et_pb_module.et_pb_section_parallax,.et_pb_posts_nav a.et_pb_section_parallax,.et_pb_tab.et_pb_section_parallax{position:relative}.et_pb_section_parallax .et_pb_parallax_css,.et_pb_slides .et_parallax_bg.et_pb_parallax_css{background-attachment:fixed}body.et-bfb .et_pb_section_parallax .et_pb_parallax_css,body.et-bfb .et_pb_slides .et_parallax_bg.et_pb_parallax_css{background-attachment:scroll;bottom:auto}.et_pb_section_parallax.et_pb_column .et_pb_module,.et_pb_section_parallax.et_pb_row .et_pb_column,.et_pb_section_parallax.et_pb_row .et_pb_module{z-index:9;position:relative}.et_pb_more_button:hover:after{opacity:1;margin-left:0}.et_pb_preload .et_pb_section_video_bg,.et_pb_preload>div{visibility:hidden}.et_pb_preload,.et_pb_section.et_pb_section_video.et_pb_preload{position:relative;background:#464646!important}.et_pb_preload:before{content:"";position:absolute;top:50%;left:50%;background:url(https://zarc.web.za/wp-content/themes/Divi/includes/builder/styles/images/preloader.gif) no-repeat;border-radius:32px;width:32px;height:32px;margin:-16px 0 0 -16px}.box-shadow-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;pointer-events:none}.et_pb_section>.box-shadow-overlay~.et_pb_row{z-index:11}body.safari .section_has_divider{will-change:transform}.et_pb_row>.box-shadow-overlay{z-index:8}.has-box-shadow-overlay{position:relative}.et_clickable{cursor:pointer}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}.et_multi_view_hidden,.et_multi_view_hidden_image{display:none!important}@keyframes multi-view-image-fade{0%{opacity:0}10%{opacity:.1}20%{opacity:.2}30%{opacity:.3}40%{opacity:.4}50%{opacity:.5}60%{opacity:.6}70%{opacity:.7}80%{opacity:.8}90%{opacity:.9}to{opacity:1}}.et_multi_view_image__loading{visibility:hidden}.et_multi_view_image__loaded{-webkit-animation:multi-view-image-fade .5s;animation:multi-view-image-fade .5s}#et-pb-motion-effects-offset-tracker{visibility:hidden!important;opacity:0;position:absolute;top:0;left:0}.et-pb-before-scroll-animation{opacity:0}header.et-l.et-l--header:after{clear:both;display:block;content:""}.et_pb_module{-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes fadeBottom{0%{opacity:0;-webkit-transform:translateY(10%);transform:translateY(10%)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeBottom{0%{opacity:0;-webkit-transform:translateY(10%);transform:translateY(10%)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fadeLeft{0%{opacity:0;-webkit-transform:translateX(-10%);transform:translateX(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeLeft{0%{opacity:0;-webkit-transform:translateX(-10%);transform:translateX(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeRight{0%{opacity:0;-webkit-transform:translateX(10%);transform:translateX(10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeRight{0%{opacity:0;-webkit-transform:translateX(10%);transform:translateX(10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeTop{0%{opacity:0;-webkit-transform:translateY(-10%);transform:translateY(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeTop{0%{opacity:0;-webkit-transform:translateY(-10%);transform:translateY(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.et-waypoint:not(.et_pb_counters){opacity:0}@media (min-width:981px){.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_column .et_pb_module.et-last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_column .et_pb_module:last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_row_inner .et_pb_column .et_pb_module.et-last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_row_inner .et_pb_column .et_pb_module:last-child,.et_pb_section div.et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_pb_section div.et_pb_row .et_pb_column .et_pb_module:last-child{margin-bottom:0}}@media (max-width:980px){.et_overlay.et_pb_inline_icon_tablet:before,.et_pb_inline_icon_tablet:before{content:attr(data-icon-tablet)}.et_parallax_bg.et_parallax_bg_tablet_exist,.et_parallax_gradient.et_parallax_gradient_tablet_exist{display:none}.et_parallax_bg.et_parallax_bg_tablet,.et_parallax_gradient.et_parallax_gradient_tablet{display:block}.et_pb_column .et_pb_module{margin-bottom:30px}.et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_pb_row .et_pb_column .et_pb_module:last-child,.et_section_specialty .et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_section_specialty .et_pb_row .et_pb_column .et_pb_module:last-child{margin-bottom:0}.et_pb_more_button{display:inline-block!important}.et_pb_bg_layout_light_tablet.et_pb_button,.et_pb_bg_layout_light_tablet.et_pb_module.et_pb_button,.et_pb_bg_layout_light_tablet .et_pb_more_button{color:#2ea3f2}.et_pb_bg_layout_light_tablet .et_pb_forgot_password a{color:#666}.et_pb_bg_layout_light_tablet h1,.et_pb_bg_layout_light_tablet h2,.et_pb_bg_layout_light_tablet h3,.et_pb_bg_layout_light_tablet h4,.et_pb_bg_layout_light_tablet h5,.et_pb_bg_layout_light_tablet h6{color:#333!important}.et_pb_module .et_pb_bg_layout_light_tablet.et_pb_button{color:#2ea3f2!important}.et_pb_bg_layout_light_tablet{color:#666!important}.et_pb_bg_layout_dark_tablet,.et_pb_bg_layout_dark_tablet h1,.et_pb_bg_layout_dark_tablet h2,.et_pb_bg_layout_dark_tablet h3,.et_pb_bg_layout_dark_tablet h4,.et_pb_bg_layout_dark_tablet h5,.et_pb_bg_layout_dark_tablet h6{color:#fff!important}.et_pb_bg_layout_dark_tablet.et_pb_button,.et_pb_bg_layout_dark_tablet.et_pb_module.et_pb_button,.et_pb_bg_layout_dark_tablet .et_pb_more_button{color:inherit}.et_pb_bg_layout_dark_tablet .et_pb_forgot_password a{color:#fff}.et_pb_module.et_pb_text_align_left-tablet{text-align:left}.et_pb_module.et_pb_text_align_center-tablet{text-align:center}.et_pb_module.et_pb_text_align_right-tablet{text-align:right}.et_pb_module.et_pb_text_align_justified-tablet{text-align:justify}}@media (max-width:767px){.et_pb_more_button{display:inline-block!important}.et_overlay.et_pb_inline_icon_phone:before,.et_pb_inline_icon_phone:before{content:attr(data-icon-phone)}.et_parallax_bg.et_parallax_bg_phone_exist,.et_parallax_gradient.et_parallax_gradient_phone_exist{display:none}.et_parallax_bg.et_parallax_bg_phone,.et_parallax_gradient.et_parallax_gradient_phone{display:block}.et-hide-mobile{display:none!important}.et_pb_bg_layout_light_phone.et_pb_button,.et_pb_bg_layout_light_phone.et_pb_module.et_pb_button,.et_pb_bg_layout_light_phone .et_pb_more_button{color:#2ea3f2}.et_pb_bg_layout_light_phone .et_pb_forgot_password a{color:#666}.et_pb_bg_layout_light_phone h1,.et_pb_bg_layout_light_phone h2,.et_pb_bg_layout_light_phone h3,.et_pb_bg_layout_light_phone h4,.et_pb_bg_layout_light_phone h5,.et_pb_bg_layout_light_phone h6{color:#333!important}.et_pb_module .et_pb_bg_layout_light_phone.et_pb_button{color:#2ea3f2!important}.et_pb_bg_layout_light_phone{color:#666!important}.et_pb_bg_layout_dark_phone,.et_pb_bg_layout_dark_phone h1,.et_pb_bg_layout_dark_phone h2,.et_pb_bg_layout_dark_phone h3,.et_pb_bg_layout_dark_phone h4,.et_pb_bg_layout_dark_phone h5,.et_pb_bg_layout_dark_phone h6{color:#fff!important}.et_pb_bg_layout_dark_phone.et_pb_button,.et_pb_bg_layout_dark_phone.et_pb_module.et_pb_button,.et_pb_bg_layout_dark_phone .et_pb_more_button{color:inherit}.et_pb_module .et_pb_bg_layout_dark_phone.et_pb_button{color:#fff!important}.et_pb_bg_layout_dark_phone .et_pb_forgot_password a{color:#fff}.et_pb_module.et_pb_text_align_left-phone{text-align:left}.et_pb_module.et_pb_text_align_center-phone{text-align:center}.et_pb_module.et_pb_text_align_right-phone{text-align:right}.et_pb_module.et_pb_text_align_justified-phone{text-align:justify}}@media (max-width:479px){a.et_pb_more_button{display:block}}@media (min-width:768px) and (max-width:980px){[data-et-multi-view-load-tablet-hidden=true]:not(.et_multi_view_swapped){display:none!important}}@media (max-width:767px){[data-et-multi-view-load-phone-hidden=true]:not(.et_multi_view_swapped){display:none!important}}.et_pb_menu.et_pb_menu--style-inline_centered_logo .et_pb_menu__menu nav ul{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}@-webkit-keyframes multi-view-image-fade{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}50%{-webkit-transform:scale(1.01);transform:scale(1.01);opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@font-face{font-family:ETmodules;font-display:block;src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.eot);src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.eot?#iefix) format("embedded-opentype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.woff) format("woff"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.ttf) format("truetype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.svg#ETmodules) format("svg");font-weight:400;font-style:normal}@media (min-width:981px){.et_pb_gutters3 .et_pb_column,.et_pb_gutters3.et_pb_row .et_pb_column{margin-right:5.5%}.et_pb_gutters3 .et_pb_column_4_4,.et_pb_gutters3.et_pb_row .et_pb_column_4_4{width:100%}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_module{margin-bottom:2.75%}.et_pb_gutters3 .et_pb_column_3_4,.et_pb_gutters3.et_pb_row .et_pb_column_3_4{width:73.625%}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_module{margin-bottom:3.735%}.et_pb_gutters3 .et_pb_column_2_3,.et_pb_gutters3.et_pb_row .et_pb_column_2_3{width:64.833%}.et_pb_gutters3 .et_pb_column_2_3 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_module{margin-bottom:4.242%}.et_pb_gutters3 .et_pb_column_3_5,.et_pb_gutters3.et_pb_row .et_pb_column_3_5{width:57.8%}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_module{margin-bottom:4.758%}.et_pb_gutters3 .et_pb_column_1_2,.et_pb_gutters3.et_pb_row .et_pb_column_1_2{width:47.25%}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_module{margin-bottom:5.82%}.et_pb_gutters3 .et_pb_column_2_5,.et_pb_gutters3.et_pb_row .et_pb_column_2_5{width:36.7%}.et_pb_gutters3 .et_pb_column_2_5 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_module{margin-bottom:7.493%}.et_pb_gutters3 .et_pb_column_1_3,.et_pb_gutters3.et_pb_row .et_pb_column_1_3{width:29.6667%}.et_pb_gutters3 .et_pb_column_1_3 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_module{margin-bottom:9.27%}.et_pb_gutters3 .et_pb_column_1_4,.et_pb_gutters3.et_pb_row .et_pb_column_1_4{width:20.875%}.et_pb_gutters3 .et_pb_column_1_4 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_module{margin-bottom:13.174%}.et_pb_gutters3 .et_pb_column_1_5,.et_pb_gutters3.et_pb_row .et_pb_column_1_5{width:15.6%}.et_pb_gutters3 .et_pb_column_1_5 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_module{margin-bottom:17.628%}.et_pb_gutters3 .et_pb_column_1_6,.et_pb_gutters3.et_pb_row .et_pb_column_1_6{width:12.0833%}.et_pb_gutters3 .et_pb_column_1_6 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_module{margin-bottom:22.759%}.et_pb_gutters3 .et_full_width_page.woocommerce-page ul.products li.product{width:20.875%;margin-right:5.5%;margin-bottom:5.5%}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products li.product,.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products li.product{width:28.353%;margin-right:7.47%}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products.columns-1 li.product,.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products.columns-1 li.product{width:100%;margin-right:0}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products.columns-2 li.product,.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products.columns-2 li.product{width:48%;margin-right:4%}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products.columns-2 li:nth-child(2n+2),.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products.columns-2 li:nth-child(2n+2){margin-right:0}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products.columns-2 li:nth-child(3n+1),.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products.columns-2 li:nth-child(3n+1){clear:none}}@media (min-width:981px){.et_pb_gutters3 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters3 .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters3 .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child,.et_pb_gutters3.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters3.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters3.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child{margin-bottom:30px}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_4_4 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_widget{width:20.875%;margin-right:5.5%;margin-bottom:5.5%}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3{width:29.667%;margin-right:5.5%}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post{margin-bottom:18.539%}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_3_4 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_widget{width:28.353%;margin-right:7.47%;margin-bottom:7.47%}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2{width:46.265%;margin-right:7.47%}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:14.941%}.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_widget{width:45.758%;margin-right:8.483%;margin-bottom:8.483%}.et_pb_gutters3 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2{width:45.758%;margin-right:8.483%}.et_pb_gutters3 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:16.967%}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_3_5 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_widget{width:45.242%;margin-right:9.516%;margin-bottom:9.516%}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:9.516%}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_2 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_widget{width:44.18%;margin-right:11.64%;margin-bottom:11.64%}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:11.64%}.et_pb_gutters3 .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_2_5 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_widget{width:100%;margin-bottom:14.986%}.et_pb_gutters3 .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_3 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_widget{width:100%;margin-bottom:18.539%}.et_pb_gutters3 .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_4 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_widget{width:100%;margin-bottom:26.347%}.et_pb_gutters3 .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_5 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_widget{width:100%;margin-bottom:35.256%}.et_pb_gutters3 .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_6 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_widget{width:100%;margin-bottom:45.517%}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_widget:nth-child(4n),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n){margin-right:0}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1){clear:both}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_widget:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n){margin-right:0}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1){clear:both}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_widget:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_widget:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3 .et_pb_column_3_5 .et_pb_widget:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3 .et_pb_column_3_5 .et_pb_widget:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters3 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}}@media (min-width:981px){.et_pb_gutter.et_pb_gutters1 #left-area{width:75%}.et_pb_gutter.et_pb_gutters1 #sidebar{width:25%}.et_pb_gutters1.et_right_sidebar #left-area{padding-right:0}.et_pb_gutters1.et_left_sidebar #left-area{padding-left:0}.et_pb_gutter.et_pb_gutters1.et_right_sidebar #main-content .container:before{right:25%!important}.et_pb_gutter.et_pb_gutters1.et_left_sidebar #main-content .container:before{left:25%!important}.et_pb_gutters1 .et_pb_column,.et_pb_gutters1.et_pb_row .et_pb_column{margin-right:0}.et_pb_gutters1 .et_pb_column_4_4,.et_pb_gutters1.et_pb_row .et_pb_column_4_4{width:100%}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_4,.et_pb_gutters1.et_pb_row .et_pb_column_3_4{width:75%}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_2_3,.et_pb_gutters1.et_pb_row .et_pb_column_2_3{width:66.667%}.et_pb_gutters1 .et_pb_column_2_3 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_5,.et_pb_gutters1.et_pb_row .et_pb_column_3_5{width:60%}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2,.et_pb_gutters1.et_pb_row .et_pb_column_1_2{width:50%}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_2_5,.et_pb_gutters1.et_pb_row .et_pb_column_2_5{width:40%}.et_pb_gutters1 .et_pb_column_2_5 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_3,.et_pb_gutters1.et_pb_row .et_pb_column_1_3{width:33.3333%}.et_pb_gutters1 .et_pb_column_1_3 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_4,.et_pb_gutters1.et_pb_row .et_pb_column_1_4{width:25%}.et_pb_gutters1 .et_pb_column_1_4 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_5,.et_pb_gutters1.et_pb_row .et_pb_column_1_5{width:20%}.et_pb_gutters1 .et_pb_column_1_5 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_6,.et_pb_gutters1.et_pb_row .et_pb_column_1_6{width:16.6667%}.et_pb_gutters1 .et_pb_column_1_6 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_full_width_page.woocommerce-page ul.products li.product{width:25%;margin-right:0;margin-bottom:0}.et_pb_gutters1.et_left_sidebar.woocommerce-page #main-content ul.products li.product,.et_pb_gutters1.et_right_sidebar.woocommerce-page #main-content ul.products li.product{width:33.333%;margin-right:0}}@media (max-width:980px){.et_pb_gutters1 .et_pb_column,.et_pb_gutters1 .et_pb_column .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5{width:50%;margin-right:0}.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6{width:33.333%;margin-right:0}.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6{width:50%;margin-right:0}}@media (max-width:767px){.et_pb_gutters1 .et_pb_column,.et_pb_gutters1 .et_pb_column .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_module{margin-bottom:0}}@media (max-width:479px){.et_pb_gutters1 .et_pb_column,.et_pb_gutters1.et_pb_row .et_pb_column{margin:0!important}.et_pb_gutters1 .et_pb_column .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_module{margin-bottom:0}}@media (min-width:981px){.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child{margin-bottom:30px}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_4_4 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_widget{width:25%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3{width:33.333%;margin-right:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_3_4 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_widget{width:33.333%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2{width:50%;margin-right:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_widget{width:50%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2{width:50%;margin-right:0}.et_pb_gutters1 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_3_5 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_widget{width:50%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_2 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_widget{width:50%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_3 .et_pb_widget,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_2_5 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_widget{width:100%;margin-bottom:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_widget:nth-child(4n),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n){margin-right:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1){clear:both}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_widget:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n){margin-right:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1){clear:both}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_widget:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_widget:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1 .et_pb_column_3_5 .et_pb_widget:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1 .et_pb_column_3_5 .et_pb_widget:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters1 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_portfolio_grid .et_pb_grid_item .et_pb_module_header:last-child,.et_pb_gutters1 .et_pb_portfolio_grid .et_pb_grid_item h2:last-child{line-height:normal}}@media (max-width:980px){.et_pb_gutters1 .et_pb_column .et_pb_grid_item,.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product{margin:0;width:33.333%}.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_column .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_widget{width:50%}.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_widget{margin:0;width:100%}.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_column .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_widget{margin:0}}@media (max-width:767px){.et_pb_gutters1 .et_pb_column .et_pb_grid_item,.et_pb_gutters1 .et_pb_column .et_pb_grid_item.et_pb_portfolio_item,.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.et_pb_portfolio_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product{margin:0;width:50%}.et_pb_gutters1 .et_pb_column .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters1 .et_pb_column .et_pb_grid_item:nth-child(3n),.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n){margin-right:0}.et_pb_gutters1 .et_pb_column .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters1 .et_pb_column .et_pb_grid_item:nth-child(3n+1),.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1){clear:none}.et_pb_gutters1 .et_pb_column .et_pb_grid_item.et_pb_portfolio_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.et_pb_portfolio_item{margin:0;width:100%}.et_pb_gutters1 .et_pb_column .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item{margin:0;width:50%}.et_pb_gutters1 .et_pb_column .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_widget{margin:0;width:100%}}@media (max-width:479px){.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column .et_pb_grid_item,.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_widget{width:100%;margin:0}}@media (min-width:981px){.et_pb_gutter.et_pb_gutters2 #left-area{width:77.25%}.et_pb_gutter.et_pb_gutters2 #sidebar{width:22.75%}.et_pb_gutters2.et_right_sidebar #left-area{padding-right:3%}.et_pb_gutters2.et_left_sidebar #left-area{padding-left:3%}.et_pb_gutter.et_pb_gutters2.et_right_sidebar #main-content .container:before{right:22.75%!important}.et_pb_gutter.et_pb_gutters2.et_left_sidebar #main-content .container:before{left:22.75%!important}.et_pb_gutters2 .et_pb_column,.et_pb_gutters2.et_pb_row .et_pb_column{margin-right:3%}.et_pb_gutters2 .et_pb_column_4_4,.et_pb_gutters2.et_pb_row .et_pb_column_4_4{width:100%}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_module{margin-bottom:1.5%}.et_pb_gutters2 .et_pb_column_3_4,.et_pb_gutters2.et_pb_row .et_pb_column_3_4{width:74.25%}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_module{margin-bottom:2.02%}.et_pb_gutters2 .et_pb_column_2_3,.et_pb_gutters2.et_pb_row .et_pb_column_2_3{width:65.667%}.et_pb_gutters2 .et_pb_column_2_3 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_module{margin-bottom:2.284%}.et_pb_gutters2 .et_pb_column_3_5,.et_pb_gutters2.et_pb_row .et_pb_column_3_5{width:58.8%}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_module{margin-bottom:2.551%}.et_pb_gutters2 .et_pb_column_1_2,.et_pb_gutters2.et_pb_row .et_pb_column_1_2{width:48.5%}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_module{margin-bottom:3.093%}.et_pb_gutters2 .et_pb_column_2_5,.et_pb_gutters2.et_pb_row .et_pb_column_2_5{width:38.2%}.et_pb_gutters2 .et_pb_column_2_5 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_module{margin-bottom:3.927%}.et_pb_gutters2 .et_pb_column_1_3,.et_pb_gutters2.et_pb_row .et_pb_column_1_3{width:31.3333%}.et_pb_gutters2 .et_pb_column_1_3 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_module{margin-bottom:4.787%}.et_pb_gutters2 .et_pb_column_1_4,.et_pb_gutters2.et_pb_row .et_pb_column_1_4{width:22.75%}.et_pb_gutters2 .et_pb_column_1_4 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_module{margin-bottom:6.593%}.et_pb_gutters2 .et_pb_column_1_5,.et_pb_gutters2.et_pb_row .et_pb_column_1_5{width:17.6%}.et_pb_gutters2 .et_pb_column_1_5 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_module{margin-bottom:8.523%}.et_pb_gutters2 .et_pb_column_1_6,.et_pb_gutters2.et_pb_row .et_pb_column_1_6{width:14.1667%}.et_pb_gutters2 .et_pb_column_1_6 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_module{margin-bottom:10.588%}.et_pb_gutters2 .et_full_width_page.woocommerce-page ul.products li.product{width:22.75%;margin-right:3%;margin-bottom:3%}.et_pb_gutters2.et_left_sidebar.woocommerce-page #main-content ul.products li.product,.et_pb_gutters2.et_right_sidebar.woocommerce-page #main-content ul.products li.product{width:30.64%;margin-right:4.04%}}@media (min-width:981px){.et_pb_gutters2 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters2 .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters2 .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child,.et_pb_gutters2.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters2.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters2.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child{margin-bottom:30px}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_4_4 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_widget{width:22.75%;margin-right:3%;margin-bottom:3%}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3{width:31.333%;margin-right:3%}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post{margin-bottom:9.574%}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_3_4 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_widget{width:30.64%;margin-right:4.04%;margin-bottom:4.04%}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2{width:47.98%;margin-right:4.04%}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:8.081%}.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_widget{width:47.716%;margin-right:4.569%;margin-bottom:4.569%}.et_pb_gutters2 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2{width:47.716%;margin-right:4.569%}.et_pb_gutters2 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:9.137%}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_3_5 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_widget{width:47.449%;margin-right:5.102%;margin-bottom:5.102%}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:5.102%}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_2 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_widget{width:46.907%;margin-right:6.186%;margin-bottom:6.186%}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:6.186%}.et_pb_gutters2 .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_2_5 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_widget{width:100%;margin-bottom:7.853%}.et_pb_gutters2 .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_3 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_widget{width:100%;margin-bottom:9.574%}.et_pb_gutters2 .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_4 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_widget{width:100%;margin-bottom:13.187%}.et_pb_gutters2 .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_5 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_widget{width:100%;margin-bottom:17.045%}.et_pb_gutters2 .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_6 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_widget{width:100%;margin-bottom:21.176%}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_widget:nth-child(4n),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n){margin-right:0}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1){clear:both}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_widget:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n){margin-right:0}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1){clear:both}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_widget:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_widget:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2 .et_pb_column_3_5 .et_pb_widget:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2 .et_pb_column_3_5 .et_pb_widget:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters2 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}}.et_pb_widget{float:left;max-width:100%;word-wrap:break-word}.et_pb_widget a{text-decoration:none;color:#666}.et_pb_widget li a:hover{color:#82c0c7}.et_pb_widget ol li,.et_pb_widget ul li{margin-bottom:.5em}.et_pb_widget ol li ol li,.et_pb_widget ul li ul li{margin-left:15px}.et_pb_widget select{width:100%;height:28px;padding:0 5px}.et_pb_widget_area .et_pb_widget a{color:inherit}.et_pb_bg_layout_light .et_pb_widget li a{color:#666}.et_pb_bg_layout_dark .et_pb_widget li a{color:inherit}.et_pb_scroll_top.et-pb-icon{text-align:center;background:rgba(0,0,0,0.4);text-decoration:none;position:fixed;z-index:99999;bottom:125px;right:0px;-webkit-border-top-left-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-bottomleft:5px;border-top-left-radius:5px;border-bottom-left-radius:5px;display:none;cursor:pointer;font-size:30px;padding:5px;color:#fff}.et_pb_scroll_top:before{content:'2'}.et_pb_scroll_top.et-visible{opacity:1;-webkit-animation:fadeInRight 1s 1 cubic-bezier(0.77, 0, 0.175, 1);animation:fadeInRight 1s 1 cubic-bezier(0.77, 0, 0.175, 1)}.et_pb_scroll_top.et-hidden{opacity:0;-webkit-animation:fadeOutRight 1s 1 cubic-bezier(0.77, 0, 0.175, 1);animation:fadeOutRight 1s 1 cubic-bezier(0.77, 0, 0.175, 1)}@-webkit-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;font-display:block;src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.eot);src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.woff2) format("woff2"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.woff) format("woff"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.ttf) format("truetype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.svg#fontawesome) format("svg")}@font-face{font-family:FontAwesome;font-style:normal;font-weight:900;font-display:block;src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.eot);src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.woff2) format("woff2"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.woff) format("woff"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.ttf) format("truetype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.svg#fontawesome) format("svg")}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;font-display:block;src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.eot);src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.woff2) format("woff2"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.woff) format("woff"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.ttf) format("truetype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.svg#fontawesome) format("svg")}.et_pb_section{position:relative;background-color:#fff;background-position:50%;background-size:100%;background-size:cover}.et_pb_section--absolute,.et_pb_section--fixed{width:100%}.et_pb_section.et_section_transparent{background-color:transparent}.et_pb_fullwidth_section{padding:0}.et_pb_fullwidth_section>.et_pb_module:not(.et_pb_post_content):not(.et_pb_fullwidth_post_content) .et_pb_row{padding:0!important}.et_pb_inner_shadow{-webkit-box-shadow:inset 0 0 7px rgba(0,0,0,.07);box-shadow:inset 0 0 7px rgba(0,0,0,.07)}.et_pb_bottom_inside_divider,.et_pb_top_inside_divider{display:block;background-repeat-y:no-repeat;height:100%;position:absolute;pointer-events:none;width:100%;left:0;right:0}.et_pb_bottom_inside_divider.et-no-transition,.et_pb_top_inside_divider.et-no-transition{-webkit-transition:none!important;transition:none!important}.et-fb .section_has_divider.et_fb_element_controls_visible--child>.et_pb_bottom_inside_divider,.et-fb .section_has_divider.et_fb_element_controls_visible--child>.et_pb_top_inside_divider{z-index:1}.et_pb_section_video:not(.et_pb_section--with-menu){overflow:hidden;position:relative}.et_pb_column>.et_pb_section_video_bg{z-index:-1}.et_pb_section_video_bg{visibility:visible;position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;display:block;pointer-events:none;-webkit-transition:display .3s;transition:display .3s}.et_pb_section_video_bg.et_pb_section_video_bg_hover,.et_pb_section_video_bg.et_pb_section_video_bg_phone,.et_pb_section_video_bg.et_pb_section_video_bg_tablet,.et_pb_section_video_bg.et_pb_section_video_bg_tablet_only{display:none}.et_pb_section_video_bg .mejs-controls,.et_pb_section_video_bg .mejs-overlay-play{display:none!important}.et_pb_section_video_bg embed,.et_pb_section_video_bg iframe,.et_pb_section_video_bg object,.et_pb_section_video_bg video{max-width:none}.et_pb_section_video_bg .mejs-video{left:50%;position:absolute;max-width:none}.et_pb_section_video_bg .mejs-overlay-loading{display:none!important}.et_pb_social_network_link .et_pb_section_video{overflow:visible}.et_pb_section_video_on_hover:hover>.et_pb_section_video_bg{display:none}.et_pb_section_video_on_hover:hover>.et_pb_section_video_bg_hover,.et_pb_section_video_on_hover:hover>.et_pb_section_video_bg_hover_inherit{display:block}@media (min-width:981px){.et_pb_section{padding:4% 0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_pb_section,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_pb_section{padding-top:0}.et_pb_fullwidth_section{padding:0}.et_pb_section_video_bg.et_pb_section_video_bg_desktop_only{display:block}}@media (max-width:980px){.et_pb_section{padding:50px 0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_pb_section,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_pb_section{padding-top:0}.et_pb_fullwidth_section{padding:0}.et_pb_section_video_bg.et_pb_section_video_bg_tablet{display:block}.et_pb_section_video_bg.et_pb_section_video_bg_desktop_only{display:none}}@media (min-width:768px){.et_pb_section_video_bg.et_pb_section_video_bg_desktop_tablet{display:block}}@media (min-width:768px) and (max-width:980px){.et_pb_section_video_bg.et_pb_section_video_bg_tablet_only{display:block}}@media (max-width:767px){.et_pb_section_video_bg.et_pb_section_video_bg_phone{display:block}.et_pb_section_video_bg.et_pb_section_video_bg_desktop_tablet{display:none}}.et_pb_row{width:80%;max-width:1080px;margin:auto;position:relative}body.safari .section_has_divider,body.uiwebview .section_has_divider{-webkit-perspective:2000px;perspective:2000px}.section_has_divider .et_pb_row{z-index:5}.et_pb_row_inner{width:100%;position:relative}.et_pb_row.et_pb_row_empty,.et_pb_row_inner:nth-of-type(n+2).et_pb_row_empty{display:none}.et_pb_row:after,.et_pb_row_inner:after{content:"";display:block;clear:both;visibility:hidden;line-height:0;height:0;width:0}.et_pb_row_4col .et-last-child,.et_pb_row_4col .et-last-child-2,.et_pb_row_6col .et-last-child,.et_pb_row_6col .et-last-child-2,.et_pb_row_6col .et-last-child-3{margin-bottom:0}.et_pb_column{float:left;background-size:cover;background-position:50%;position:relative;z-index:2;min-height:1px}.et_pb_column--with-menu{z-index:3}.et_pb_column.et_pb_column_empty{min-height:1px}.et_pb_row .et_pb_column.et-last-child,.et_pb_row .et_pb_column:last-child,.et_pb_row_inner .et_pb_column.et-last-child,.et_pb_row_inner .et_pb_column:last-child{margin-right:0!important}.et_pb_column.et_pb_section_parallax{position:relative}.et_pb_column,.et_pb_row,.et_pb_row_inner{background-size:cover;background-position:50%;background-repeat:no-repeat}@media (min-width:981px){.et_pb_row{padding:2% 0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_pb_row,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_pb_row{padding:0;width:100%}.et_pb_column_3_4 .et_pb_row_inner{padding:3.735% 0}.et_pb_column_2_3 .et_pb_row_inner{padding:4.2415% 0}.et_pb_column_1_2 .et_pb_row_inner,.et_pb_column_3_5 .et_pb_row_inner{padding:5.82% 0}.et_section_specialty>.et_pb_row{padding:0}.et_pb_row_inner{width:100%}.et_pb_column_single{padding:2.855% 0}.et_pb_column_single .et_pb_module.et-first-child,.et_pb_column_single .et_pb_module:first-child{margin-top:0}.et_pb_column_single .et_pb_module.et-last-child,.et_pb_column_single .et_pb_module:last-child{margin-bottom:0}.et_pb_row .et_pb_column.et-last-child,.et_pb_row .et_pb_column:last-child,.et_pb_row_inner .et_pb_column.et-last-child,.et_pb_row_inner .et_pb_column:last-child{margin-right:0!important}.et_pb_row.et_pb_equal_columns,.et_pb_row_inner.et_pb_equal_columns,.et_pb_section.et_pb_equal_columns>.et_pb_row{display:-webkit-box;display:-ms-flexbox;display:flex}.rtl .et_pb_row.et_pb_equal_columns,.rtl .et_pb_row_inner.et_pb_equal_columns,.rtl .et_pb_section.et_pb_equal_columns>.et_pb_row{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.et_pb_row.et_pb_equal_columns>.et_pb_column,.et_pb_section.et_pb_equal_columns>.et_pb_row>.et_pb_column{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}}@media (max-width:980px){.et_pb_row{max-width:1080px}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_pb_row,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_pb_row{padding:0;width:100%}.et_pb_column .et_pb_row_inner,.et_pb_row{padding:30px 0}.et_section_specialty>.et_pb_row{padding:0}.et_pb_column{width:100%;margin-bottom:30px}.et_pb_bottom_divider .et_pb_row:nth-last-child(2) .et_pb_column:last-child,.et_pb_row .et_pb_column.et-last-child,.et_pb_row .et_pb_column:last-child{margin-bottom:0}.et_section_specialty .et_pb_row>.et_pb_column{padding-bottom:0}.et_pb_column.et_pb_column_empty{display:none}.et_pb_row_1-2_1-4_1-4,.et_pb_row_1-2_1-6_1-6_1-6,.et_pb_row_1-4_1-4,.et_pb_row_1-4_1-4_1-2,.et_pb_row_1-5_1-5_3-5,.et_pb_row_1-6_1-6_1-6,.et_pb_row_1-6_1-6_1-6_1-2,.et_pb_row_1-6_1-6_1-6_1-6,.et_pb_row_3-5_1-5_1-5,.et_pb_row_4col,.et_pb_row_5col,.et_pb_row_6col{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4,.et_pb_row_4col>.et_pb_column.et_pb_column_1_4{width:47.25%;margin-right:5.5%}.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4:nth-child(2n),.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4:nth-child(2n),.et_pb_row_4col>.et_pb_column.et_pb_column_1_4:nth-child(2n){margin-right:0}.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4{width:47.25%;margin-right:5.5%}.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_2,.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4:nth-child(odd){margin-right:0}.et_pb_row_1-2_1-4_1-4 .et_pb_column:nth-last-child(-n+2),.et_pb_row_1-4_1-4 .et_pb_column:nth-last-child(-n+2),.et_pb_row_4col .et_pb_column:nth-last-child(-n+2){margin-bottom:0}.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5,.et_pb_row_5col>.et_pb_column.et_pb_column_1_5{width:47.25%;margin-right:5.5%}.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5:nth-child(2n),.et_pb_row_5col>.et_pb_column.et_pb_column_1_5:nth-child(2n){margin-right:0}.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5{width:47.25%;margin-right:5.5%}.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5:nth-child(odd),.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_3_5{margin-right:0}.et_pb_row_3-5_1-5_1-5 .et_pb_column:nth-last-child(-n+2),.et_pb_row_5col .et_pb_column:last-child{margin-bottom:0}.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6,.et_pb_row_6col>.et_pb_column.et_pb_column_1_6{width:29.666%;margin-right:5.5%}.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6:nth-child(3n),.et_pb_row_6col>.et_pb_column.et_pb_column_1_6:nth-child(3n){margin-right:0}.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6{width:29.666%;margin-right:5.5%}.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_2,.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6:last-child{margin-right:0}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2,.et_pb_row_1-2_1-6_1-6_1-6 .et_pb_column:nth-last-child(-n+3),.et_pb_row_6col .et_pb_column:nth-last-child(-n+3){margin-bottom:0}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6{width:29.666%;margin-right:5.5%;margin-bottom:0}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6:last-child{margin-right:0}.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6{width:47.25%;margin-right:5.5%}.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6:nth-child(2n){margin-right:0}.et_pb_row_1-6_1-6_1-6_1-6:nth-last-child(-n+3){margin-bottom:0}}@media (max-width:479px){.et_pb_row .et_pb_column.et_pb_column_1_4,.et_pb_row .et_pb_column.et_pb_column_1_5,.et_pb_row .et_pb_column.et_pb_column_1_6{width:100%;margin:0 0 30px}.et_pb_row .et_pb_column.et_pb_column_1_4.et-last-child,.et_pb_row .et_pb_column.et_pb_column_1_4:last-child,.et_pb_row .et_pb_column.et_pb_column_1_5.et-last-child,.et_pb_row .et_pb_column.et_pb_column_1_5:last-child,.et_pb_row .et_pb_column.et_pb_column_1_6.et-last-child,.et_pb_row .et_pb_column.et_pb_column_1_6:last-child{margin-bottom:0}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6{width:100%;margin:0 0 30px}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6.et-last-child,.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6:last-child{margin-bottom:0}.et_pb_column{width:100%!important}}ul.et_pb_social_media_follow{list-style-type:none!important;margin:0 0 22px;padding:0}.et_pb_social_media_follow li{display:inline-block;margin-bottom:8px;position:relative}.et_pb_social_media_follow li a{margin-right:8px;display:inline-block;text-decoration:none;text-align:center;position:relative}.et_pb_social_media_follow li a.follow_button{padding:0 12px;margin-top:5px;margin-right:25px;font-size:14px;line-height:1.6em;background:rgba(0,0,0,.1);color:rgba(0,0,0,.5);border-radius:3px;border-width:0;border-style:solid;-webkit-transition:all .3s;transition:all .3s}.et_pb_social_media_follow li.last-child a,.et_pb_social_media_follow li:last-child a{margin-right:0}.et_pb_social_media_follow.has_follow_button li.last-child a.icon,.et_pb_social_media_follow.has_follow_button li:last-child a.icon{margin-right:8px}.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.2);color:rgba(0,0,0,.6)}.et_pb_social_media_follow.et_pb_bg_layout_dark li a.follow_button{background:rgba(0,0,0,.6);color:hsla(0,0%,100%,.8)}.et_pb_social_media_follow.et_pb_bg_layout_dark li a.follow_button:hover{background:rgba(0,0,0,.7);color:#fff}.et_pb_social_media_follow li a.icon{height:32px;width:32px;padding:0;-webkit-box-sizing:content-box;box-sizing:content-box}.et_pb_social_media_follow li a.icon:before{height:32px;width:32px;font-size:16px;line-height:32px;display:block;color:#fff;-webkit-transition:color .3s;transition:color .3s;position:relative;z-index:10}.et_pb_social_media_follow li a.icon:hover:before{color:hsla(0,0%,100%,.7)}.et_pb_social_media_follow li a.icon{border-radius:3px}.et_pb_social_media_follow_network_name{display:none}.et_pb_social_icon a.icon{vertical-align:middle}.et_pb_social_icon a.icon:before{font-family:ETmodules;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-shadow:0 0;direction:ltr}.et-pb-social-fa-icon a.icon:before{font-family:FontAwesome}.et-social-telegram a.icon:before{content:"\F3FE"}.et-social-amazon a.icon:before{content:"\F270"}.et-social-bandcamp a.icon:before{content:"\F2D5"}.et-social-bitbucket a.icon:before{content:"\F171"}.et-social-behance a.icon:before{content:"\F1B4"}.et-social-buffer a.icon:before{content:"\F837"}.et-social-codepen a.icon:before{content:"\F1CB"}.et-social-deviantart a.icon:before{content:"\F1BD"}.et-social-flipboard a.icon:before{content:"\F44D"}.et-social-foursquare a.icon:before{content:"\F180"}.et-social-github a.icon:before{content:"\F09B"}.et-social-goodreads a.icon:before{content:"\F3A9"}.et-social-google a.icon:before{content:"\F1A0"}.et-social-houzz a.icon:before{content:"\F27C"}.et-social-itunes a.icon:before{content:"\F3B5"}.et-social-last_fm a.icon:before{content:"\F202"}.et-social-line a.icon:before{content:"\F3C0"}.et-social-medium a.icon:before,.et-social-meetup a.icon:before{content:"\F3C7"}.et-social-odnoklassniki a.icon:before{content:"\F263"}.et-social-patreon a.icon:before{content:"\F3D9"}.et-social-periscope a.icon:before{content:"\F3DA"}.et-social-quora a.icon:before{content:"\F2C4"}.et-social-researchgate a.icon:before{content:"\F4F8"}.et-social-reddit a.icon:before{content:"\F281"}.et-social-snapchat a.icon:before{content:"\F2AC"}.et-social-soundcloud a.icon:before{content:"\F1BE"}.et-social-spotify a.icon:before{content:"\F1BC"}.et-social-steam a.icon:before{content:"\F3F6"}.et-social-tripadvisor a.icon:before{content:"\F262"}.et-social-tiktok a.icon:before{content:"\E07B"}.et-social-twitch a.icon:before{content:"\F1E8"}.et-social-vk a.icon:before{content:"\F189"}.et-social-weibo a.icon:before{content:"\F18A"}.et-social-whatsapp a.icon:before{content:"\F232"}.et-social-xing a.icon:before{content:"\F168"}.et-social-yelp a.icon:before{content:"\F1E9"}.et-social-pinterest a.icon:before{content:"\E095"}.et-social-linkedin a.icon:before{content:"\E09D"}.et-social-tumblr a.icon:before{content:"\E097"}.et-social-skype a.icon:before{content:"\E0A2"}.et-social-flikr a.icon:before{content:"\E0A6"}.et-social-myspace a.icon:before{content:"\E0A1"}.et-social-dribbble a.icon:before{content:"\E09B"}.et-social-youtube a.icon:before{content:"\E0A3"}.et-social-vimeo a.icon:before{content:"\E09C"}@media (max-width:980px){.et_pb_bg_layout_light_tablet.et_pb_social_media_follow li a.follow_button{background:rgba(0,0,0,.1);color:rgba(0,0,0,.5)}.et_pb_bg_layout_light_tablet.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.2);color:rgba(0,0,0,.6)}.et_pb_bg_layout_dark_tablet.et_pb_social_media_follow li a.follow_button{background:rgba(0,0,0,.6);color:hsla(0,0%,100%,.8)}.et_pb_bg_layout_dark_tablet.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.7);color:#fff}}@media (max-width:767px){.et_pb_bg_layout_light_phone.et_pb_social_media_follow li a.follow_button{background:rgba(0,0,0,.1);color:rgba(0,0,0,.5)}.et_pb_bg_layout_light_phone.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.2);color:rgba(0,0,0,.6)}.et_pb_bg_layout_dark_phone.et_pb_social_media_follow li a.follow_button{background:rgba(0,0,0,.6);color:hsla(0,0%,100%,.8)}.et_pb_bg_layout_dark_phone.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.7);color:#fff}}.rtl .et_pb_social_media_follow li a{margin-left:8px;margin-right:0}.et_pb_code_inner{position:relative}.et_pb_search .screen-reader-text{display:none}.et_pb_search{border:1px solid #ddd;border-radius:3px;overflow:hidden}.et_pb_search input.et_pb_s,.et_pb_search input.et_pb_searchsubmit{padding:.715em;margin:0;font-size:14px;line-height:normal!important;border:none;color:#666}.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#666}.et_pb_search input.et_pb_s::-moz-placeholder{color:#666}.et_pb_search input.et_pb_s:-ms-input-placeholder{color:#666}.et_pb_search input.et_pb_s{-webkit-appearance:none;background:transparent;display:inline-block;padding-right:80px;-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.et_pb_search .et_pb_searchform{position:relative}.et_pb_search .et_pb_searchform>div{display:-webkit-box;display:-ms-flexbox;display:flex}.et_pb_search input.et_pb_searchsubmit{min-height:100%!important;background-color:#ddd;cursor:pointer}.et_pb_search.et_pb_text_align_right .et_pb_searchform>div{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.et_pb_search.et_pb_text_align_right input.et_pb_s{text-align:right;padding-left:80px;padding-right:.7em}.et_pb_search.et_pb_text_align_center input.et_pb_s{text-align:center}.et_pb_search.et_pb_hide_search_button input.et_pb_searchsubmit{display:none}.et_pb_search.et_pb_hide_search_button input.et_pb_s{padding-left:.7em;padding-right:.7em}.et_pb_search.et_pb_bg_layout_dark input.et_pb_s{color:#fff;border:2px solid #fff}.et_pb_search.et_pb_bg_layout_dark input.et_pb_s::-webkit-input-placeholder{color:#fff}.et_pb_search.et_pb_bg_layout_dark input.et_pb_s::-moz-placeholder{color:#fff}.et_pb_search.et_pb_bg_layout_dark input.et_pb_s:-ms-input-placeholder{color:#fff}.et_pb_search.et_pb_bg_layout_dark input.et_pb_searchsubmit{background-color:transparent;color:#fff;font-weight:500;border:2px solid #fff}@media (max-width:980px){.et_pb_bg_layout_light_tablet.et_pb_search input.et_pb_s{border:none;color:#666}.et_pb_bg_layout_light_tablet.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#666}.et_pb_bg_layout_light_tablet.et_pb_search input.et_pb_searchsubmit{border:none;color:#666;background-color:#ddd}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_s{color:#fff;border:2px solid #fff}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#fff}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_s::-moz-placeholder{color:#fff}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_s:-ms-input-placeholder{color:#fff}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_searchsubmit{background-color:transparent;color:#fff;font-weight:500;border:2px solid #fff}.et_pb_search.et_pb_text_align_right-tablet .et_pb_searchform>div{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.et_pb_search.et_pb_text_align_right-tablet input.et_pb_s{text-align:right;padding-left:80px;padding-right:.7em}.et_pb_search.et_pb_text_align_center-tablet input.et_pb_s{text-align:center}.et_pb_search.et_pb_text_align_left-tablet .et_pb_searchsubmit{left:auto}.et_pb_search.et_pb_text_align_left-tablet input.et_pb_s{text-align:left;padding-left:.715em}.et_pb_search.et_pb_text_align_center-tablet input.et_pb_s{padding-left:.715em;padding-right:.715em}}@media (max-width:767px){.et_pb_bg_layout_light_phone.et_pb_search input.et_pb_s{border:none;color:#666}.et_pb_bg_layout_light_phone.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#666}.et_pb_bg_layout_light_phone.et_pb_search input.et_pb_searchsubmit{border:none;color:#666;background-color:#ddd}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_s{color:#fff;border:2px solid #fff}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#fff}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_s::-moz-placeholder{color:#fff}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_s:-ms-input-placeholder{color:#fff}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_searchsubmit{background-color:transparent;color:#fff;font-weight:500;border:2px solid #fff}.et_pb_search.et_pb_text_align_right-phone .et_pb_searchform>div{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.et_pb_search.et_pb_text_align_right-phone input.et_pb_s{text-align:right;padding-left:80px;padding-right:.7em}.et_pb_search.et_pb_text_align_center-phone input.et_pb_s{text-align:center}.et_pb_search.et_pb_text_align_left-tablet .et_pb_searchsubmit{left:auto}.et_pb_search.et_pb_text_align_left-tablet input.et_pb_s{text-align:left;padding-left:.715em}.et_pb_search.et_pb_text_align_center-tablet input.et_pb_s{padding-left:.715em;padding-right:.715em}}.et-menu li{display:inline-block;font-size:14px;padding-right:22px}.et-menu>li:last-child{padding-right:0}.et-menu a{color:rgba(0,0,0,.6);text-decoration:none;display:block;position:relative}.et-menu a,.et-menu a:hover{-webkit-transition:all .4s ease-in-out;transition:all .4s ease-in-out}.et-menu a:hover{opacity:.7}.et-menu li>a{padding-bottom:29px;word-wrap:break-word}a.et_pb_menu__icon,button.et_pb_menu__icon{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0;margin:0 11px;font-size:17px;line-height:normal;background:none;border:0;cursor:pointer;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}a.et_pb_menu__icon:after,button.et_pb_menu__icon:after{font-family:ETmodules}a.et_pb_menu__icon__with_count:after,button.et_pb_menu__icon__with_count:after{margin-right:10px}.et_pb_menu__wrap .mobile_menu_bar{-webkit-transform:translateY(3%);transform:translateY(3%)}.et_pb_menu__wrap .mobile_menu_bar:before{top:0}.et_pb_menu__logo{overflow:hidden}.et_pb_menu__logo img{display:block}.et_pb_menu__logo img[src$=".svg"]{width:100%}.et_pb_menu__search-button:after{content:"U"}.et_pb_menu__cart-button:after{content:"\E07A"}@media (max-width:980px){.et-menu{display:none}.et_mobile_nav_menu{display:block;margin-top:-1px}}.et_pb_with_border.et_pb_menu .et_pb_menu__logo img{border:0 solid #333}.et_pb_menu.et_hover_enabled:hover{z-index:auto}.et_pb_menu .et-menu-nav,.et_pb_menu .et-menu-nav>ul{float:none}.et_pb_menu .et-menu-nav>ul{padding:0!important;line-height:1.7em}.et_pb_menu .et-menu-nav>ul ul{padding:20px 0;text-align:left}.et_pb_bg_layout_dark.et_pb_menu ul li a{color:#fff}.et_pb_bg_layout_dark.et_pb_menu ul li a:hover{color:hsla(0,0%,100%,.8)}.et-menu li li.menu-item-has-children>a:first-child:after{top:12px}.et_pb_menu .et-menu-nav>ul.upwards li ul{bottom:100%;top:auto;border-top:none;border-bottom:3px solid #2ea3f2;-webkit-box-shadow:2px -2px 5px rgba(0,0,0,.1);box-shadow:2px -2px 5px rgba(0,0,0,.1)}.et_pb_menu .et-menu-nav>ul.upwards li ul li ul{bottom:-23px}.et_pb_menu .et-menu-nav>ul.upwards li.mega-menu ul ul{bottom:0;top:auto;border:none}.et_pb_menu_inner_container{position:relative}.et_pb_menu .et_pb_menu__wrap{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap;opacity:1}.et_pb_menu .et_pb_menu__wrap--visible{-webkit-animation:fadeInBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeInBottom 1s cubic-bezier(.77,0,.175,1) 1}.et_pb_menu .et_pb_menu__wrap--hidden{opacity:0;-webkit-animation:fadeOutBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeOutBottom 1s cubic-bezier(.77,0,.175,1) 1}.et_pb_menu .et_pb_menu__menu{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.et_pb_menu .et_pb_menu__menu,.et_pb_menu .et_pb_menu__menu>nav,.et_pb_menu .et_pb_menu__menu>nav>ul{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.et_pb_menu .et_pb_menu__menu>nav>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.et_pb_menu .et_pb_menu__menu>nav>ul>li{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;margin:0}.et_pb_menu .et_pb_menu__menu>nav>ul>li.mega-menu{position:static}.et_pb_menu .et_pb_menu__menu>nav>ul>li>ul{top:calc(100% - 1px);left:0}.et_pb_menu .et_pb_menu__menu>nav>ul.upwards>li>ul{top:auto;bottom:calc(100% - 1px)}.et_pb_menu--with-logo .et_pb_menu__menu>nav>ul>li>a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:31px 0;white-space:nowrap}.et_pb_menu--with-logo .et_pb_menu__menu>nav>ul>li>a:after{top:50%!important;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul{padding:0!important}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul>li{margin-top:8px}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul>li>a{padding-bottom:8px}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul.upwards>li{margin-top:0;margin-bottom:8px}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul.upwards>li>a{padding-top:8px;padding-bottom:0}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul.upwards>li>a:after{top:auto;bottom:0}.et_pb_menu .et_pb_menu__icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.et_pb_menu .et-menu{margin-left:-11px;margin-right:-11px}.et_pb_menu .et-menu>li{padding-left:11px;padding-right:11px}.et_pb_menu--style-left_aligned .et_pb_menu_inner_container,.et_pb_menu--style-left_aligned .et_pb_row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.et_pb_menu--style-left_aligned .et_pb_menu__logo-wrap{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-left_aligned .et_pb_menu__logo{margin-right:30px}.rtl .et_pb_menu--style-left_aligned .et_pb_menu__logo{margin-right:0;margin-left:30px}.et_pb_menu--style-left_aligned.et_pb_text_align_center .et_pb_menu__menu>nav>ul,.et_pb_menu--style-left_aligned.et_pb_text_align_center .et_pb_menu__wrap{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.et_pb_menu--style-left_aligned.et_pb_text_align_right .et_pb_menu__menu>nav>ul,.et_pb_menu--style-left_aligned.et_pb_text_align_right .et_pb_menu__wrap{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__menu,.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__menu>nav,.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__wrap{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__menu>nav>ul{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.et_pb_menu--style-centered .et_pb_menu__logo-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-centered .et_pb_menu__logo-wrap,.et_pb_menu--style-centered .et_pb_menu__logo img{margin:0 auto}.et_pb_menu--style-centered .et_pb_menu__menu>nav>ul,.et_pb_menu--style-centered .et_pb_menu__wrap{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.et_pb_menu--style-inline_centered_logo .et_pb_menu_inner_container>.et_pb_menu__logo-wrap,.et_pb_menu--style-inline_centered_logo .et_pb_row>.et_pb_menu__logo-wrap{display:none;margin-bottom:30px}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo,.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo img{margin:0 auto}.et_pb_menu--style-inline_centered_logo .et_pb_menu__wrap{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot .et_pb_menu__logo,.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot .et_pb_menu__logo-wrap{width:100%;height:100%}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot img{max-height:100%}.et_pb_menu .et_pb_menu__logo-slot .et-fb-content-placeholder{min-width:96px}.et_pb_menu .et_pb_menu__search-container{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:stretch;-ms-flex-pack:stretch;justify-content:stretch;-ms-flex-line-pack:stretch;align-content:stretch;left:0;bottom:0;width:100%;height:100%;opacity:0;z-index:999}.et_pb_menu .et_pb_menu__search-container--visible{opacity:1;-webkit-animation:fadeInTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeInTop 1s cubic-bezier(.77,0,.175,1) 1}.et_pb_menu .et_pb_menu__search-container--hidden{-webkit-animation:fadeOutTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeOutTop 1s cubic-bezier(.77,0,.175,1) 1}.et_pb_menu .et_pb_menu__search-container--disabled{display:none}.et_pb_menu .et_pb_menu__search{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:stretch;-ms-flex-pack:stretch;justify-content:stretch;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu .et_pb_menu__search-form{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.et_pb_menu .et_pb_menu__search-input{border:0;width:100%;color:#333;background:transparent}.et_pb_menu .et_pb_menu__close-search-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.et_pb_menu .et_pb_menu__close-search-button:after{content:"M";font-size:1.7em}@media (min-width:981px){.et_dropdown_animation_fade.et_pb_menu ul li:hover>ul{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.et_dropdown_animation_slide.et_pb_menu ul li:hover>ul{-webkit-animation:fadeLeft .4s ease-in-out;animation:fadeLeft .4s ease-in-out}.et_dropdown_animation_expand.et_pb_menu ul li:hover>ul{-webkit-transform-origin:0 0;-webkit-animation:Grow .4s ease-in-out;animation:Grow .4s ease-in-out;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.et_dropdown_animation_flip.et_pb_menu ul li ul li:hover>ul{-webkit-animation:flipInX .6s ease-in-out;animation:flipInX .6s ease-in-out;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.et_dropdown_animation_flip.et_pb_menu ul li:hover>ul{-webkit-animation:flipInY .6s ease-in-out;animation:flipInY .6s ease-in-out;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.et_pb_menu.et_pb_menu_fullwidth .et_pb_row{width:100%;max-width:100%;padding:0 30px!important}}@media (max-width:980px){.et_pb_menu--style-left_aligned .et_pb_menu_inner_container,.et_pb_menu--style-left_aligned .et_pb_row{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-left_aligned .et_pb_menu__wrap{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.et_pb_menu--style-left_aligned.et_pb_text_align_center .et_pb_menu__wrap{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.et_pb_menu--style-left_aligned.et_pb_text_align_right .et_pb_menu__wrap{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__wrap{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.et_pb_menu--style-inline_centered_logo .et_pb_menu_inner_container>.et_pb_menu__logo-wrap,.et_pb_menu--style-inline_centered_logo .et_pb_row>.et_pb_menu__logo-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-inline_centered_logo .et_pb_menu_inner_container>.et_pb_menu__logo,.et_pb_menu--style-inline_centered_logo .et_pb_row>.et_pb_menu__logo{margin:0 auto}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot{display:none}.et_pb_menu .et_pb_row{min-height:81px}.et_pb_menu .et_pb_menu__menu{display:none}.et_pb_menu .et_mobile_nav_menu{float:none;margin:0 6px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu .et_mobile_menu{top:100%;padding:5%}.et_pb_menu .et_mobile_menu,.et_pb_menu .et_mobile_menu ul{list-style:none!important;text-align:left}.et_pb_menu .et_mobile_menu ul{padding:0}.et_pb_menu .et_pb_mobile_menu_upwards .et_mobile_menu{top:auto;bottom:100%}}@-webkit-keyframes fadeOutTop{0%{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}to{opacity:0;-webkit-transform:translatey(-60%);transform:translatey(-60%)}}@keyframes fadeOutTop{0%{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}to{opacity:0;-webkit-transform:translatey(-60%);transform:translatey(-60%)}}@-webkit-keyframes fadeInTop{0%{opacity:0;-webkit-transform:translatey(-60%);transform:translatey(-60%)}to{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}}@keyframes fadeInTop{0%{opacity:0;-webkit-transform:translatey(-60%);transform:translatey(-60%)}to{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}}@-webkit-keyframes fadeInBottom{0%{opacity:0;-webkit-transform:translatey(60%);transform:translatey(60%)}to{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}}@keyframes fadeInBottom{0%{opacity:0;-webkit-transform:translatey(60%);transform:translatey(60%)}to{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}}@-webkit-keyframes fadeOutBottom{0%{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}to{opacity:0;-webkit-transform:translatey(60%);transform:translatey(60%)}}@keyframes fadeOutBottom{0%{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}to{opacity:0;-webkit-transform:translatey(60%);transform:translatey(60%)}}@-webkit-keyframes Grow{0%{opacity:0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes Grow{0%{opacity:0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}/*!* Animate.css - http://daneden.me/animate* Licensed under the MIT license - http://opensource.org/licenses/MIT* Copyright (c) 2015 Daniel Eden*/@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}#main-header{line-height:23px;font-weight:500;top:0;background-color:#fff;width:100%;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1);position:relative;z-index:99999}.nav li li{padding:0 20px;margin:0}.et-menu li li a{padding:6px 20px;width:200px}.nav li{position:relative;line-height:1em}.nav li li{position:relative;line-height:2em}.nav li ul{position:absolute;padding:20px 0;z-index:9999;width:240px;background:#fff;visibility:hidden;opacity:0;border-top:3px solid #2ea3f2;box-shadow:0 2px 5px rgba(0,0,0,.1);-moz-box-shadow:0 2px 5px rgba(0,0,0,.1);-webkit-box-shadow:0 2px 5px rgba(0,0,0,.1);-webkit-transform:translateZ(0);text-align:left}.nav li.et-hover>ul{visibility:visible}.nav li.et-touch-hover>ul,.nav li:hover>ul{opacity:1;visibility:visible}.nav li li ul{z-index:1000;top:-23px;left:240px}.nav li.et-reverse-direction-nav li ul{left:auto;right:240px}.nav li:hover{visibility:inherit}.et_mobile_menu li a,.nav li li a{font-size:14px;-webkit-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;transition:opacity .2s ease-in-out,background-color .2s ease-in-out}.et_mobile_menu li a:hover,.nav ul li a:hover{background-color:rgba(0,0,0,.03);opacity:.7}.et-dropdown-removing>ul{display:none}.mega-menu .et-dropdown-removing>ul{display:block}.et-menu .menu-item-has-children>a:first-child:after{font-family:ETmodules;content:"3";font-size:16px;position:absolute;right:0;top:0;font-weight:800}.et-menu .menu-item-has-children>a:first-child{padding-right:20px}.et-menu li li.menu-item-has-children>a:first-child:after{right:20px;top:6px}.et-menu-nav li.mega-menu{position:inherit}.et-menu-nav li.mega-menu>ul{padding:30px 20px;position:absolute!important;width:100%;left:0!important}.et-menu-nav li.mega-menu ul li{margin:0;float:left!important;display:block!important;padding:0!important}.et-menu-nav li.mega-menu li>ul{-webkit-animation:none!important;animation:none!important;padding:0;border:none;left:auto;top:auto;width:240px!important;position:relative;box-shadow:none;-webkit-box-shadow:none}.et-menu-nav li.mega-menu li ul{visibility:visible;opacity:1;display:none}.et-menu-nav li.mega-menu.et-hover li ul,.et-menu-nav li.mega-menu:hover li ul{display:block}.et-menu-nav li.mega-menu:hover>ul{opacity:1!important;visibility:visible!important}.et-menu-nav li.mega-menu>ul>li>a:first-child{padding-top:0!important;font-weight:700;border-bottom:1px solid rgba(0,0,0,.03)}.et-menu-nav li.mega-menu>ul>li>a:first-child:hover{background-color:transparent!important}.et-menu-nav li.mega-menu li>a{width:200px!important}.et-menu-nav li.mega-menu.mega-menu-parent li>a,.et-menu-nav li.mega-menu.mega-menu-parent li li{width:100%!important}.et-menu-nav li.mega-menu.mega-menu-parent li>.sub-menu{float:left;width:100%!important}.et-menu-nav li.mega-menu>ul>li{width:25%;margin:0}.et-menu-nav li.mega-menu.mega-menu-parent-3>ul>li{width:33.33%}.et-menu-nav li.mega-menu.mega-menu-parent-2>ul>li{width:50%}.et-menu-nav li.mega-menu.mega-menu-parent-1>ul>li{width:100%}.et_pb_fullwidth_menu li.mega-menu .menu-item-has-children>a:first-child:after,.et_pb_menu li.mega-menu .menu-item-has-children>a:first-child:after{display:none}.et_fullwidth_nav #top-menu li.mega-menu>ul{width:auto;left:30px!important;right:30px!important}.et_mobile_menu{position:absolute;left:0;padding:5%;background:#fff;width:100%;visibility:visible;opacity:1;display:none;z-index:9999;border-top:3px solid #2ea3f2;box-shadow:0 2px 5px rgba(0,0,0,.1);-moz-box-shadow:0 2px 5px rgba(0,0,0,.1);-webkit-box-shadow:0 2px 5px rgba(0,0,0,.1)}#main-header .et_mobile_menu li ul,.et_pb_fullwidth_menu .et_mobile_menu li ul,.et_pb_menu .et_mobile_menu li ul{visibility:visible!important;display:block!important;padding-left:10px}.et_mobile_menu li li{padding-left:5%}.et_mobile_menu li a{border-bottom:1px solid rgba(0,0,0,.03);color:#666;padding:10px 5%;display:block}.et_mobile_menu .menu-item-has-children>a{font-weight:700;background-color:rgba(0,0,0,.03)}.et_mobile_menu li .menu-item-has-children>a{background-color:transparent}.et_mobile_nav_menu{float:right;display:none}.mobile_menu_bar{position:relative;display:block;line-height:0}.mobile_menu_bar:before{content:"a";font-size:32px;position:relative;left:0;top:0;cursor:pointer}.et_pb_module .mobile_menu_bar:before{top:2px}.mobile_nav .select_page{display:none}.et_pb_bg_layout_light.et_pb_module.et_pb_button{color:#2ea3f2}.et_pb_module.et_pb_button{display:inline-block;color:inherit}.et_pb_button_module_wrapper.et_pb_button_alignment_left{text-align:left}.et_pb_button_module_wrapper.et_pb_button_alignment_right{text-align:right}.et_pb_button_module_wrapper.et_pb_button_alignment_center{text-align:center}.et_pb_button_module_wrapper>a{display:inline-block}@media (max-width:980px){.et_pb_button_module_wrapper.et_pb_button_alignment_tablet_left{text-align:left}.et_pb_button_module_wrapper.et_pb_button_alignment_tablet_right{text-align:right}.et_pb_button_module_wrapper.et_pb_button_alignment_tablet_center{text-align:center}}@media (max-width:767px){.et_pb_button_module_wrapper.et_pb_button_alignment_phone_left{text-align:left}.et_pb_button_module_wrapper.et_pb_button_alignment_phone_right{text-align:right}.et_pb_button_module_wrapper.et_pb_button_alignment_phone_center{text-align:center}}.et_pb_button[data-icon]:not([data-icon=""]):after{content:attr(data-icon)}@media (max-width:980px){.et_pb_button[data-icon-tablet]:not([data-icon-tablet=""]):after{content:attr(data-icon-tablet)}}@media (max-width:767px){.et_pb_button[data-icon-phone]:not([data-icon-phone=""]):after{content:attr(data-icon-phone)}}.et_pb_text{word-wrap:break-word}.et_pb_text ol,.et_pb_text ul{padding-bottom:1em}.et_pb_text>:last-child{padding-bottom:0}.et_pb_text_inner{position:relative}.et_pb_with_border .et-pb-icon,.et_pb_with_border .et_pb_image_wrap{border:0 solid #333}.et_pb_blurb_content{max-width:550px;margin:0 auto;position:relative;text-align:center;word-wrap:break-word;width:100%}.et_pb_blurb.et_pb_text_align_left .et_pb_blurb_content .et_pb_blurb_container{text-align:left}.et_pb_blurb.et_pb_text_align_right .et_pb_blurb_content .et_pb_blurb_container{text-align:right}.et_pb_blurb.et_pb_text_align_justified .et_pb_blurb_content .et_pb_blurb_container{text-align:justify}.et_pb_blurb.et_pb_text_align_center .et_pb_blurb_content .et_pb_blurb_container{text-align:center}.et_pb_blurb_content p:last-of-type{padding-bottom:0}.et_pb_blurb .et_pb_module_header a,.et_pb_blurb h4 a{text-decoration:none}.et_pb_blurb .et_pb_image_wrap{display:block;margin:auto}.et_pb_main_blurb_image img{border-radius:inherit}.et_pb_main_blurb_image img[src*=".svg"]{width:auto}.et_pb_sticky_module .et_pb_main_blurb_image .et_pb_image_wrap{width:100%;max-width:100%}.et_pb_blurb_position_left .et_pb_blurb_content,.et_pb_blurb_position_right .et_pb_blurb_content{display:table}.et_pb_blurb_position_left .et_pb_main_blurb_image,.et_pb_blurb_position_right .et_pb_main_blurb_image{width:32px;display:table-cell;line-height:0}.et_pb_blurb_position_left .et_pb_main_blurb_image img,.et_pb_blurb_position_right .et_pb_main_blurb_image img{width:inherit}.et_pb_blurb_position_left .et-pb-icon,.et_pb_blurb_position_right .et-pb-icon{font-size:32px}.et_pb_blurb_position_right .et-pb-icon{display:table-cell}.et_pb_blurb_position_left .et_pb_blurb_container,.et_pb_blurb_position_right .et_pb_blurb_container{display:table-cell;vertical-align:top}.et_pb_blurb_position_left .et_pb_blurb_container{padding-left:15px}.et_pb_blurb_position_left .et_pb_blurb_content{text-align:left}.et_pb_blurb_position_right .et_pb_blurb_container{padding-right:15px}.et_pb_blurb_position_right .et_pb_blurb_content{text-align:right}.et_pb_blurb_position_right .et_pb_main_blurb_image{left:auto;right:0}.et_pb_blurb_position_right .et-pb-icon{margin-right:0;margin-left:20px}.et_pb_main_blurb_image{display:inline-block;margin-bottom:30px;line-height:0;max-width:100%}@media (max-width:980px){.et_pb_blurb_position_left_tablet .et_pb_main_blurb_image,.et_pb_blurb_position_right_tablet .et_pb_main_blurb_image{width:32px;display:table-cell;line-height:0}.et_pb_blurb_position_left_tablet .et_pb_main_blurb_image img,.et_pb_blurb_position_right_tablet .et_pb_main_blurb_image img{width:inherit}.et_pb_blurb_position_left_tablet .et-pb-icon,.et_pb_blurb_position_right_tablet .et-pb-icon{font-size:32px;display:table-cell}.et_pb_blurb_position_left_tablet .et_pb_blurb_container,.et_pb_blurb_position_right_tablet .et_pb_blurb_container{display:table-cell;vertical-align:top}.et_pb_blurb_position_left_tablet .et_pb_blurb_container{padding-left:15px}.et_pb_blurb_position_left_tablet .et_pb_blurb_content{text-align:left}.et_pb_blurb_position_right_tablet .et_pb_blurb_container{padding-right:15px}.et_pb_blurb_position_right_tablet .et_pb_blurb_content{padding-right:52px;text-align:right}.et_pb_blurb_position_right_tablet .et_pb_main_blurb_image{left:auto;right:0}.et_pb_blurb_position_right_tablet .et-pb-icon{margin-right:0;margin-left:20px}.et_pb_blurb_position_top_tablet .et_pb_main_blurb_image{display:block;width:auto}.et_pb_blurb_position_top_tablet .et-pb-icon{font-size:96px;display:initial}.et_pb_blurb_position_top_tablet .et_pb_blurb_container{display:block;padding-left:0;padding-right:0}.et_pb_blurb_position_top_tablet .et_pb_blurb_content{display:inline-block;text-align:center;padding-right:0}}@media (max-width:767px){.et_pb_blurb_position_left_phone .et_pb_main_blurb_image,.et_pb_blurb_position_right_phone .et_pb_main_blurb_image{width:32px;display:table-cell;line-height:0}.et_pb_blurb_position_left_phone .et_pb_main_blurb_image img,.et_pb_blurb_position_right_phone .et_pb_main_blurb_image img{width:inherit}.et_pb_blurb_position_left_phone .et-pb-icon,.et_pb_blurb_position_right_phone .et-pb-icon{font-size:32px;display:table-cell}.et_pb_blurb_position_left_phone .et_pb_blurb_container,.et_pb_blurb_position_right_phone .et_pb_blurb_container{display:table-cell;vertical-align:top}.et_pb_blurb_position_left_phone .et_pb_blurb_container{padding-left:15px}.et_pb_blurb_position_left_phone .et_pb_blurb_content{text-align:left}.et_pb_blurb_position_right_phone .et_pb_blurb_container{padding-right:15px}.et_pb_blurb_position_right_phone .et_pb_blurb_content{padding-right:52px;text-align:right}.et_pb_blurb_position_right_phone .et_pb_main_blurb_image{left:auto;right:0}.et_pb_blurb_position_right_phone .et-pb-icon{margin-right:0;margin-left:20px}.et_pb_blurb_position_top_phone .et_pb_main_blurb_image{display:block;width:auto}.et_pb_blurb_position_top_phone .et-pb-icon{font-size:96px;display:initial}.et_pb_blurb_position_top_phone .et_pb_blurb_container{display:block;padding-left:0;padding-right:0}.et_pb_blurb_position_top_phone .et_pb_blurb_content{display:inline-block;text-align:center;padding-right:0}}@media (max-width:980px){.et_pb_blurb.et_pb_text_align_left-tablet .et_pb_blurb_content .et_pb_blurb_container{text-align:left}.et_pb_blurb.et_pb_text_align_right-tablet .et_pb_blurb_content .et_pb_blurb_container{text-align:right}.et_pb_blurb.et_pb_text_align_justified-tablet .et_pb_blurb_content .et_pb_blurb_container{text-align:justify}.et_pb_blurb.et_pb_text_align_center-tablet .et_pb_blurb_content .et_pb_blurb_container{text-align:center}}@media (max-width:767px){.et_pb_blurb.et_pb_text_align_left-phone .et_pb_blurb_content .et_pb_blurb_container{text-align:left}.et_pb_blurb.et_pb_text_align_right-phone .et_pb_blurb_content .et_pb_blurb_container{text-align:right}.et_pb_blurb.et_pb_text_align_justified-phone .et_pb_blurb_content .et_pb_blurb_container{text-align:justify}.et_pb_blurb.et_pb_text_align_center-phone .et_pb_blurb_content .et_pb_blurb_container{text-align:center}}.et-waypoint.et_pb_animation_off,.et-waypoint:not(.et_pb_counters).et_pb_animation_off,.et_pb_animation_off{opacity:1}.et-waypoint.et_pb_animation_left.et-animated,.et_pb_animation_left.et-animated{opacity:1;-webkit-animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_right.et-animated,.et_pb_animation_right.et-animated{opacity:1;-webkit-animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_top.et-animated,.et_pb_animation_top.et-animated{opacity:1;-webkit-animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_bottom.et-animated,.et_pb_animation_bottom.et-animated{opacity:1;-webkit-animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_fade_in.et-animated,.et_pb_animation_fade_in.et-animated{opacity:1;-webkit-animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1}@media (max-width:980px){.et-waypoint.et_pb_animation_off_tablet,.et-waypoint:not(.et_pb_counters).et_pb_animation_off_tablet,.et_pb_animation_off_tablet{opacity:1;-webkit-animation:none;animation:none}.et-waypoint.et_pb_animation_left_tablet.et-animated,.et_pb_animation_left_tablet.et-animated{opacity:1;-webkit-animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_right_tablet.et-animated,.et_pb_animation_right_tablet.et-animated{opacity:1;-webkit-animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_top_tablet.et-animated,.et_pb_animation_top_tablet.et-animated{opacity:1;-webkit-animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_bottom_tablet.et-animated,.et_pb_animation_bottom_tablet.et-animated{opacity:1;-webkit-animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_fade_in_tablet.et-animated,.et_pb_animation_fade_in_tablet.et-animated{opacity:1;-webkit-animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1}}@media (max-width:767px){.et-waypoint.et_pb_animation_off_phone,.et-waypoint:not(.et_pb_counters).et_pb_animation_off_phone,.et_pb_animation_off_phone{opacity:1;-webkit-animation:none;animation:none}.et-waypoint.et_pb_animation_left_phone.et-animated,.et_pb_animation_left_phone.et-animated{opacity:1;-webkit-animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_right_phone.et-animated,.et_pb_animation_right_phone.et-animated{opacity:1;-webkit-animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_top_phone.et-animated,.et_pb_animation_top_phone.et-animated{opacity:1;-webkit-animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_bottom_phone.et-animated,.et_pb_animation_bottom_phone.et-animated{opacity:1;-webkit-animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_fade_in_phone.et-animated,.et_pb_animation_fade_in_phone.et-animated{opacity:1;-webkit-animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1}}.et_pb_with_border .et_pb_image_wrap{border:0 solid #333}.et_pb_image{margin-left:auto;margin-right:auto;line-height:0}.et_pb_image.aligncenter{text-align:center}.et_pb_image.et_pb_has_overlay a.et_pb_lightbox_image{display:block;position:relative}.et_pb_image{display:block}.et_pb_image .et_pb_image_wrap{display:inline-block;position:relative;max-width:100%}.et_pb_image .et_pb_image_wrap img[src*=".svg"]{width:auto}.et_pb_image img{position:relative}.et_pb_image_sticky{margin-bottom:0!important;display:inherit}.et_pb_image.et_pb_has_overlay .et_pb_image_wrap:hover .et_overlay{z-index:3;opacity:1}@media (min-width:981px){.et_pb_section_sticky,.et_pb_section_sticky.et_pb_bottom_divider .et_pb_row:nth-last-child(2),.et_pb_section_sticky .et_pb_column_single,.et_pb_section_sticky .et_pb_row.et-last-child,.et_pb_section_sticky .et_pb_row:last-child,.et_pb_section_sticky .et_pb_specialty_column .et_pb_row_inner.et-last-child,.et_pb_section_sticky .et_pb_specialty_column .et_pb_row_inner:last-child{padding-bottom:0!important}}@media (max-width:980px){.et_pb_image_sticky_tablet{margin-bottom:0!important;display:inherit}.et_pb_section_sticky_mobile,.et_pb_section_sticky_mobile.et_pb_bottom_divider .et_pb_row:nth-last-child(2),.et_pb_section_sticky_mobile .et_pb_column_single,.et_pb_section_sticky_mobile .et_pb_row.et-last-child,.et_pb_section_sticky_mobile .et_pb_row:last-child,.et_pb_section_sticky_mobile .et_pb_specialty_column .et_pb_row_inner.et-last-child,.et_pb_section_sticky_mobile .et_pb_specialty_column .et_pb_row_inner:last-child{padding-bottom:0!important}.et_pb_section_sticky .et_pb_row.et-last-child .et_pb_column.et_pb_row_sticky.et-last-child,.et_pb_section_sticky .et_pb_row:last-child .et_pb_column.et_pb_row_sticky:last-child{margin-bottom:0}.et_pb_image_bottom_space_tablet{margin-bottom:30px!important;display:block}.et_always_center_on_mobile{text-align:center!important;margin-left:auto!important;margin-right:auto!important}}@media (max-width:767px){.et_pb_image_sticky_phone{margin-bottom:0!important;display:inherit}.et_pb_image_bottom_space_phone{margin-bottom:30px!important;display:block}}.et_overlay{z-index:-1;position:absolute;top:0;left:0;display:block;width:100%;height:100%;background:hsla(0,0%,100%,.9);opacity:0;pointer-events:none;-webkit-transition:all .3s;transition:all .3s;border:1px solid #e5e5e5;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-font-smoothing:antialiased}.et_overlay:before{color:#2ea3f2;content:"\E050";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:32px;-webkit-transition:all .4s;transition:all .4s}.et_portfolio_image,.et_shop_image{position:relative;display:block}.et_pb_has_overlay:not(.et_pb_image):hover .et_overlay,.et_portfolio_image:hover .et_overlay,.et_shop_image:hover .et_overlay{z-index:3;opacity:1}#ie7 .et_overlay,#ie8 .et_overlay{display:none}.et_pb_module.et_pb_has_overlay{position:relative}.et_pb_module.et_pb_has_overlay .et_overlay,article.et_pb_has_overlay{border:none}/* */(function ($) {$(document).ready(function () {$('.et_pb_module.et_pb_accordion .et_pb_accordion_item.et_pb_toggle_open').addClass('et_pb_toggle_close').removeClass('et_pb_toggle_open');});})(jQuery)jQuery(function ($) {$(document).ready(function () {$('body ul.et_mobile_menu li.menu-item-has-children, body ul.et_mobile_menu li.page_item_has_children').append('',);$('ul.et_mobile_menu li.menu-item-has-children .mobile-toggle, ul.et_mobile_menu li.page_item_has_children .mobile-toggle').click(function (event) {event.preventDefault();event.stopPropagation();$(this).parent('li').toggleClass('dt-open');$(this).parent('li').find('ul.children').first().toggleClass('visible');$(this).parent('li').find('ul.sub-menu').first().toggleClass('visible');});$('.mobile-toggle').on('mouseover', function () {$(this).parent().addClass('is-hover');}).on('mouseout', function () {$(this).parent().removeClass('is-hover');});});});body,.et_pb_column_1_2 .et_quote_content blockquote cite,.et_pb_column_1_2 .et_link_content a.et_link_main_url,.et_pb_column_1_3 .et_quote_content blockquote cite,.et_pb_column_3_8 .et_quote_content blockquote cite,.et_pb_column_1_4 .et_quote_content blockquote cite,.et_pb_blog_grid .et_quote_content blockquote cite,.et_pb_column_1_3 .et_link_content a.et_link_main_url,.et_pb_column_3_8 .et_link_content a.et_link_main_url,.et_pb_column_1_4 .et_link_content a.et_link_main_url,.et_pb_blog_grid .et_link_content a.et_link_main_url,body .et_pb_bg_layout_light .et_pb_post p,body .et_pb_bg_layout_dark .et_pb_post p{font-size:14px}.et_pb_slide_content,.et_pb_best_value{font-size:15px}body{color:#150e45}h1,h2,h3,h4,h5,h6{color:#150e45}body,.et_pb_column_1_2 .et_quote_content blockquote cite,.et_pb_column_1_2 .et_link_content a.et_link_main_url,.et_pb_column_1_3 .et_quote_content blockquote cite,.et_pb_column_3_8 .et_quote_content blockquote cite,.et_pb_column_1_4 .et_quote_content blockquote cite,.et_pb_blog_grid .et_quote_content blockquote cite,.et_pb_column_1_3 .et_link_content a.et_link_main_url,.et_pb_column_3_8 .et_link_content a.et_link_main_url,.et_pb_column_1_4 .et_link_content a.et_link_main_url,.et_pb_blog_grid .et_link_content a.et_link_main_url,body .et_pb_bg_layout_light .et_pb_post p,body .et_pb_bg_layout_dark .et_pb_post p{font-weight:400}.et_pb_slide_content,.et_pb_best_value{font-weight:400}#et_search_icon:hover,.mobile_menu_bar:before,.mobile_menu_bar:after,.et_toggle_slide_menu:after,.et-social-icon a:hover,.et_pb_sum,.et_pb_pricing li a,.et_pb_pricing_table_button,.et_overlay:before,.entry-summary p.price ins,.et_pb_member_social_links a:hover,.et_pb_widget li a:hover,.et_pb_filterable_portfolio .et_pb_portfolio_filters li a.active,.et_pb_filterable_portfolio .et_pb_portofolio_pagination ul li a.active,.et_pb_gallery .et_pb_gallery_pagination ul li a.active,.wp-pagenavi span.current,.wp-pagenavi a:hover,.nav-single a,.tagged_as a,.posted_in a{color:#1b3c74}.et_pb_contact_submit,.et_password_protected_form .et_submit_button,.et_pb_bg_layout_light .et_pb_newsletter_button,.comment-reply-link,.form-submit .et_pb_button,.et_pb_bg_layout_light .et_pb_promo_button,.et_pb_bg_layout_light .et_pb_more_button,.et_pb_contact p input[type="checkbox"]:checked+label i:before,.et_pb_bg_layout_light.et_pb_module.et_pb_button{color:#1b3c74}.footer-widget h4{color:#1b3c74}.et-search-form,.nav li ul,.et_mobile_menu,.footer-widget li:before,.et_pb_pricing li:before,blockquote{border-color:#1b3c74}.et_pb_counter_amount,.et_pb_featured_table .et_pb_pricing_heading,.et_quote_content,.et_link_content,.et_audio_content,.et_pb_post_slider.et_pb_bg_layout_dark,.et_slide_in_menu_container,.et_pb_contact p input[type="radio"]:checked+label i:before{background-color:#1b3c74}a{color:#ab0000}.nav li ul{border-color:#ab0000}.et_secondary_nav_enabled #page-container #top-header{background-color:#1b3c74!important}#et-secondary-nav li ul{background-color:#1b3c74}.et_header_style_centered .mobile_nav .select_page,.et_header_style_split .mobile_nav .select_page,.et_nav_text_color_light #top-menu>li>a,.et_nav_text_color_dark #top-menu>li>a,#top-menu a,.et_mobile_menu li a,.et_nav_text_color_light .et_mobile_menu li a,.et_nav_text_color_dark .et_mobile_menu li a,#et_search_icon:before,.et_search_form_container input,span.et_close_search_field:after,#et-top-navigation .et-cart-info{color:#1b3c74}.et_search_form_container input::-moz-placeholder{color:#1b3c74}.et_search_form_container input::-webkit-input-placeholder{color:#1b3c74}.et_search_form_container input:-ms-input-placeholder{color:#1b3c74}#main-header .nav li ul a{color:#150e45}#top-menu li a{font-size:12px}body.et_vertical_nav .container.et_search_form_container .et-search-form input{font-size:12px!important}#top-menu li a,.et_search_form_container input{font-weight:normal;font-style:normal;text-transform:uppercase;text-decoration:none}.et_search_form_container input::-moz-placeholder{font-weight:normal;font-style:normal;text-transform:uppercase;text-decoration:none}.et_search_form_container input::-webkit-input-placeholder{font-weight:normal;font-style:normal;text-transform:uppercase;text-decoration:none}.et_search_form_container input:-ms-input-placeholder{font-weight:normal;font-style:normal;text-transform:uppercase;text-decoration:none}#top-menu li.current-menu-ancestor>a,#top-menu li.current-menu-item>a,#top-menu li.current_page_item>a{color:#1b3c74}#main-footer .footer-widget h4,#main-footer .widget_block h1,#main-footer .widget_block h2,#main-footer .widget_block h3,#main-footer .widget_block h4,#main-footer .widget_block h5,#main-footer .widget_block h6{color:#1b3c74}.footer-widget li:before{border-color:#1b3c74}body .et_pb_button{font-size:14px;background-color:#1b3c74;border-width:0px!important;border-radius:4px}body.et_pb_button_helper_class .et_pb_button,body.et_pb_button_helper_class .et_pb_module.et_pb_button{color:#ffffff}body .et_pb_button:after{content:'9';font-size:14px}body .et_pb_bg_layout_light.et_pb_button:hover,body .et_pb_bg_layout_light .et_pb_button:hover,body .et_pb_button:hover{color:#ffffff!important;background-color:#828da4}@media only screen and (min-width:981px){#logo{max-height:60%}.et_pb_svg_logo #logo{height:60%}.et_fixed_nav #page-container .et-fixed-header#top-header{background-color:#1b3c74!important}.et_fixed_nav #page-container .et-fixed-header#top-header #et-secondary-nav li ul{background-color:#1b3c74}.et-fixed-header #top-menu a,.et-fixed-header #et_search_icon:before,.et-fixed-header #et_top_search .et-search-form input,.et-fixed-header .et_search_form_container input,.et-fixed-header .et_close_search_field:after,.et-fixed-header #et-top-navigation .et-cart-info{color:#1b3c74!important}.et-fixed-header .et_search_form_container input::-moz-placeholder{color:#1b3c74!important}.et-fixed-header .et_search_form_container input::-webkit-input-placeholder{color:#1b3c74!important}.et-fixed-header .et_search_form_container input:-ms-input-placeholder{color:#1b3c74!important}.et-fixed-header #top-menu li.current-menu-ancestor>a,.et-fixed-header #top-menu li.current-menu-item>a,.et-fixed-header #top-menu li.current_page_item>a{color:#1b3c74!important}}@media only screen and (min-width:1350px){.et_pb_row{padding:27px 0}.et_pb_section{padding:54px 0}.single.et_pb_pagebuilder_layout.et_full_width_page .et_post_meta_wrapper{padding-top:81px}.et_pb_fullwidth_section{padding:0}}h1,h1.et_pb_contact_main_title,.et_pb_title_container h1{font-weight:400}h2,.product .related h2,.et_pb_column_1_2 .et_quote_content blockquote p{font-weight:400}h3{font-weight:400}h4,.et_pb_circle_counter h3,.et_pb_number_counter h3,.et_pb_column_1_3 .et_pb_post h2,.et_pb_column_1_4 .et_pb_post h2,.et_pb_blog_grid h2,.et_pb_column_1_3 .et_quote_content blockquote p,.et_pb_column_3_8 .et_quote_content blockquote p,.et_pb_column_1_4 .et_quote_content blockquote p,.et_pb_blog_grid .et_quote_content blockquote p,.et_pb_column_1_3 .et_link_content h2,.et_pb_column_3_8 .et_link_content h2,.et_pb_column_1_4 .et_link_content h2,.et_pb_blog_grid .et_link_content h2,.et_pb_column_1_3 .et_audio_content h2,.et_pb_column_3_8 .et_audio_content h2,.et_pb_column_1_4 .et_audio_content h2,.et_pb_blog_grid .et_audio_content h2,.et_pb_column_3_8 .et_pb_audio_module_content h2,.et_pb_column_1_3 .et_pb_audio_module_content h2,.et_pb_gallery_grid .et_pb_gallery_item h3,.et_pb_portfolio_grid .et_pb_portfolio_item h2,.et_pb_filterable_portfolio_grid .et_pb_portfolio_item h2{font-weight:400}h5{font-weight:400}h6{font-weight:400}.et_pb_slide_description .et_pb_slide_title{font-weight:400}.et_pb_gallery_grid .et_pb_gallery_item h3,.et_pb_portfolio_grid .et_pb_portfolio_item h2,.et_pb_filterable_portfolio_grid .et_pb_portfolio_item h2,.et_pb_column_1_4 .et_pb_audio_module_content h2{font-weight:400} h1,h2,h3,h4,h5,h6{font-family:'IBM Plex Sans',Helvetica,Arial,Lucida,sans-serif}body,input,textarea,select{font-family:'IBM Plex Sans',Helvetica,Arial,Lucida,sans-serif}#main-header,#et-top-navigation{font-family:'IBM Plex Mono',monospace}.et_pb_section_0.et_pb_section{padding-bottom:20px;background-color:#150E45!important}.et_pb_row_0{background-size:contain;background-image:url(https://zarc.web.za/wp-content/uploads/2025/03/HERO_bg-1.png)}.et_pb_row_0.et_pb_row{padding-top:13vw!important;padding-bottom:13vw!important;padding-top:13vw;padding-bottom:13vw}.et_pb_row_0,body #page-container .et-db #et-boc .et-l .et_pb_row_0.et_pb_row,body.et_pb_pagebuilder_layout.single #page-container #et-boc .et-l .et_pb_row_0.et_pb_row,body.et_pb_pagebuilder_layout.single.et_full_width_page #page-container #et-boc .et-l .et_pb_row_0.et_pb_row{width:100%;max-width:90%}.et_pb_text_0 h1{text-transform:uppercase;font-size:72px;color:#FFFFFF!important;line-height:1.1em}.et_pb_text_0{padding-left:6vw!important}.et_pb_button_0_wrapper .et_pb_button_0,.et_pb_button_0_wrapper .et_pb_button_0:hover,.et_pb_button_5_wrapper .et_pb_button_5,.et_pb_button_5_wrapper .et_pb_button_5:hover,.et_pb_button_6_wrapper .et_pb_button_6,.et_pb_button_6_wrapper .et_pb_button_6:hover,.et_pb_button_11_wrapper .et_pb_button_11,.et_pb_button_11_wrapper .et_pb_button_11:hover{padding-top:10px!important;padding-right:34px!important;padding-bottom:10px!important;padding-left:20px!important}.et_pb_button_0_wrapper{margin-left:6vw!important}body #page-container .et_pb_section .et_pb_button_0{color:#FFFFFF!important;border-width:1px!important;border-color:#FFFFFF;border-radius:40px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_0:hover,body #page-container .et_pb_section .et_pb_button_1:hover,body #page-container .et_pb_section .et_pb_button_2:hover,body #page-container .et_pb_section .et_pb_button_3:hover,body #page-container .et_pb_section .et_pb_button_4:hover{color:#FFFFFF!important;background-image:initial;background-color:rgba(255,255,255,0.2)}body #page-container .et_pb_section .et_pb_button_0:hover:after,body #page-container .et_pb_section .et_pb_button_5:hover:after,body #page-container .et_pb_section .et_pb_button_6:hover:after,body #page-container .et_pb_section .et_pb_button_7:hover:after,body #page-container .et_pb_section .et_pb_button_8:hover:after,body #page-container .et_pb_section .et_pb_button_9:hover:after,body #page-container .et_pb_section .et_pb_button_10:hover:after,body #page-container .et_pb_section .et_pb_button_11:hover:after{margin-left:.3em;left:auto;margin-left:.3em}body #page-container .et_pb_section .et_pb_button_0:after,body #page-container .et_pb_section .et_pb_button_5:after,body #page-container .et_pb_section .et_pb_button_6:after,body #page-container .et_pb_section .et_pb_button_11:after{line-height:inherit;font-size:inherit!important;opacity:1;margin-left:.3em;left:auto;font-family:ETmodules!important;font-weight:400!important}.et_pb_button_0,.et_pb_button_5,.et_pb_button_6,.et_pb_button_11{transition:color 300ms ease 0ms,background-color 300ms ease 0ms}.et_pb_button_0,.et_pb_button_0:after,.et_pb_button_1,.et_pb_button_1:after,.et_pb_button_2,.et_pb_button_2:after,.et_pb_button_3,.et_pb_button_3:after,.et_pb_button_4,.et_pb_button_4:after,.et_pb_button_5,.et_pb_button_5:after,.et_pb_button_6,.et_pb_button_6:after,.et_pb_button_7,.et_pb_button_7:after,.et_pb_button_8,.et_pb_button_8:after,.et_pb_button_9,.et_pb_button_9:after,.et_pb_button_10,.et_pb_button_10:after,.et_pb_button_11,.et_pb_button_11:after{transition:all 300ms ease 0ms}.et_pb_row_1,body #page-container .et-db #et-boc .et-l .et_pb_row_1.et_pb_row,body.et_pb_pagebuilder_layout.single #page-container #et-boc .et-l .et_pb_row_1.et_pb_row,body.et_pb_pagebuilder_layout.single.et_full_width_page #page-container #et-boc .et-l .et_pb_row_1.et_pb_row{width:100%;max-width:85%}.et_pb_button_1_wrapper .et_pb_button_1,.et_pb_button_1_wrapper .et_pb_button_1:hover,.et_pb_button_2_wrapper .et_pb_button_2,.et_pb_button_2_wrapper .et_pb_button_2:hover,.et_pb_button_3_wrapper .et_pb_button_3,.et_pb_button_3_wrapper .et_pb_button_3:hover,.et_pb_button_4_wrapper .et_pb_button_4,.et_pb_button_4_wrapper .et_pb_button_4:hover{padding-top:10px!important;padding-right:30px!important;padding-bottom:10px!important;padding-left:40px!important}body #page-container .et_pb_section .et_pb_button_1,body #page-container .et_pb_section .et_pb_button_2,body #page-container .et_pb_section .et_pb_button_3,body #page-container .et_pb_section .et_pb_button_4{color:#FFFFFF!important;border-width:1px!important;border-color:#FFFFFF;border-radius:40px;font-size:17px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_1:after,body #page-container .et_pb_section .et_pb_button_2:after,body #page-container .et_pb_section .et_pb_button_3:after,body #page-container .et_pb_section .et_pb_button_4:after{display:none}body #page-container .et_pb_section .et_pb_button_1:before,body #page-container .et_pb_section .et_pb_button_2:before,body #page-container .et_pb_section .et_pb_button_3:before,body #page-container .et_pb_section .et_pb_button_4:before{content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important;line-height:inherit;font-size:inherit!important;opacity:1;margin-left:-1.3em;right:auto;display:inline-block;font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_1:hover:before,body #page-container .et_pb_section .et_pb_button_2:hover:before,body #page-container .et_pb_section .et_pb_button_3:hover:before,body #page-container .et_pb_section .et_pb_button_4:hover:before{margin-left:.3em;right:auto;margin-left:-1.3em}.et_pb_button_1,.et_pb_button_2,.et_pb_button_3,.et_pb_button_4{transition:color 300ms ease 0ms,background-color 300ms ease 0ms;width:100%}div.et_pb_section.et_pb_section_1{background-image:linear-gradient(180deg,#150e45 79%,#ffffff 79%)!important}.et_pb_section_1.et_pb_section{padding-bottom:20px}.et_pb_text_1,.et_pb_text_2{line-height:1.6em;font-weight:600;font-size:16px;line-height:1.6em;margin-top:40px!important}.et_pb_text_1 h2,.et_pb_text_2 h2{text-transform:uppercase;font-size:60px;text-align:right}.et_pb_text_3.et_pb_text,.et_pb_text_5.et_pb_text{color:#150E45!important}body #page-container .et_pb_section .et_pb_button_5,body #page-container .et_pb_section .et_pb_button_6{color:#150E45!important;border-width:1px!important;border-color:#150E45;border-radius:40px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_5:hover,body #page-container .et_pb_section .et_pb_button_6:hover{color:#150E45!important;background-image:initial;background-color:rgba(21,14,69,0.2)}.et_pb_row_3.et_pb_row{margin-top:40px!important}.et_pb_blurb_0.et_pb_blurb .et_pb_module_header,.et_pb_blurb_0.et_pb_blurb .et_pb_module_header a,.et_pb_blurb_1.et_pb_blurb .et_pb_module_header,.et_pb_blurb_1.et_pb_blurb .et_pb_module_header a,.et_pb_blurb_2.et_pb_blurb .et_pb_module_header,.et_pb_blurb_2.et_pb_blurb .et_pb_module_header a,.et_pb_blurb_3.et_pb_blurb .et_pb_module_header,.et_pb_blurb_3.et_pb_blurb .et_pb_module_header a{font-weight:600}.et_pb_blurb_0.et_pb_blurb p,.et_pb_blurb_1.et_pb_blurb p,.et_pb_blurb_2.et_pb_blurb p,.et_pb_blurb_3.et_pb_blurb p{line-height:1.5em}.et_pb_blurb_0.et_pb_blurb,.et_pb_blurb_1.et_pb_blurb,.et_pb_blurb_2.et_pb_blurb,.et_pb_blurb_3.et_pb_blurb{color:#150E45!important;line-height:1.5em}.et_pb_blurb_0 .et_pb_blurb_content,.et_pb_blurb_1 .et_pb_blurb_content,.et_pb_blurb_2 .et_pb_blurb_content,.et_pb_blurb_3 .et_pb_blurb_content{text-align:left}.et_pb_blurb_0.et_pb_blurb .et_pb_image_wrap,.et_pb_blurb_1.et_pb_blurb .et_pb_image_wrap,.et_pb_blurb_2.et_pb_blurb .et_pb_image_wrap,.et_pb_blurb_3.et_pb_blurb .et_pb_image_wrap{margin:auto auto auto 0}.et_pb_blurb_0 .et_pb_main_blurb_image .et_pb_image_wrap,.et_pb_blurb_1 .et_pb_main_blurb_image .et_pb_image_wrap,.et_pb_blurb_2 .et_pb_main_blurb_image .et_pb_image_wrap,.et_pb_blurb_3 .et_pb_main_blurb_image .et_pb_image_wrap{width:80px}.et_pb_button_7_wrapper .et_pb_button_7,.et_pb_button_7_wrapper .et_pb_button_7:hover,.et_pb_button_8_wrapper .et_pb_button_8,.et_pb_button_8_wrapper .et_pb_button_8:hover,.et_pb_button_9_wrapper .et_pb_button_9,.et_pb_button_9_wrapper .et_pb_button_9:hover,.et_pb_button_10_wrapper .et_pb_button_10,.et_pb_button_10_wrapper .et_pb_button_10:hover{padding-top:0px!important;padding-right:0px!important;padding-bottom:0px!important;padding-left:0px!important}body #page-container .et_pb_section .et_pb_button_7,body #page-container .et_pb_section .et_pb_button_8,body #page-container .et_pb_section .et_pb_button_9,body #page-container .et_pb_section .et_pb_button_10{color:#150E45!important;font-size:13px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_7:hover,body #page-container .et_pb_section .et_pb_button_8:hover,body #page-container .et_pb_section .et_pb_button_9:hover,body #page-container .et_pb_section .et_pb_button_10:hover{color:#828DA4!important}body #page-container .et_pb_section .et_pb_button_7:after,body #page-container .et_pb_section .et_pb_button_8:after,body #page-container .et_pb_section .et_pb_button_9:after,body #page-container .et_pb_section .et_pb_button_10:after{color:#150E45;line-height:inherit;font-size:inherit!important;opacity:1;margin-left:.3em;left:auto;font-family:ETmodules!important;font-weight:400!important}.et_pb_button_7,.et_pb_button_8,.et_pb_button_9,.et_pb_button_10{transition:color 300ms ease 0ms}.et_pb_column_12,.et_pb_column_13{display:flex;flex-direction:column;justify-content:center}.et_pb_image_0{text-align:left;margin-left:0}.et_pb_text_4 h2{text-transform:uppercase;font-size:60px}body #page-container .et_pb_section .et_pb_button_11{color:#AB0000!important;border-width:1px!important;border-color:#AB0000;border-radius:40px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_11:hover{color:#AB0000!important;background-image:initial;background-color:rgba(171,0,0,0.2)}.et_pb_column_7{background-color:#FFFFFF;border-radius:20px 20px 20px 20px;overflow:hidden;padding-top:3vw;padding-right:3vw;padding-bottom:3vw;padding-left:3vw}.et_pb_column_8,.et_pb_column_9,.et_pb_column_10,.et_pb_column_11{background-color:#FFFFFF;border-radius:15px 15px 15px 15px;overflow:hidden;padding-top:30px;padding-right:20px;padding-bottom:30px;padding-left:25px;box-shadow:0px 2px 18px 0px rgba(0,0,0,0.18)}.et_pb_image_0.et_pb_module{margin-left:auto!important;margin-right:auto!important}@media only screen and (min-width:981px){.et_pb_image_0{width:70%}}@media only screen and (max-width:980px){.et_pb_section_0.et_pb_section{padding-bottom:20px}.et_pb_row_0{background-color:initial}.et_pb_row_0.et_pb_row{padding-top:13vw!important;padding-bottom:13vw!important;padding-top:13vw!important;padding-bottom:13vw!important}.et_pb_text_0 h1{font-size:60px;line-height:1.1em}.et_pb_text_0{padding-left:6vw!important}body #page-container .et_pb_section .et_pb_button_0:after,body #page-container .et_pb_section .et_pb_button_5:after,body #page-container .et_pb_section .et_pb_button_6:after,body #page-container .et_pb_section .et_pb_button_7:after,body #page-container .et_pb_section .et_pb_button_8:after,body #page-container .et_pb_section .et_pb_button_9:after,body #page-container .et_pb_section .et_pb_button_10:after,body #page-container .et_pb_section .et_pb_button_11:after{line-height:inherit;font-size:inherit!important;margin-left:.3em;left:auto;display:inline-block;opacity:1;content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_0:before,body #page-container .et_pb_section .et_pb_button_1:after,body #page-container .et_pb_section .et_pb_button_2:after,body #page-container .et_pb_section .et_pb_button_3:after,body #page-container .et_pb_section .et_pb_button_4:after,body #page-container .et_pb_section .et_pb_button_5:before,body #page-container .et_pb_section .et_pb_button_6:before,body #page-container .et_pb_section .et_pb_button_7:before,body #page-container .et_pb_section .et_pb_button_8:before,body #page-container .et_pb_section .et_pb_button_9:before,body #page-container .et_pb_section .et_pb_button_10:before,body #page-container .et_pb_section .et_pb_button_11:before{display:none}body #page-container .et_pb_section .et_pb_button_0:hover:after,body #page-container .et_pb_section .et_pb_button_5:hover:after,body #page-container .et_pb_section .et_pb_button_6:hover:after,body #page-container .et_pb_section .et_pb_button_7:hover:after,body #page-container .et_pb_section .et_pb_button_8:hover:after,body #page-container .et_pb_section .et_pb_button_9:hover:after,body #page-container .et_pb_section .et_pb_button_10:hover:after,body #page-container .et_pb_section .et_pb_button_11:hover:after{margin-left:.3em;left:auto;margin-left:.3em}.et_pb_button_1_wrapper .et_pb_button_1,.et_pb_button_1_wrapper .et_pb_button_1:hover,.et_pb_button_2_wrapper .et_pb_button_2,.et_pb_button_2_wrapper .et_pb_button_2:hover,.et_pb_button_3_wrapper .et_pb_button_3,.et_pb_button_3_wrapper .et_pb_button_3:hover,.et_pb_button_4_wrapper .et_pb_button_4,.et_pb_button_4_wrapper .et_pb_button_4:hover{padding-top:10px!important;padding-right:30px!important;padding-bottom:10px!important;padding-left:40px!important}body #page-container .et_pb_section .et_pb_button_1:before,body #page-container .et_pb_section .et_pb_button_2:before,body #page-container .et_pb_section .et_pb_button_3:before,body #page-container .et_pb_section .et_pb_button_4:before{line-height:inherit;font-size:inherit!important;margin-left:-1.3em;right:auto;display:inline-block;opacity:1;content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_1:hover:before,body #page-container .et_pb_section .et_pb_button_2:hover:before,body #page-container .et_pb_section .et_pb_button_3:hover:before,body #page-container .et_pb_section .et_pb_button_4:hover:before{margin-left:.3em;right:auto;margin-left:-1.3em}div.et_pb_section.et_pb_section_1{background-size:cover;background-repeat:no-repeat;background-position:center;background-blend-mode:normal;background-image:url(https://zarc.web.za/wp-content/uploads/2025/03/ABOUT_LINES.png),linear-gradient(180deg,#150e45 58%,#ffffff 58%)!important}.et_pb_section_1.et_pb_section{padding-bottom:70px}.et_pb_text_1,.et_pb_text_2{font-size:16px;margin-top:40px!important}.et_pb_text_1 h2,.et_pb_text_2 h2{text-align:left}.et_pb_row_3.et_pb_row{margin-top:40px!important}.et_pb_image_0{width:50%}.et_pb_image_0 .et_pb_image_wrap img{width:auto}.et_pb_column_7{padding-top:3vw;padding-right:3vw;padding-bottom:3vw;padding-left:3vw}}@media only screen and (max-width:767px){.et_pb_section_0.et_pb_section{padding-top:20px;padding-bottom:20px}.et_pb_row_0{background-size:cover;background-position:right 0px center;border-radius:30px 30px 30px 30px;overflow:hidden}.et_pb_row_0.et_pb_row{padding-top:18vw!important;padding-bottom:0vw!important;padding-top:18vw!important;padding-bottom:0vw!important}.et_pb_text_0 h1{font-size:32px;line-height:1.4em}.et_pb_text_0{padding-top:20px!important;padding-left:6vw!important}body #page-container .et_pb_section .et_pb_button_0:after,body #page-container .et_pb_section .et_pb_button_5:after,body #page-container .et_pb_section .et_pb_button_6:after,body #page-container .et_pb_section .et_pb_button_7:after,body #page-container .et_pb_section .et_pb_button_8:after,body #page-container .et_pb_section .et_pb_button_9:after,body #page-container .et_pb_section .et_pb_button_10:after,body #page-container .et_pb_section .et_pb_button_11:after{line-height:inherit;font-size:inherit!important;margin-left:.3em;left:auto;display:inline-block;opacity:1;content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_0:before,body #page-container .et_pb_section .et_pb_button_1:after,body #page-container .et_pb_section .et_pb_button_2:after,body #page-container .et_pb_section .et_pb_button_3:after,body #page-container .et_pb_section .et_pb_button_4:after,body #page-container .et_pb_section .et_pb_button_5:before,body #page-container .et_pb_section .et_pb_button_6:before,body #page-container .et_pb_section .et_pb_button_7:before,body #page-container .et_pb_section .et_pb_button_8:before,body #page-container .et_pb_section .et_pb_button_9:before,body #page-container .et_pb_section .et_pb_button_10:before,body #page-container .et_pb_section .et_pb_button_11:before{display:none}body #page-container .et_pb_section .et_pb_button_0:hover:after,body #page-container .et_pb_section .et_pb_button_5:hover:after,body #page-container .et_pb_section .et_pb_button_6:hover:after,body #page-container .et_pb_section .et_pb_button_7:hover:after,body #page-container .et_pb_section .et_pb_button_8:hover:after,body #page-container .et_pb_section .et_pb_button_9:hover:after,body #page-container .et_pb_section .et_pb_button_10:hover:after,body #page-container .et_pb_section .et_pb_button_11:hover:after{margin-left:.3em;left:auto;margin-left:.3em}.et_pb_button_1_wrapper .et_pb_button_1,.et_pb_button_1_wrapper .et_pb_button_1:hover,.et_pb_button_2_wrapper .et_pb_button_2,.et_pb_button_2_wrapper .et_pb_button_2:hover,.et_pb_button_3_wrapper .et_pb_button_3,.et_pb_button_3_wrapper .et_pb_button_3:hover,.et_pb_button_4_wrapper .et_pb_button_4,.et_pb_button_4_wrapper .et_pb_button_4:hover{padding-top:8px!important;padding-right:30px!important;padding-bottom:8px!important;padding-left:40px!important}.et_pb_button_1_wrapper,.et_pb_button_2_wrapper,.et_pb_button_3_wrapper,.et_pb_button_4_wrapper{margin-bottom:-10px!important}body #page-container .et_pb_section .et_pb_button_1,body #page-container .et_pb_section .et_pb_button_2,body #page-container .et_pb_section .et_pb_button_3,body #page-container .et_pb_section .et_pb_button_4{font-size:16px!important}body #page-container .et_pb_section .et_pb_button_1:before,body #page-container .et_pb_section .et_pb_button_2:before,body #page-container .et_pb_section .et_pb_button_3:before,body #page-container .et_pb_section .et_pb_button_4:before{line-height:inherit;font-size:inherit!important;margin-left:-1.3em;right:auto;display:inline-block;opacity:1;content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_1:hover:before,body #page-container .et_pb_section .et_pb_button_2:hover:before,body #page-container .et_pb_section .et_pb_button_3:hover:before,body #page-container .et_pb_section .et_pb_button_4:hover:before{margin-left:.3em;right:auto;margin-left:-1.3em}div.et_pb_section.et_pb_section_1{background-image:url(https://zarc.web.za/wp-content/uploads/2025/03/ABOUT_LINES.png),linear-gradient(180deg,#150e45 51%,#ffffff 51%)!important}.et_pb_section_1.et_pb_section{padding-bottom:0px}.et_pb_row_2.et_pb_row{padding-top:0px!important;padding-top:0px!important}.et_pb_text_1,.et_pb_text_2{font-size:14px;margin-top:0px!important}.et_pb_text_1 h2,.et_pb_text_2 h2{font-size:40px;text-align:left}.et_pb_row_3.et_pb_row{margin-top:0px!important}.et_pb_image_0{margin-bottom:30px!important;width:60%}.et_pb_image_0 .et_pb_image_wrap img{width:auto}.et_pb_text_4 h2{font-size:40px}.et_pb_column_7{padding-top:5vw;padding-right:5vw;padding-bottom:5vw;padding-left:5vw}}FollowFollowFollowFollowFollowFollow.sp-status {color: #fff;}System Statusdocument.addEventListener("DOMContentLoaded", function() {// Define status coloursconst greens = '#35955f'; // Operationalconst blues = '#648aad'; // Performance issuesconst oranges = '#e37e3b'; // Partial outageconst reds = '#e75a53'; // Major outageconst statusWidget = {badge: {enabled: true,selector: '.sp-status',},banner: {enabled: true,position: 'bottom-left', // Optional [bottom-left | bottom-right | top-left | top-right], def: bottom-leftstatusPageUrl: 'https://status.zarc.net.za'},};// Fetch system status APIfetch('https://status.zarc.net.za/api/v1/components', {method: 'GET',headers: {'X-Cachet-Token': 'UyHA0mIGO9NPp2OnDBxs',}}).then(response => response.json()).then(data => {const statuses = data.data.map(component => component.status);const isOperational = statuses.every(status => status === 1);const isPerformanceIssues = statuses.some(status => status === 2);const isPartialOutage = statuses.some(status => status === 3);const isMajorOutage = statuses.some(status => status === 4);// Update Badgeif (statusWidget.badge.enabled) {const badgeElement = document.querySelector(statusWidget.badge.selector);if (badgeElement) {badgeElement.style.padding = '10px';badgeElement.style.borderRadius = '5px';badgeElement.style.display = 'inline-flex';badgeElement.style.alignItems = 'center';badgeElement.style.cursor = 'pointer';badgeElement.style.position = 'relative';// Status circleconst statusCircle = document.createElement('span');statusCircle.classList.add('status-circle');statusCircle.style.display = 'inline-block';statusCircle.style.width = '10px';statusCircle.style.height = '10px';statusCircle.style.borderRadius = '50%';statusCircle.style.marginLeft = '5px';statusCircle.style.verticalAlign = 'middle';if (isOperational) {statusCircle.style.backgroundColor = greens;} else if (isPerformanceIssues) {statusCircle.style.backgroundColor = blues;} else if (isPartialOutage) {statusCircle.style.backgroundColor = oranges;} else if (isMajorOutage) {statusCircle.style.backgroundColor = reds;}badgeElement.appendChild(statusCircle);// Tooltipconst tooltip = document.createElement('div');tooltip.textContent = isOperational ? 'All systems operational' :isPerformanceIssues ? 'Performance issues detected' :isPartialOutage ? 'Partial outage' :'Major outage';tooltip.style.position = 'absolute';tooltip.style.top = '120%';tooltip.style.left = '50%';tooltip.style.transform = 'translateX(-50%)';tooltip.style.padding = '5px';tooltip.style.borderRadius = '4px';tooltip.style.backgroundColor = 'black';tooltip.style.color = 'white';tooltip.style.fontSize = '12px';tooltip.style.visibility = 'hidden';tooltip.style.whiteSpace = 'nowrap';badgeElement.addEventListener('mouseenter', () => {tooltip.style.visibility = 'visible';});badgeElement.addEventListener('mouseleave', () => {tooltip.style.visibility = 'hidden';});badgeElement.appendChild(tooltip);}}// Ionicons Scriptconst ioniconsEsm = document.createElement("script");ioniconsEsm.type = "module";ioniconsEsm.src ="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js";const ioniconsNomodule = document.createElement("script");ioniconsNomodule.nomodule = true;ioniconsNomodule.src ="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js";document.head.appendChild(ioniconsEsm);document.head.appendChild(ioniconsNomodule);let issueStartTime = null;// Update Bannerif (statusWidget.banner.enabled && !isOperational) {const bannerContainer = document.createElement('div');bannerContainer.style.display = 'flex';bannerContainer.style.flexDirection = 'column';bannerContainer.style.position = 'fixed';bannerContainer.style.width = 'fit-content';bannerContainer.style.margin = '20px';bannerContainer.style.padding = '20px';bannerContainer.style.borderRadius = '4px';bannerContainer.style.color = 'white';bannerContainer.style.zIndex = '1000';if (isMajorOutage) {bannerContainer.style.backgroundColor = reds;} else if (isPartialOutage) {bannerContainer.style.backgroundColor = oranges;} else if (isPerformanceIssues) {bannerContainer.style.backgroundColor = blues;}// Close buttonconst closeButton = document.createElement('button');closeButton.textContent = '✖';closeButton.style.background = 'none';closeButton.style.border = 'none';closeButton.style.color = 'white';closeButton.style.fontSize = '10px';closeButton.style.cursor = 'pointer';closeButton.style.position = 'absolute';closeButton.style.top = '5px';closeButton.style.right = '5px';closeButton.addEventListener('click', function() {bannerContainer.style.display = 'none';});bannerContainer.appendChild(closeButton);// Flex container for the contentconst contentContainer = document.createElement('div');contentContainer.style.display = 'flex';contentContainer.style.width = '100%';// Icon containerconst iconContainer = document.createElement('div');const warningIcon = document.createElement('ion-icon');warningIcon.setAttribute('name', 'warning');warningIcon.classList.add('text-component-4');warningIcon.style.color = 'white';warningIcon.style.marginRight = '10px';warningIcon.style.fontSize = '24px';iconContainer.appendChild(warningIcon);// Text containerconst textContainer = document.createElement('div');textContainer.style.color = 'white';// Banner messageconst statusText = document.createElement('span');statusText.textContent = isMajorOutage ? 'Major outage' :isPartialOutage ? 'Partial outage' :isPerformanceIssues ? 'Performance issues detected' : '';textContainer.appendChild(statusText);// Ongoing timeconst ongoingTextElement = document.createElement('div');function updateOngoingTime() {if (issueStartTime) {const elapsedTime = Math.floor((Date.now() - issueStartTime) / 1000);const days = Math.floor(elapsedTime / (3600 * 24));const hours = Math.floor((elapsedTime % (3600 * 24)) / 3600);const minutes = Math.floor((elapsedTime % 3600) / 60);let ongoingText = '';if (elapsedTime >= 60) {if (days > 0) ongoingText += `${days} day${days > 1 ? 's' : ''}, `;if (hours > 0 || days > 0) ongoingText += `${hours} hour${hours > 1 ? 's' : ''}, `;ongoingText += `${minutes} minute${minutes > 1 ? 's' : ''}`;ongoingTextElement.textContent = `Ongoing for ${ongoingText}`;}}}// Check the initial status and set the issueStartTime based on updated_atfunction checkStatusAndSetup(updatedAtTimestamps) {if (isOperational) {issueStartTime = null; // Reset timingongoingTextElement.textContent = ''; // Clear ongoing text} else {// Find the most recent updated_at timestampconst latestUpdatedAt = Math.max(...updatedAtTimestamps);issueStartTime = new Date(latestUpdatedAt).getTime(); // Set issueStartTime to the latest updated_at}updateOngoingTime();}// Initial checkconst updatedAtTimestamps = data.data.map(component => new Date(component.updated_at).getTime());checkStatusAndSetup(updatedAtTimestamps);setInterval(() => {checkStatusAndSetup(updatedAtTimestamps); // Regularly check the status every minuteupdateOngoingTime();}, 60000);ongoingTextElement.style.marginTop = '20px';textContainer.appendChild(ongoingTextElement);// Updates linkconst updatesLink = document.createElement('a');updatesLink.href = statusWidget.banner.statusPageUrl;updatesLink.textContent = 'View latest updates';updatesLink.style.color = 'white';updatesLink.style.display = 'block';updatesLink.style.marginTop = '20px';updatesLink.style.textDecoration = 'underline';textContainer.appendChild(updatesLink);contentContainer.appendChild(iconContainer);contentContainer.appendChild(textContainer);bannerContainer.appendChild(contentContainer);// Set the banner positionswitch (statusWidget.banner.position) {case 'bottom-left':bannerContainer.style.bottom = '0';bannerContainer.style.left = '0';break;case 'bottom-right':bannerContainer.style.bottom = '0';bannerContainer.style.right = '0';break;case 'top-left':bannerContainer.style.top = '0';bannerContainer.style.left = '0';break;case 'top-right':bannerContainer.style.top = '0';bannerContainer.style.right = '0';break;default:bannerContainer.style.bottom = '0';bannerContainer.style.left = '0';}document.body.appendChild(bannerContainer);}}).catch(error => {console.error('Error fetching system status:', error);});});Search for:.sp-status {color: #fff;}System Statusdocument.addEventListener("DOMContentLoaded", function() {// Define status coloursconst greens = '#35955f'; // Operationalconst blues = '#648aad'; // Performance issuesconst oranges = '#e37e3b'; // Partial outageconst reds = '#e75a53'; // Major outageconst statusWidget = {badge: {enabled: true,selector: '.sp-status',},banner: {enabled: true,position: 'bottom-left', // Optional [bottom-left | bottom-right | top-left | top-right], def: bottom-leftstatusPageUrl: 'https://status.zarc.net.za'},};// Fetch system status APIfetch('https://status.zarc.net.za/api/v1/components', {method: 'GET',headers: {'X-Cachet-Token': 'UyHA0mIGO9NPp2OnDBxs',}}).then(response => response.json()).then(data => {const statuses = data.data.map(component => component.status);const isOperational = statuses.every(status => status === 1);const isPerformanceIssues = statuses.some(status => status === 2);const isPartialOutage = statuses.some(status => status === 3);const isMajorOutage = statuses.some(status => status === 4);// Update Badgeif (statusWidget.badge.enabled) {const badgeElement = document.querySelector(statusWidget.badge.selector);if (badgeElement) {badgeElement.style.padding = '10px';badgeElement.style.borderRadius = '5px';badgeElement.style.display = 'inline-flex';badgeElement.style.alignItems = 'center';badgeElement.style.cursor = 'pointer';badgeElement.style.position = 'relative';// Status circleconst statusCircle = document.createElement('span');statusCircle.classList.add('status-circle');statusCircle.style.display = 'inline-block';statusCircle.style.width = '10px';statusCircle.style.height = '10px';statusCircle.style.borderRadius = '50%';statusCircle.style.marginLeft = '5px';statusCircle.style.verticalAlign = 'middle';if (isOperational) {statusCircle.style.backgroundColor = greens;} else if (isPerformanceIssues) {statusCircle.style.backgroundColor = blues;} else if (isPartialOutage) {statusCircle.style.backgroundColor = oranges;} else if (isMajorOutage) {statusCircle.style.backgroundColor = reds;}badgeElement.appendChild(statusCircle);// Tooltipconst tooltip = document.createElement('div');tooltip.textContent = isOperational ? 'All systems operational' :isPerformanceIssues ? 'Performance issues detected' :isPartialOutage ? 'Partial outage' :'Major outage';tooltip.style.position = 'absolute';tooltip.style.top = '120%';tooltip.style.left = '50%';tooltip.style.transform = 'translateX(-50%)';tooltip.style.padding = '5px';tooltip.style.borderRadius = '4px';tooltip.style.backgroundColor = 'black';tooltip.style.color = 'white';tooltip.style.fontSize = '12px';tooltip.style.visibility = 'hidden';tooltip.style.whiteSpace = 'nowrap';badgeElement.addEventListener('mouseenter', () => {tooltip.style.visibility = 'visible';});badgeElement.addEventListener('mouseleave', () => {tooltip.style.visibility = 'hidden';});badgeElement.appendChild(tooltip);}}// Ionicons Scriptconst ioniconsEsm = document.createElement("script");ioniconsEsm.type = "module";ioniconsEsm.src ="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js";const ioniconsNomodule = document.createElement("script");ioniconsNomodule.nomodule = true;ioniconsNomodule.src ="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js";document.head.appendChild(ioniconsEsm);document.head.appendChild(ioniconsNomodule);let issueStartTime = null;// Update Bannerif (statusWidget.banner.enabled && !isOperational) {const bannerContainer = document.createElement('div');bannerContainer.style.display = 'flex';bannerContainer.style.flexDirection = 'column';bannerContainer.style.position = 'fixed';bannerContainer.style.width = 'fit-content';bannerContainer.style.margin = '20px';bannerContainer.style.padding = '20px';bannerContainer.style.borderRadius = '4px';bannerContainer.style.color = 'white';bannerContainer.style.zIndex = '1000';if (isMajorOutage) {bannerContainer.style.backgroundColor = reds;} else if (isPartialOutage) {bannerContainer.style.backgroundColor = oranges;} else if (isPerformanceIssues) {bannerContainer.style.backgroundColor = blues;}// Close buttonconst closeButton = document.createElement('button');closeButton.textContent = '✖';closeButton.style.background = 'none';closeButton.style.border = 'none';closeButton.style.color = 'white';closeButton.style.fontSize = '10px';closeButton.style.cursor = 'pointer';closeButton.style.position = 'absolute';closeButton.style.top = '5px';closeButton.style.right = '5px';closeButton.addEventListener('click', function() {bannerContainer.style.display = 'none';});bannerContainer.appendChild(closeButton);// Flex container for the contentconst contentContainer = document.createElement('div');contentContainer.style.display = 'flex';contentContainer.style.width = '100%';// Icon containerconst iconContainer = document.createElement('div');const warningIcon = document.createElement('ion-icon');warningIcon.setAttribute('name', 'warning');warningIcon.classList.add('text-component-4');warningIcon.style.color = 'white';warningIcon.style.marginRight = '10px';warningIcon.style.fontSize = '24px';iconContainer.appendChild(warningIcon);// Text containerconst textContainer = document.createElement('div');textContainer.style.color = 'white';// Banner messageconst statusText = document.createElement('span');statusText.textContent = isMajorOutage ? 'Major outage' :isPartialOutage ? 'Partial outage' :isPerformanceIssues ? 'Performance issues detected' : '';textContainer.appendChild(statusText);// Ongoing timeconst ongoingTextElement = document.createElement('div');function updateOngoingTime() {if (issueStartTime) {const elapsedTime = Math.floor((Date.now() - issueStartTime) / 1000);const days = Math.floor(elapsedTime / (3600 * 24));const hours = Math.floor((elapsedTime % (3600 * 24)) / 3600);const minutes = Math.floor((elapsedTime % 3600) / 60);let ongoingText = '';if (elapsedTime >= 60) {if (days > 0) ongoingText += `${days} day${days > 1 ? 's' : ''}, `;if (hours > 0 || days > 0) ongoingText += `${hours} hour${hours > 1 ? 's' : ''}, `;ongoingText += `${minutes} minute${minutes > 1 ? 's' : ''}`;ongoingTextElement.textContent = `Ongoing for ${ongoingText}`;}}}// Check the initial status and set the issueStartTime based on updated_atfunction checkStatusAndSetup(updatedAtTimestamps) {if (isOperational) {issueStartTime = null; // Reset timingongoingTextElement.textContent = ''; // Clear ongoing text} else {// Find the most recent updated_at timestampconst latestUpdatedAt = Math.max(...updatedAtTimestamps);issueStartTime = new Date(latestUpdatedAt).getTime(); // Set issueStartTime to the latest updated_at}updateOngoingTime();}// Initial checkconst updatedAtTimestamps = data.data.map(component => new Date(component.updated_at).getTime());checkStatusAndSetup(updatedAtTimestamps);setInterval(() => {checkStatusAndSetup(updatedAtTimestamps); // Regularly check the status every minuteupdateOngoingTime();}, 60000);ongoingTextElement.style.marginTop = '20px';textContainer.appendChild(ongoingTextElement);// Updates linkconst updatesLink = document.createElement('a');updatesLink.href = statusWidget.banner.statusPageUrl;updatesLink.textContent = 'View latest updates';updatesLink.style.color = 'white';updatesLink.style.display = 'block';updatesLink.style.marginTop = '20px';updatesLink.style.textDecoration = 'underline';textContainer.appendChild(updatesLink);contentContainer.appendChild(iconContainer);contentContainer.appendChild(textContainer);bannerContainer.appendChild(contentContainer);// Set the banner positionswitch (statusWidget.banner.position) {case 'bottom-left':bannerContainer.style.bottom = '0';bannerContainer.style.left = '0';break;case 'bottom-right':bannerContainer.style.bottom = '0';bannerContainer.style.right = '0';break;case 'top-left':bannerContainer.style.top = '0';bannerContainer.style.left = '0';break;case 'top-right':bannerContainer.style.top = '0';bannerContainer.style.right = '0';break;default:bannerContainer.style.bottom = '0';bannerContainer.style.left = '0';}document.body.appendChild(bannerContainer);}}).catch(error => {console.error('Error fetching system status:', error);});});Search for:HomeZonesRegistrarsAccredited RegistrarsRegistrar onboardingAvailable Products & NamespacesPremium Domain NamesDNSSECContact & Balance CheckCIPCTechnicalEPP Explained.ZA SLDsOT&E CriteriaLogging In/OutContact OperationsDomain OperationsCustom ExtensionsEPP Contact ExtensionsEPP Domain ExtensionsConstraintsContact ConstraintsDomain ConstraintsMessage PollingSSL RequirementsLegacy Transfer ProcedureStatus MappingNamespace ComparisonResources.ZA SLD PoliciesFAQNewsWHOISContact.dvcs_smooth_secondary_menu .et_pb_menu__wrap {justify-content: right !important;}/* desktop menu */.et_pb_menu.dvcs_free_header_5 .et_pb_menu__menu {flex: 1 0 auto !important;justify-content: center !important;}/* mobile menu */.et_pb_menu.dvcs_free_header_5 .et_mobile_menu {max-height: 75vh;overflow-y: auto;}@media all and (max-width: 980px){.et_pb_menu.dvcs_free_header_5 .et_mobile_menu {border-radius: 4px;width: 300px !important;right: 0;left: auto;top: calc(100% + 18px) !important;}}@media all and (max-width: 768px){.et_pb_menu.dvcs_free_header_5 .et_mobile_menu {width: calc(100% + 160px) !important;left: 0;right: auto;margin-left: -15px !important;}/* mobile menu links */.dvcs_free_header_5 .et_mobile_menu a {border-left: 5px solid #2c3333;margin-bottom: 4px;border-radius: 5px;}}/* mobile menu first link */.dvcs_free_header_5 .et_mobile_menu > li:first-child > a {border-top: 1px solid rgba(0,0,0,.03) !important;}/* open mobile menu icon */.et-db #et-boc .et-l .dvcs_free_header_5 .opened .mobile_menu_bar:before {content: "d";}/* mobile menu parent menu items */.dvcs_free_header_5 .et_mobile_menu .menu-item-has-children > a {background-color: transparent;}/*** SMOOTH SUBMENUS EFFECT CSS.* @author Ivan Chiurcci* @site https://www.divicio.us/tutorials/menu/create-the-smooth-submenus-effect-for-divi-desktop-menu/*//* Submenu background and arrow *//* hide submenu */.dvcs_smooth_submenus .et_pb_menu__menu nav .et-menu > li > ul {animation: none;opacity: 0;transition: opacity 0.4s ease-in !important;}/* visible submenu */.dvcs-item-enter > .sub-menu {display: block;}.dvcs_smooth_submenus .et_pb_menu__menu nav .et-menu > .dvcs-item-enter-active > .sub-menu,.dvcs_smooth_submenus .dvcs-item-enter-active > .sub-menu {opacity: 1;}/* submenu background wrapper */.dvcs_submenu_bg_wrapper {position: absolute;z-index: 1;pointer-events: none;}.dvcs_submenu_bg_wrapper.dvcs-animatable {/* transition: transform 0.2s; */transition: all 0.4s ease;transform-origin: 50% 0;}.dvcs_submenu_bg_wrapper:not(.dvcs-animatable) {pointer-events: none;}/* submenu background */.dvcs_free_header_5 .dvcs_submenu_bg {width: 150px;height: 100px;position: absolute;left: 50%;transform: translateX(-50%);background: #ffffff;border-radius: 5px;box-shadow: 0px 2px 18px 0px rgb(0 0 0 / 10%);transition: all 0.2s, opacity 0.1s, transform 0.1s;transform-origin: 50% 0;display: flex;justify-content: center;opacity: 0;border-top: 5px solid #2c3333;}.dvcs_submenu_bg.dvcs_open {opacity: 1;}/* submenu background arrow */.dvcs_free_header_5 .dvcs_arrow {position: absolute;width: 7px;height: 7px;display: block;background: #2c3333;transform: translateY(-50%) rotate(45deg);pointer-events: none;top: -5px;}/* END Submenu background and arrow *//* Menus CSS *//* first level submenus */.dvcs_smooth_submenus .et_pb_menu__menu nav .et-menu > li > ul {left: 50%;transform: translate(-50%, 0) translateZ(0);background-color: transparent !important;}/* remove submenu box-shadow */.dvcs_smooth_submenus .nav li ul {box-shadow: none !important;}/* remove parent item arrow */.dvcs_smooth_submenus .et-menu > li.menu-item-has-children > a:after {content: "" !important;}/* parent item link */.dvcs_smooth_submenus .et-menu > li > a {padding-left: 10px !important;padding-right: 10px !important;}/* END Menus CSS *//* END SMOOTH SUBMENUS EFFECT CSS *//*** SMOOTH SUBMENUS EFFECT FOR DIVI DESKTOP MENU.* @author Ivan Chiurcci* @site https://www.divicio.us/tutorials/menu/create-the-smooth-submenus-effect-for-divi-desktop-menu/*/window.dvcsSmoothSubmenus = {/*** Create the submenu background element* and insert it into the menu element before element.** @param {HTMLelement} nav Menu element.* @param {HTMLelement} ul Menu element.*/createSubmenuBg: function(nav, ul){// create submenu background elementlet submenuBgWrapper = document.createElement("div"),submenuBg = document.createElement("div"),arrow = document.createElement("span");// add CSS classessubmenuBgWrapper.classList.add("dvcs_submenu_bg_wrapper");submenuBg.classList.add("dvcs_submenu_bg");arrow.classList.add("dvcs_arrow");// insert into menunav.insertBefore(submenuBgWrapper, ul);submenuBgWrapper.appendChild(submenuBg);submenuBg.appendChild(arrow);},/*** Handle the submenu bakcground on menu item mouse enter.** Shows the submenu background when the parent menu item is hovered over* and updates it's coordinates and size values accordingly.** @param {HTMLelement} item The menu item that is currently hovered over.* @param {HTMLelement} nav Menu element.* @param {HTMLelement} submenuBgWrapper Submenu background wrapper.* @param {HTMLelement} submenuBg Submenu background.*/handleEnter: function(item, nav, submenuBgWrapper, submenuBg){// coordinates of the current submenu and menu elementconst submenu = item.querySelector('.sub-menu'),submenuRect = submenu.getBoundingClientRect(),navRect = nav.getBoundingClientRect();// submenu background valuesconst bg = {height: submenuRect.height,width: submenuRect.width,top: submenuRect.top - navRect.top,left: submenuRect.left - navRect.left};// add CSS classesitem.classList.add('dvcs-item-enter');setTimeout(() => item.classList.contains('dvcs-item-enter') && item.classList.add('dvcs-item-enter-active'), 150);submenuBg.classList.add('dvcs_open');// set the submenu wrapper background propertiessubmenuBgWrapper.style.setProperty('transform', `translate(${bg.left}px, ${bg.top}px)`);submenuBgWrapper.style.setProperty('width', `${bg.width}px`);submenuBgWrapper.style.setProperty('height', `${bg.height}px`);// set the submenu background propertiessubmenuBg.style.setProperty('width', `${bg.width}px`);submenuBg.style.setProperty('height', `${bg.height}px`);},/*** Handle the submenu background hiding.** Hides the submenu background when the mouse leaves* the parent menu item.** @param {HTMLelement} item The menu item.* @param {HTMLelement} submenuBg Submenu background.*/handleLeave: function(item, submenuBg){// remove CSS classesitem.classList.remove('dvcs-item-enter', 'dvcs-item-enter-active');submenuBg.classList.remove('dvcs_open');// remove the submenu background propertiessubmenuBg.style.setProperty('width', '');submenuBg.style.setProperty('height', '');},/*** Handle the submenu background when mouse enters the menu element.** Enables transition for the submenu background to ensure it* moves smoothly in between the adjacent parent menu items.** @param {HTMLelement} submenuBgWrapper Submenu background wrapper.*/handleEnterUl: function(submenuBgWrapper){setTimeout(function(){submenuBgWrapper.classList.add('dvcs-animatable')}, 150);},/*** Handle the submenu background when mouse leaves the menu element.** Disables transition for the submenu background and* resets it's size.** @param {HTMLelement} submenuBgWrapper Submenu background wrapper.* @param {HTMLelement} submenuBg Submenu background.*/handleLeaveUl: function(submenuBgWrapper, submenuBg){submenuBgWrapper.classList.remove('dvcs-animatable');// remove the submenu background propertiessubmenuBg.style.setProperty('width', '');submenuBg.style.setProperty('height', '');},/*** Handle the "smooth submenus" effect.** @param {string} menuSelector Menu selector, CSS ID or class. Default: '#et-top-navigation'* @param {string} navSelector Menu element selector, CSS ID or class. Default: '#top-menu-nav'* @param {string} ulSelector Menu element selector, CSS ID or class. Default: '#top-menu'*/effect: function(menuSelector = '#et-top-navigation', navSelector = '#top-menu-nav', ulSelector = '#top-menu'){// select the menuslet menus = document.querySelectorAll(menuSelector); // EXPERIMENTALmenus.forEach(menu => {if(!menu){return}// select the menu and elementslet nav = menu.querySelector(navSelector),ul = nav.querySelector(ulSelector);// insert the submenu background element(with arrow) into the elementthis.createSubmenuBg(nav, ul);const items = nav.querySelectorAll(`${ulSelector} > li.menu-item-has-children`),submenuBgWrapper = nav.querySelector('.dvcs_submenu_bg_wrapper'),submenuBg = nav.querySelector('.dvcs_submenu_bg');// handle element mouse enterul.addEventListener('mouseenter', () => this.handleEnterUl(submenuBgWrapper));ul.addEventListener('touchstart', () => this.handleEnterUl(submenuBgWrapper)); // ???// handle menu items mouse enteritems.forEach(item => {item.addEventListener('mouseenter', () => {this.handleEnter(item, nav, submenuBgWrapper, submenuBg)})});items.forEach(item => { // ???item.addEventListener('touchstart', () => {this.handleEnter(item, nav, submenuBgWrapper, submenuBg)})});// handle menu items mouse leaveitems.forEach(item => {item.addEventListener('mouseleave', () => {this.handleLeave(item, submenuBg)})});// handle element mouse leaveul.addEventListener('mouseleave', () => this.handleLeaveUl(submenuBgWrapper, submenuBg));});}}document.addEventListener('DOMContentLoaded', function(){// Divi Menu(or Fullwidth Menu) moduledvcsSmoothSubmenus.effect('.dvcs_smooth_submenus', '.et-menu-nav', '.et-menu');})/*** Collapse Divi mobile menu submenus CSS.* @author Ivan Chiurcci* @site https://www.divicio.us/tutorials/how-to-collapse-divi-menu-module-submenus-and-keep-parent-links-clickable-on-mobile-devices/*//* START: Collapse Divi Menu Module Submenus and Keep Parent Items Clickable on Mobile *//* Parent menu item */.et_pb_module .et_mobile_menu .menu-item-has-children.clickable,.et_pb_module .et_mobile_menu .menu-item-has-children > a {position: relative;}/* Parent menu item icon */.et_pb_module .et_mobile_menu .menu-item-has-children:not(.clickable) > a:after,.et_pb_module .et_mobile_menu .menu-item-has-children.clickable > span.parent_icon:after {font-family: "ETmodules";text-align: center;speak: none;font-weight: normal;font-variant: normal;text-transform: none;-webkit-font-smoothing: antialiased;font-size: 16px;}/* Disabled parent menu item icon positioning */.et_pb_module .et_mobile_menu .menu-item-has-children:not(.clickable) > a:after {position: absolute;top: 13px;right: 10px;}/* Clickable parent menu item icon */.et_pb_module .et_mobile_menu .menu-item-has-children.clickable > span.parent_icon {display: grid;grid-template-rows: 1fr;grid-template-columns: 1fr;align-items: center;position: absolute;width: 46px;height: 46px;color: #120b75;background: rgba(0, 0, 0, 0);right: 0;top: 0;z-index: 9;}/* Collapsed submenu parent menu item icon */.et_pb_module .et_mobile_menu .menu-item-has-children:not(.clickable) > a:after,.et_pb_module .et_mobile_menu .menu-item-has-children.clickable > span.parent_icon:after {content: "#";}/* Expanded submenu parent menu item icon */.et_pb_module .et_mobile_menu .menu-item-has-children:not(.clickable).visible > a:after,.et_pb_module .et_mobile_menu .menu-item-has-children.clickable.visible > span.parent_icon:after {content: """;}/* Hide submenu by default */.et_pb_module .et_mobile_menu ul.sub-menu,.et-db #et-boc .et-l .et_pb_menu .et_mobile_menu > ul.sub-menu,.et-db #et-boc .et-l .et_pb_fullwidth_menu .et_mobile_menu > ul.sub-menu {display: none !important;visibility: hidden !important;}/* Show submenu */.et_pb_module .et_mobile_menu .visible > ul.sub-menu,.et-db #et-boc .et-l .et_pb_menu .et_mobile_menu .visible > ul.sub-menu,.et-db #et-boc .et-l .et_pb_fullwidth_menu .et_mobile_menu .visible > ul.sub-menu {display: block !important;visibility: visible !important;}/* END: Collapse Divi Menu Module Submenus and Keep Parent Items Clickable on Mobile */(function($) {/*** Collapse Divi mobile menu submenus.** Works for both the Menu and the Fullwidth Menu modules.* The parent item links can be either disabled or clickable.** @author Ivan Chiurcci* @site https://www.divicio.us/tutorials/how-to-collapse-divi-menu-module-submenus-and-keep-parent-links-clickable-on-mobile-devices/** @param bool parentClickable Pass true to keep the parent menu item links clickable. Default: false.*/function dvcs_collapse_menu_module_submenus_on_mobile(parentClickable = false) {// Mobile menulet $menu = $('.et_pb_module .et_mobile_menu');// Iterate the mobile menu links$menu.find('a').each(function() {// Menu hamburger iconlet $menu_icon = $(this).parents('.mobile_nav').find('.mobile_menu_bar');// Remove click event handlers from the link$(this).off('click');// If the menu item DOESN'T HAVE submenusif( ! $(this).siblings('.sub-menu').length ) {// Close the mobile menu on link click$(this).on('click', (e) => $menu_icon.trigger('click'));} else {// If parent items links are DISABLEDif( ! parentClickable ){// Replace the URL with the # symbol$(this).attr('href', '#');// Open/close the submenu on link click$(this).on('click', (e) => toggle_visible(e, $(this).parent()));} else {// Add the "clickable" class to the parent( tag)$(this).parent().addClass('clickable')// Prepend the icon to parent.prepend('')// Open/close the submenu on icon click.find('.parent_icon').on('click', (e) => toggle_visible(e, $(this).parent()));// Link click$(this).on('click', function(e){// Toggle the submenu if the link doesn't have a URL or anchorif ( $(this).attr('href') === '#' ) {toggle_visible(e, $(this).parent());} else {// Close the mobile menu$menu_icon.trigger('click');}});}}});/*** Toggles the 'visible' class on passed element.*/const toggle_visible = (e, elem) => {e.preventDefault();elem.toggleClass('visible');}}$(function() {/*** Call the function with a delay to allow* the mobile menu(s) be ready first.** To keep parent links clickable pass true (boolean) as argument.*/setTimeout(function() {dvcs_collapse_menu_module_submenus_on_mobile(false);}, 700);});})(jQuery);Login Secure, Reliable, South African
+Find out moreco.zaorg.zanet.zaweb.zaAbout Us
+
+ZA Registry Consortium (ZARC) is the contracted Registry Operator for South Africa’s second-level domains (SLDs): CO.ZA, ORG.ZA, NET.ZA, and WEB.ZA.
+
+As a proudly South African, homegrown initiative, we are dedicated to providing innovative and internationally benchmarked domain name solutions that drive the security, stability, and growth of South Africa’s digital landscape.
+Backed by industry expertise, ZARC ensures the seamless operation of .ZA domains through technical excellence, robust infrastructure, and a commitment to cybersecurity. Our experienced team of registry professionals, technicians, and partners work together to uphold the integrity of South Africa’s domain space.
+OUR MISSION – ZARC IS COMMITED TO:Ensuring Security & Reliability – We implement world-class standards to safeguard domain ownership and prevent domain abuse.Driving Local Innovation – As a South African entity, we continuously evolve our offerings to meet the needs of businesses and individuals in the digital economy.Supporting the Internet Community – Through training, education, and strategic partnerships, we empower stakeholders with the knowledge and tools to navigate the domain name industry.More About UsStay connected with usRegistrars
+View the full list of accredited registrars.Take me thereWHOIS
+Querying domain names and IP addresses.View Port 43 WHOISTechnical
+Choose your zones, start your journey with ZARC.Technical OT&EFAQ
+Provides quick answers to common questions.View FAQsCELEbrating 30 years of co.za
+
+In 2024, ZARC proudly celebrates 30 years of CO.ZA, a milestone that highlights the resilience, trust, and growth of South Africa’s online presence. As we look to the future, we remain focused on fostering a secure and inclusive internet space for all.Become a RegistrarArticles
+Building Trust Through Data: How .ZA Turned Raw Logs into Insights
+Nov 5, 2025 | Uncategorized
+At ZARC, the registry operator for South Africa’s .ZA commercial second-level domains, data isn’t just an operational by-product — it’s...read moreUnderstanding DNSSEC: Strengthening Trust in the Internet
+Oct 27, 2025 | Articles
+The Domain Name System (DNS) is often described as the “phonebook of the Internet.” It translates human-friendly domain names, like...read moreMandela Day 2025
+Aug 15, 2025 | Articles
+Every year on 18 July, South Africans and the world pause to honour the life and legacy of Nelson Mandela. Mandela Day is a global call to...read moreRead all articlesStatistics
+Vertical Domain Movement (growth/decline) of the SRSfetch('proxy-vertical.php').then(response => response.json()).then(data => {// Format date categories as "MMM YYYY" (e.g., "Apr 2024")const categories = data.map(item => {const d = new Date(item.date);return d.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });});// Convert the values to integersconst createCounts = data.map(item => parseInt(item.create_count, 10));const deleteCounts = data.map(item => parseInt(item.delete_count, 10));const movements = data.map(item => parseInt(item.movement, 10));// ApexCharts options for a mixed chartvar options = {chart: {height: 426,type: 'line',stacked: false,toolbar: {show: false // disables the zoom and export buttons}},title: {align: 'center',style: {fontSize: '16px',fontWeight: 'bold',color: '#373d3f'}},series: [{ name: 'Creates', type: 'line', data: createCounts },{ name: 'Deletes', type: 'line', data: deleteCounts },{ name: 'Net Movement', type: 'column', data: movements }],xaxis: {categories: categories,labels: {rotate: -45,rotateAlways: true,style: {fontSize: '12px'}}},colors: ['#4c956c', '#e63946', '#193e73'],stroke: {width: [4, 4, 0],curve: 'smooth'},markers: {size: [5, 5, 0]},tooltip: {shared: true,intersect: false},legend: {position: 'bottom'},plotOptions: {bar: {columnWidth: '50%',borderRadius: 4, // Rounded corner radiusborderRadiusApplication: 'end' // Apply the rounding only to the "end" side of the bar}}};// Render the chart in the specified divvar chart = new ApexCharts(document.querySelector("#verticalMovementChart"), options);chart.render();}).catch(error => console.error('Error fetching data:', error));Horizontal Movement (Transfers) in the SRS// Fetch the JSON data from your proxy file (adjust the URL/path if needed)fetch('proxy-horizontal.php').then(response => response.json()).then(data => {// Format x-axis labels as "Apr 2024"const categories = data.map(item => {const d = new Date(item.date);return d.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });});// The in/out counts are identical, so we only use one value for the chartconst transfers = data.map(item => parseInt(item.transfer_in_count, 10));// Configure ApexCharts optionsvar options = {chart: {height: 426,type: 'bar'},title: {align: 'center',style: {fontSize: '16px',fontWeight: 'bold',color: '#373d3f'}},subtitle: {align: 'center'},series: [{name: 'Transfers',data: transfers}],xaxis: {categories: categories,labels: {rotate: -45,rotateAlways: true,style: {fontSize: '12px'}}},colors: ['#4c956c'], // Green color for the barsplotOptions: {bar: {columnWidth: '50%',borderRadius: 4, // Rounded cornersborderRadiusApplication: 'end' // Only applied at the top (end) of the bar}},dataLabels: {enabled: false // Disable data labels on each bar},tooltip: {shared: true,intersect: false},legend: {position: 'bottom'}};// Render the chart in the specified divvar chart = new ApexCharts(document.querySelector("#transfersChart"), options);chart.render();}).catch(error => console.error('Error fetching data:', error));SRS Domain Count Over Time// Fetch the domain count data from your proxy filefetch('proxy-domain-count.php').then(response => response.json()).then(data => {// Convert date strings to user-friendly month/year labels (e.g., "May 2024")const categories = data.map(item => {const d = new Date(item.date);return d.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });});// Convert string sums to integersconst domainCounts = data.map(item => parseInt(item.sum, 10));// Configure ApexChartsvar options = {chart: {height: 426,type: 'area',toolbar: {show: false // disables the zoom and export buttons}},title: {align: 'left',style: {fontSize: '16px',fontWeight: 'bold',color: '#373d3f'}},subtitle: {align: 'left'},series: [{name: "Domain Count",data: domainCounts}],xaxis: {categories: categories,labels: {rotate: -45,rotateAlways: true,style: {fontSize: '12px'}}},yaxis: {labels: {formatter: val => val.toLocaleString() // e.g., 1,400,092}},colors: ['#193e73'],stroke: {curve: 'smooth',width: 3},fill: {type: 'gradient',gradient: {shadeIntensity: 1,gradientToColors: ['#193e73'], // same base color or vary as neededinverseColors: false,opacityFrom: 0.4,opacityTo: 0,stops: [0, 90, 100]}},dataLabels: {enabled: false},tooltip: {shared: true,intersect: false,y: {formatter: val => val.toLocaleString()}},legend: {position: 'bottom'}};// Render the chart inside the #domainCountChart divvar chart = new ApexCharts(document.querySelector("#domainCountChart"), options);chart.render();}).catch(error => console.error('Error fetching domain count data:', error));See all statistics
+ZARC will operate with skeletal staff from 24 Dec 2025 to 5 Jan 2026. Essential support remains available via support@registry.net.za.Wishing you a safe and joyful festive season! 🎄Email Support
+ZA Registry Consortium (ZARC) is the contracted registry operator for South Africa’s commercial second-level domains (SLDs): CO.ZA, ORG.ZA, NET.ZA and WEB.ZA.
+We maintain a proud association with the CO.ZA domain space, having been involved in its establishment, promotion and administration since 1995, supporting the growth of South Africa’s online presence for nearly three decadesRead our FAQsFollowFollowFollowFollowFollowFollow
+PAIA INFO | TERMSNEWSLETTER
+
+Success!
+First NameLast NameEmailSubscribeCONTACT US
+
+ADDRESSZA Registry Consortium (Pty) Ltd,COZA House, Corporate Park South,Gazelle Close, Midrand
+TEL+27 11 314 0077LEGAL LINKS
+
+.ZA SLD Policies & Procedures →
+Registry Lock Service →
+Data Protection – Privacy Policy →
+Data Protection – Consent Form →
+Complaints Policy →
+Takedown Policy →
+Registrant Agreement Mandatory Terms
+Domain Name Dispute Resolution →ZarcAccreditations & Affiliations
+{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/Divi\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}(function() {var file = ["https:\/\/zarc.web.za\/wp-content\/et-cache\/43\/et-divi-dynamic-tb-1011-tb-91-43-late.css"];var handle = document.getElementById('divi-style-inline-inline-css');var location = handle.parentNode;if (0===document.querySelectorAll('link[href="' + file + '"]').length) {var link = document.createElement('link');link.rel = 'stylesheet';link.id = 'et-dynamic-late-css';link.href = file;location.insertBefore(link, handle.nextSibling);}})();/* *//* *//* *//* */
\ No newline at end of file
diff --git a/tests/fixtures/sex.org.za.txt b/tests/fixtures/sex.org.za.txt
new file mode 100644
index 00000000..070ceddb
--- /dev/null
+++ b/tests/fixtures/sex.org.za.txt
@@ -0,0 +1,43 @@
+document.documentElement.className = 'js';let jqueryParams=[],jQuery=function(r){return jqueryParams=[...jqueryParams,r],jQuery},$=function(r){return jqueryParams=[...jqueryParams,r],$};window.jQuery=jQuery,window.$=jQuery;let customHeadScripts=!1;jQuery.fn=jQuery.prototype={},$.fn=jQuery.prototype={},jQuery.noConflict=function(r){if(window.jQuery)return jQuery=window.jQuery,$=window.jQuery,customHeadScripts=!0,jQuery.noConflict},jQuery.ready=function(r){jqueryParams=[...jqueryParams,r]},$.ready=function(r){jqueryParams=[...jqueryParams,r]},jQuery.load=function(r){jqueryParams=[...jqueryParams,r]},$.load=function(r){jqueryParams=[...jqueryParams,r]},jQuery.fn.ready=function(r){jqueryParams=[...jqueryParams,r]},$.fn.ready=function(r){jqueryParams=[...jqueryParams,r]};Home - ZARC
+{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://zarc.web.za/","url":"https://zarc.web.za/","name":"Home - ZARC","isPartOf":{"@id":"https://zarc.web.za/#website"},"primaryImageOfPage":{"@id":"https://zarc.web.za/#primaryimage"},"image":{"@id":"https://zarc.web.za/#primaryimage"},"thumbnailUrl":"https://zarc.web.za/wp-content/uploads/2025/08/zarc-logo-1-300x300.png","datePublished":"2025-03-26T10:11:00+00:00","dateModified":"2025-11-17T13:31:33+00:00","description":"ZA Registry Consortium (ZARC) is the contracted Registry Operator for South Africa’s second-level domains (SLDs): CO.ZA, ORG.ZA, NET.ZA, and WEB.ZA.","breadcrumb":{"@id":"https://zarc.web.za/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://zarc.web.za/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https://zarc.web.za/#primaryimage","url":"https://zarc.web.za/wp-content/uploads/2025/08/zarc-logo-1.png","contentUrl":"https://zarc.web.za/wp-content/uploads/2025/08/zarc-logo-1.png","width":500,"height":500},{"@type":"BreadcrumbList","@id":"https://zarc.web.za/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home"}]},{"@type":"WebSite","@id":"https://zarc.web.za/#website","url":"https://zarc.web.za/","name":"ZARC","description":"Enhancing Domain Security","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://zarc.web.za/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}.wp-block-audio :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-audio :where(figcaption){color:#ffffffa6}.wp-block-audio{margin:0 0 1em}.wp-block-code{border:1px solid #ccc;border-radius:4px;font-family:Menlo,Consolas,monaco,monospace;padding:.8em 1em}.wp-block-embed :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-embed :where(figcaption){color:#ffffffa6}.wp-block-embed{margin:0 0 1em}.blocks-gallery-caption{color:#555;font-size:13px;text-align:center}.is-dark-theme .blocks-gallery-caption{color:#ffffffa6}:root :where(.wp-block-image figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme :root :where(.wp-block-image figcaption){color:#ffffffa6}.wp-block-image{margin:0 0 1em}.wp-block-pullquote{border-bottom:4px solid;border-top:4px solid;color:currentColor;margin-bottom:1.75em}.wp-block-pullquote cite,.wp-block-pullquote footer,.wp-block-pullquote__citation{color:currentColor;font-size:.8125em;font-style:normal;text-transform:uppercase}.wp-block-quote{border-left:.25em solid;margin:0 0 1.75em;padding-left:1em}.wp-block-quote cite,.wp-block-quote footer{color:currentColor;font-size:.8125em;font-style:normal;position:relative}.wp-block-quote:where(.has-text-align-right){border-left:none;border-right:.25em solid;padding-left:0;padding-right:1em}.wp-block-quote:where(.has-text-align-center){border:none;padding-left:0}.wp-block-quote.is-large,.wp-block-quote.is-style-large,.wp-block-quote:where(.is-style-plain){border:none}.wp-block-search .wp-block-search__label{font-weight:700}.wp-block-search__button{border:1px solid #ccc;padding:.375em .625em}:where(.wp-block-group.has-background){padding:1.25em 2.375em}.wp-block-separator.has-css-opacity{opacity:.4}.wp-block-separator{border:none;border-bottom:2px solid;margin-left:auto;margin-right:auto}.wp-block-separator.has-alpha-channel-opacity{opacity:1}.wp-block-separator:not(.is-style-wide):not(.is-style-dots){width:100px}.wp-block-separator.has-background:not(.is-style-dots){border-bottom:none;height:1px}.wp-block-separator.has-background:not(.is-style-wide):not(.is-style-dots){height:2px}.wp-block-table{margin:0 0 1em}.wp-block-table td,.wp-block-table th{word-break:normal}.wp-block-table :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-table :where(figcaption){color:#ffffffa6}.wp-block-video :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-video :where(figcaption){color:#ffffffa6}.wp-block-video{margin:0 0 1em}:root :where(.wp-block-template-part.has-background){margin-bottom:0;margin-top:0;padding:1.25em 2.375em}:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:root { --wp--style--global--content-size: 823px;--wp--style--global--wide-size: 1080px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;line-height: inherit;padding: calc(0.667em + 2px) calc(1.333em + 2px);text-decoration: none;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}/*!Theme Name: DiviTheme URI: http://www.elegantthemes.com/gallery/divi/Version: 4.27.4Description: Smart. Flexible. Beautiful. Divi is the most powerful theme in our collection.Author: Elegant ThemesAuthor URI: http://www.elegantthemes.comLicense: GNU General Public License v2License URI: http://www.gnu.org/licenses/gpl-2.0.html*/a,abbr,acronym,address,applet,b,big,blockquote,body,center,cite,code,dd,del,dfn,div,dl,dt,em,fieldset,font,form,h1,h2,h3,h4,h5,h6,html,i,iframe,img,ins,kbd,label,legend,li,object,ol,p,pre,q,s,samp,small,span,strike,strong,sub,sup,tt,u,ul,var{margin:0;padding:0;border:0;outline:0;font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}blockquote{margin:20px 0 30px;border-left:5px solid;padding-left:20px}:focus{outline:0}del{text-decoration:line-through}pre{overflow:auto;padding:10px}figure{margin:0}table{border-collapse:collapse;border-spacing:0}article,aside,footer,header,hgroup,nav,section{display:block}body{font-family:Open Sans,Arial,sans-serif;font-size:14px;color:#666;background-color:#fff;line-height:1.7em;font-weight:500;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.page-template-page-template-blank-php #page-container{padding-top:0!important}body.et_cover_background{background-size:cover!important;background-position:top!important;background-repeat:no-repeat!important;background-attachment:fixed}a{color:#2ea3f2}a,a:hover{text-decoration:none}p{padding-bottom:1em}p:not(.has-background):last-of-type{padding-bottom:0}p.et_normal_padding{padding-bottom:1em}strong{font-weight:700}cite,em,i{font-style:italic}code,pre{font-family:Courier New,monospace;margin-bottom:10px}ins{text-decoration:none}sub,sup{height:0;line-height:1;position:relative;vertical-align:baseline}sup{bottom:.8em}sub{top:.3em}dl{margin:0 0 1.5em}dl dt{font-weight:700}dd{margin-left:1.5em}blockquote p{padding-bottom:0}embed,iframe,object,video{max-width:100%}h1,h2,h3,h4,h5,h6{color:#333;padding-bottom:10px;line-height:1em;font-weight:500}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:inherit}h1{font-size:30px}h2{font-size:26px}h3{font-size:22px}h4{font-size:18px}h5{font-size:16px}h6{font-size:14px}input{-webkit-appearance:none}input[type=checkbox]{-webkit-appearance:checkbox}input[type=radio]{-webkit-appearance:radio}input.text,input.title,input[type=email],input[type=password],input[type=tel],input[type=text],select,textarea{background-color:#fff;border:1px solid #bbb;padding:2px;color:#4e4e4e}input.text:focus,input.title:focus,input[type=text]:focus,select:focus,textarea:focus{border-color:#2d3940;color:#3e3e3e}input.text,input.title,input[type=text],select,textarea{margin:0}textarea{padding:4px}button,input,select,textarea{font-family:inherit}img{max-width:100%;height:auto}.clear{clear:both}br.clear{margin:0;padding:0}.pagination{clear:both}#et_search_icon:hover,.et-social-icon a:hover,.et_password_protected_form .et_submit_button,.form-submit .et_pb_buttontton.alt.disabled,.nav-single a,.posted_in a{color:#2ea3f2}.et-search-form,blockquote{border-color:#2ea3f2}#main-content{background-color:#fff}.container{width:80%;max-width:1080px;margin:auto;position:relative}body:not(.et-tb) #main-content .container,body:not(.et-tb-has-header) #main-content .container{padding-top:58px}.et_full_width_page #main-content .container:before{display:none}.main_title{margin-bottom:20px}.et_password_protected_form .et_submit_button:hover,.form-submit .et_pb_button:hover{background:rgba(0,0,0,.05)}.et_button_icon_visible .et_pb_button{padding-right:2em;padding-left:.7em}.et_button_icon_visible .et_pb_button:after{opacity:1;margin-left:0}.et_button_left .et_pb_button:hover:after{left:.15em}.et_button_left .et_pb_button:after{margin-left:0;left:1em}.et_button_icon_visible.et_button_left .et_pb_button,.et_button_left .et_pb_button:hover,.et_button_left .et_pb_module .et_pb_button:hover{padding-left:2em;padding-right:.7em}.et_button_icon_visible.et_button_left .et_pb_button:after,.et_button_left .et_pb_button:hover:after{left:.15em}.et_password_protected_form .et_submit_button:hover,.form-submit .et_pb_button:hover{padding:.3em 1em}.et_button_no_icon .et_pb_button:after{display:none}.et_button_no_icon.et_button_icon_visible.et_button_left .et_pb_button,.et_button_no_icon.et_button_left .et_pb_button:hover,.et_button_no_icon .et_pb_button,.et_button_no_icon .et_pb_button:hover{padding:.3em 1em!important}.et_button_custom_icon .et_pb_button:after{line-height:1.7em}.et_button_custom_icon.et_button_icon_visible .et_pb_button:after,.et_button_custom_icon .et_pb_button:hover:after{margin-left:.3em}#left-area .post_format-post-format-gallery .wp-block-gallery:first-of-type{padding:0;margin-bottom:-16px}.entry-content table:not(.variations){border:1px solid #eee;margin:0 0 15px;text-align:left;width:100%}.entry-content thead th,.entry-content tr th{color:#555;font-weight:700;padding:9px 24px}.entry-content tr td{border-top:1px solid #eee;padding:6px 24px}#left-area ul,.entry-content ul,.et-l--body ul,.et-l--footer ul,.et-l--header ul{list-style-type:disc;padding:0 0 23px 1em;line-height:26px}#left-area ol,.entry-content ol,.et-l--body ol,.et-l--footer ol,.et-l--header ol{list-style-type:decimal;list-style-position:inside;padding:0 0 23px;line-height:26px}#left-area ul li ul,.entry-content ul li ol{padding:2px 0 2px 20px}#left-area ol li ul,.entry-content ol li ol,.et-l--body ol li ol,.et-l--footer ol li ol,.et-l--header ol li ol{padding:2px 0 2px 35px}#left-area ul.wp-block-gallery{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style-type:none;padding:0}#left-area ul.products{padding:0!important;line-height:1.7!important;list-style:none!important}.gallery-item a{display:block}.gallery-caption,.gallery-item a{width:90%}#wpadminbar{z-index:100001}#left-area .post-meta{font-size:14px;padding-bottom:15px}#left-area .post-meta a{text-decoration:none;color:#666}#left-area .et_featured_image{padding-bottom:7px}.single .post{padding-bottom:25px}body.single .et_audio_content{margin-bottom:-6px}.nav-single a{text-decoration:none;color:#2ea3f2;font-size:14px;font-weight:400}.nav-previous{float:left}.nav-next{float:right}.et_password_protected_form p input{background-color:#eee;border:none!important;width:100%!important;border-radius:0!important;font-size:14px;color:#999!important;padding:16px!important;-webkit-box-sizing:border-box;box-sizing:border-box}.et_password_protected_form label{display:none}.et_password_protected_form .et_submit_button{font-family:inherit;display:block;float:right;margin:8px auto 0;cursor:pointer}.post-password-required p.nocomments.container{max-width:100%}.post-password-required p.nocomments.container:before{display:none}.aligncenter,div.post .new-post .aligncenter{display:block;margin-left:auto;margin-right:auto}.wp-caption{border:1px solid #ddd;text-align:center;background-color:#f3f3f3;margin-bottom:10px;max-width:96%;padding:8px}.wp-caption.alignleft{margin:0 30px 20px 0}.wp-caption.alignright{margin:0 0 20px 30px}.wp-caption img{margin:0;padding:0;border:0}.wp-caption p.wp-caption-text{font-size:12px;padding:0 4px 5px;margin:0}.alignright{float:right}.alignleft{float:left}img.alignleft{display:inline;float:left;margin-right:15px}img.alignright{display:inline;float:right;margin-left:15px}.page.et_pb_pagebuilder_layout #main-content{background-color:transparent}body #main-content .et_builder_inner_content>h1,body #main-content .et_builder_inner_content>h2,body #main-content .et_builder_inner_content>h3,body #main-content .et_builder_inner_content>h4,body #main-content .et_builder_inner_content>h5,body #main-content .et_builder_inner_content>h6{line-height:1.4em}body #main-content .et_builder_inner_content>p{line-height:1.7em}.wp-block-pullquote{margin:20px 0 30px}.wp-block-pullquote.has-background blockquote{border-left:none}.wp-block-group.has-background{padding:1.5em 1.5em .5em}@media (min-width:981px){#left-area{width:79.125%;padding-bottom:23px}#main-content .container:before{content:"";position:absolute;top:0;height:100%;width:1px;background-color:#e2e2e2}.et_full_width_page #left-area,.et_no_sidebar #left-area{float:none;width:100%!important}.et_full_width_page #left-area{padding-bottom:0}.et_no_sidebar #main-content .container:before{display:none}}@media (max-width:980px){#page-container{padding-top:80px}.et-tb #page-container,.et-tb-has-header #page-container{padding-top:0!important}#left-area,#sidebar{width:100%!important}#main-content .container:before{display:none!important}.et_full_width_page .et_gallery_item:nth-child(4n+1){clear:none}}@media print{#page-container{padding-top:0!important}}#wp-admin-bar-et-use-visual-builder a:before{font-family:ETmodules!important;content:"\e625";font-size:30px!important;width:28px;margin-top:-3px;color:#974df3!important}#wp-admin-bar-et-use-visual-builder:hover a:before{color:#fff!important}#wp-admin-bar-et-use-visual-builder:hover a,#wp-admin-bar-et-use-visual-builder a:hover{transition:background-color .5s ease;-webkit-transition:background-color .5s ease;-moz-transition:background-color .5s ease;background-color:#7e3bd0!important;color:#fff!important}* html .clearfix,:first-child+html .clearfix{zoom:1}.iphone .et_pb_section_video_bg video::-webkit-media-controls-start-playback-button{display:none!important;-webkit-appearance:none}.et_mobile_device .et_pb_section_parallax .et_pb_parallax_css{background-attachment:scroll}.et-social-facebook a.icon:before{content:"\e093"}.et-social-twitter a.icon:before{content:"\e094"}.et-social-google-plus a.icon:before{content:"\e096"}.et-social-instagram a.icon:before{content:"\e09a"}.et-social-rss a.icon:before{content:"\e09e"}.ai1ec-single-event:after{content:" ";display:table;clear:both}.evcal_event_details .evcal_evdata_cell .eventon_details_shading_bot.eventon_details_shading_bot{z-index:3}.wp-block-divi-layout{margin-bottom:1em}*{-webkit-box-sizing:border-box;box-sizing:border-box}#et-info-email:before,#et-info-phone:before,#et_search_icon:before,.comment-reply-link:after,.et-cart-info span:before,.et-pb-arrow-next:before,.et-pb-arrow-prev:before,.et-social-icon a:before,.et_audio_container .mejs-playpause-button button:before,.et_audio_container .mejs-volume-button button:before,.et_overlay:before,.et_password_protected_form .et_submit_button:after,.et_pb_button:after,.et_pb_contact_reset:after,.et_pb_contact_submit:after,.et_pb_font_icon:before,.et_pb_newsletter_button:after,.et_pb_pricing_table_button:after,.et_pb_promo_button:after,.et_pb_testimonial:before,.et_pb_toggle_title:before,.form-submit .et_pb_button:after,.mobile_menu_bar:before,a.et_pb_more_button:after{font-family:ETmodules!important;speak:none;font-style:normal;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-shadow:0 0;direction:ltr}.et-pb-icon,.et_pb_custom_button_icon.et_pb_button:after,.et_pb_login .et_pb_custom_button_icon.et_pb_button:after,.et_pb_woo_custom_button_icon .button.et_pb_custom_button_icon.et_pb_button:after,.et_pb_woo_custom_button_icon .button.et_pb_custom_button_icon.et_pb_button:hover:after{content:attr(data-icon)}.et-pb-icon{font-family:ETmodules;speak:none;font-weight:400;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;font-size:96px;font-style:normal;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;direction:ltr}#et-ajax-saving{display:none;-webkit-transition:background .3s,-webkit-box-shadow .3s;transition:background .3s,-webkit-box-shadow .3s;transition:background .3s,box-shadow .3s;transition:background .3s,box-shadow .3s,-webkit-box-shadow .3s;-webkit-box-shadow:rgba(0,139,219,.247059) 0 0 60px;box-shadow:0 0 60px rgba(0,139,219,.247059);position:fixed;top:50%;left:50%;width:50px;height:50px;background:#fff;border-radius:50px;margin:-25px 0 0 -25px;z-index:999999;text-align:center}#et-ajax-saving img{margin:9px}.et-safe-mode-indicator,.et-safe-mode-indicator:focus,.et-safe-mode-indicator:hover{-webkit-box-shadow:0 5px 10px rgba(41,196,169,.15);box-shadow:0 5px 10px rgba(41,196,169,.15);background:#29c4a9;color:#fff;font-size:14px;font-weight:600;padding:12px;line-height:16px;border-radius:3px;position:fixed;bottom:30px;right:30px;z-index:999999;text-decoration:none;font-family:Open Sans,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.et_pb_button{font-size:20px;font-weight:500;padding:.3em 1em;line-height:1.7em!important;background-color:transparent;background-size:cover;background-position:50%;background-repeat:no-repeat;border:2px solid;border-radius:3px;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-transition-property:all!important;transition-property:all!important}.et_pb_button,.et_pb_button_inner{position:relative}.et_pb_button:hover,.et_pb_module .et_pb_button:hover{border:2px solid transparent;padding:.3em 2em .3em .7em}.et_pb_button:hover{background-color:hsla(0,0%,100%,.2)}.et_pb_bg_layout_light.et_pb_button:hover,.et_pb_bg_layout_light .et_pb_button:hover{background-color:rgba(0,0,0,.05)}.et_pb_button:after,.et_pb_button:before{font-size:32px;line-height:1em;content:"\35";opacity:0;position:absolute;margin-left:-1em;-webkit-transition:all .2s;transition:all .2s;text-transform:none;-webkit-font-feature-settings:"kern" off;font-feature-settings:"kern" off;font-variant:none;font-style:normal;font-weight:400;text-shadow:none}.et_pb_button.et_hover_enabled:hover:after,.et_pb_button.et_pb_hovered:hover:after{-webkit-transition:none!important;transition:none!important}.et_pb_button:before{display:none}.et_pb_button:hover:after{opacity:1;margin-left:0}.et_pb_column_1_3 h1,.et_pb_column_1_4 h1,.et_pb_column_1_5 h1,.et_pb_column_1_6 h1,.et_pb_column_2_5 h1{font-size:26px}.et_pb_column_1_3 h2,.et_pb_column_1_4 h2,.et_pb_column_1_5 h2,.et_pb_column_1_6 h2,.et_pb_column_2_5 h2{font-size:23px}.et_pb_column_1_3 h3,.et_pb_column_1_4 h3,.et_pb_column_1_5 h3,.et_pb_column_1_6 h3,.et_pb_column_2_5 h3{font-size:20px}.et_pb_column_1_3 h4,.et_pb_column_1_4 h4,.et_pb_column_1_5 h4,.et_pb_column_1_6 h4,.et_pb_column_2_5 h4{font-size:18px}.et_pb_column_1_3 h5,.et_pb_column_1_4 h5,.et_pb_column_1_5 h5,.et_pb_column_1_6 h5,.et_pb_column_2_5 h5{font-size:16px}.et_pb_column_1_3 h6,.et_pb_column_1_4 h6,.et_pb_column_1_5 h6,.et_pb_column_1_6 h6,.et_pb_column_2_5 h6{font-size:15px}.et_pb_bg_layout_dark,.et_pb_bg_layout_dark h1,.et_pb_bg_layout_dark h2,.et_pb_bg_layout_dark h3,.et_pb_bg_layout_dark h4,.et_pb_bg_layout_dark h5,.et_pb_bg_layout_dark h6{color:#fff!important}.et_pb_module.et_pb_text_align_left{text-align:left}.et_pb_module.et_pb_text_align_center{text-align:center}.et_pb_module.et_pb_text_align_right{text-align:right}.et_pb_module.et_pb_text_align_justified{text-align:justify}.clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.et_pb_bg_layout_light .et_pb_more_button{color:#2ea3f2}.et_builder_inner_content{position:relative;z-index:1}header .et_builder_inner_content{z-index:2}.et_pb_css_mix_blend_mode_passthrough{mix-blend-mode:unset!important}.et_pb_image_container{margin:-20px -20px 29px}.et_pb_module_inner{position:relative}.et_hover_enabled_preview{z-index:2}.et_hover_enabled:hover{position:relative;z-index:2}.et_pb_all_tabs,.et_pb_module,.et_pb_posts_nav a,.et_pb_tab,.et_pb_with_background{position:relative;background-size:cover;background-position:50%;background-repeat:no-repeat}.et_pb_background_mask,.et_pb_background_pattern{bottom:0;left:0;position:absolute;right:0;top:0}.et_pb_background_mask{background-size:calc(100% + 2px) calc(100% + 2px);background-repeat:no-repeat;background-position:50%;overflow:hidden}.et_pb_background_pattern{background-position:0 0;background-repeat:repeat}.et_pb_with_border{position:relative;border:0 solid #333}.post-password-required .et_pb_row{padding:0;width:100%}.post-password-required .et_password_protected_form{min-height:0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_password_protected_form h1,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_password_protected_form h1{display:none}.et_pb_no_bg{padding:0!important}.et_overlay.et_pb_inline_icon:before,.et_pb_inline_icon:before{content:attr(data-icon)}.et_pb_more_button{color:inherit;text-shadow:none;text-decoration:none;display:inline-block;margin-top:20px}.et_parallax_bg_wrap{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0}.et_parallax_bg{background-repeat:no-repeat;background-position:top;background-size:cover;position:absolute;bottom:0;left:0;width:100%;height:100%;display:block}.et_parallax_bg.et_parallax_bg__hover,.et_parallax_bg.et_parallax_bg_phone,.et_parallax_bg.et_parallax_bg_tablet,.et_parallax_gradient.et_parallax_gradient__hover,.et_parallax_gradient.et_parallax_gradient_phone,.et_parallax_gradient.et_parallax_gradient_tablet,.et_pb_section_parallax_hover:hover .et_parallax_bg:not(.et_parallax_bg__hover),.et_pb_section_parallax_hover:hover .et_parallax_gradient:not(.et_parallax_gradient__hover){display:none}.et_pb_section_parallax_hover:hover .et_parallax_bg.et_parallax_bg__hover,.et_pb_section_parallax_hover:hover .et_parallax_gradient.et_parallax_gradient__hover{display:block}.et_parallax_gradient{bottom:0;display:block;left:0;position:absolute;right:0;top:0}.et_pb_module.et_pb_section_parallax,.et_pb_posts_nav a.et_pb_section_parallax,.et_pb_tab.et_pb_section_parallax{position:relative}.et_pb_section_parallax .et_pb_parallax_css,.et_pb_slides .et_parallax_bg.et_pb_parallax_css{background-attachment:fixed}body.et-bfb .et_pb_section_parallax .et_pb_parallax_css,body.et-bfb .et_pb_slides .et_parallax_bg.et_pb_parallax_css{background-attachment:scroll;bottom:auto}.et_pb_section_parallax.et_pb_column .et_pb_module,.et_pb_section_parallax.et_pb_row .et_pb_column,.et_pb_section_parallax.et_pb_row .et_pb_module{z-index:9;position:relative}.et_pb_more_button:hover:after{opacity:1;margin-left:0}.et_pb_preload .et_pb_section_video_bg,.et_pb_preload>div{visibility:hidden}.et_pb_preload,.et_pb_section.et_pb_section_video.et_pb_preload{position:relative;background:#464646!important}.et_pb_preload:before{content:"";position:absolute;top:50%;left:50%;background:url(https://zarc.web.za/wp-content/themes/Divi/includes/builder/styles/images/preloader.gif) no-repeat;border-radius:32px;width:32px;height:32px;margin:-16px 0 0 -16px}.box-shadow-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;pointer-events:none}.et_pb_section>.box-shadow-overlay~.et_pb_row{z-index:11}body.safari .section_has_divider{will-change:transform}.et_pb_row>.box-shadow-overlay{z-index:8}.has-box-shadow-overlay{position:relative}.et_clickable{cursor:pointer}.screen-reader-text{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important}.et_multi_view_hidden,.et_multi_view_hidden_image{display:none!important}@keyframes multi-view-image-fade{0%{opacity:0}10%{opacity:.1}20%{opacity:.2}30%{opacity:.3}40%{opacity:.4}50%{opacity:.5}60%{opacity:.6}70%{opacity:.7}80%{opacity:.8}90%{opacity:.9}to{opacity:1}}.et_multi_view_image__loading{visibility:hidden}.et_multi_view_image__loaded{-webkit-animation:multi-view-image-fade .5s;animation:multi-view-image-fade .5s}#et-pb-motion-effects-offset-tracker{visibility:hidden!important;opacity:0;position:absolute;top:0;left:0}.et-pb-before-scroll-animation{opacity:0}header.et-l.et-l--header:after{clear:both;display:block;content:""}.et_pb_module{-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes fadeBottom{0%{opacity:0;-webkit-transform:translateY(10%);transform:translateY(10%)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeBottom{0%{opacity:0;-webkit-transform:translateY(10%);transform:translateY(10%)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fadeLeft{0%{opacity:0;-webkit-transform:translateX(-10%);transform:translateX(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeLeft{0%{opacity:0;-webkit-transform:translateX(-10%);transform:translateX(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeRight{0%{opacity:0;-webkit-transform:translateX(10%);transform:translateX(10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeRight{0%{opacity:0;-webkit-transform:translateX(10%);transform:translateX(10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeTop{0%{opacity:0;-webkit-transform:translateY(-10%);transform:translateY(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeTop{0%{opacity:0;-webkit-transform:translateY(-10%);transform:translateY(-10%)}to{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.et-waypoint:not(.et_pb_counters){opacity:0}@media (min-width:981px){.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_column .et_pb_module.et-last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_column .et_pb_module:last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_row_inner .et_pb_column .et_pb_module.et-last-child,.et_pb_section.et_section_specialty div.et_pb_row .et_pb_column .et_pb_row_inner .et_pb_column .et_pb_module:last-child,.et_pb_section div.et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_pb_section div.et_pb_row .et_pb_column .et_pb_module:last-child{margin-bottom:0}}@media (max-width:980px){.et_overlay.et_pb_inline_icon_tablet:before,.et_pb_inline_icon_tablet:before{content:attr(data-icon-tablet)}.et_parallax_bg.et_parallax_bg_tablet_exist,.et_parallax_gradient.et_parallax_gradient_tablet_exist{display:none}.et_parallax_bg.et_parallax_bg_tablet,.et_parallax_gradient.et_parallax_gradient_tablet{display:block}.et_pb_column .et_pb_module{margin-bottom:30px}.et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_pb_row .et_pb_column .et_pb_module:last-child,.et_section_specialty .et_pb_row .et_pb_column .et_pb_module.et-last-child,.et_section_specialty .et_pb_row .et_pb_column .et_pb_module:last-child{margin-bottom:0}.et_pb_more_button{display:inline-block!important}.et_pb_bg_layout_light_tablet.et_pb_button,.et_pb_bg_layout_light_tablet.et_pb_module.et_pb_button,.et_pb_bg_layout_light_tablet .et_pb_more_button{color:#2ea3f2}.et_pb_bg_layout_light_tablet .et_pb_forgot_password a{color:#666}.et_pb_bg_layout_light_tablet h1,.et_pb_bg_layout_light_tablet h2,.et_pb_bg_layout_light_tablet h3,.et_pb_bg_layout_light_tablet h4,.et_pb_bg_layout_light_tablet h5,.et_pb_bg_layout_light_tablet h6{color:#333!important}.et_pb_module .et_pb_bg_layout_light_tablet.et_pb_button{color:#2ea3f2!important}.et_pb_bg_layout_light_tablet{color:#666!important}.et_pb_bg_layout_dark_tablet,.et_pb_bg_layout_dark_tablet h1,.et_pb_bg_layout_dark_tablet h2,.et_pb_bg_layout_dark_tablet h3,.et_pb_bg_layout_dark_tablet h4,.et_pb_bg_layout_dark_tablet h5,.et_pb_bg_layout_dark_tablet h6{color:#fff!important}.et_pb_bg_layout_dark_tablet.et_pb_button,.et_pb_bg_layout_dark_tablet.et_pb_module.et_pb_button,.et_pb_bg_layout_dark_tablet .et_pb_more_button{color:inherit}.et_pb_bg_layout_dark_tablet .et_pb_forgot_password a{color:#fff}.et_pb_module.et_pb_text_align_left-tablet{text-align:left}.et_pb_module.et_pb_text_align_center-tablet{text-align:center}.et_pb_module.et_pb_text_align_right-tablet{text-align:right}.et_pb_module.et_pb_text_align_justified-tablet{text-align:justify}}@media (max-width:767px){.et_pb_more_button{display:inline-block!important}.et_overlay.et_pb_inline_icon_phone:before,.et_pb_inline_icon_phone:before{content:attr(data-icon-phone)}.et_parallax_bg.et_parallax_bg_phone_exist,.et_parallax_gradient.et_parallax_gradient_phone_exist{display:none}.et_parallax_bg.et_parallax_bg_phone,.et_parallax_gradient.et_parallax_gradient_phone{display:block}.et-hide-mobile{display:none!important}.et_pb_bg_layout_light_phone.et_pb_button,.et_pb_bg_layout_light_phone.et_pb_module.et_pb_button,.et_pb_bg_layout_light_phone .et_pb_more_button{color:#2ea3f2}.et_pb_bg_layout_light_phone .et_pb_forgot_password a{color:#666}.et_pb_bg_layout_light_phone h1,.et_pb_bg_layout_light_phone h2,.et_pb_bg_layout_light_phone h3,.et_pb_bg_layout_light_phone h4,.et_pb_bg_layout_light_phone h5,.et_pb_bg_layout_light_phone h6{color:#333!important}.et_pb_module .et_pb_bg_layout_light_phone.et_pb_button{color:#2ea3f2!important}.et_pb_bg_layout_light_phone{color:#666!important}.et_pb_bg_layout_dark_phone,.et_pb_bg_layout_dark_phone h1,.et_pb_bg_layout_dark_phone h2,.et_pb_bg_layout_dark_phone h3,.et_pb_bg_layout_dark_phone h4,.et_pb_bg_layout_dark_phone h5,.et_pb_bg_layout_dark_phone h6{color:#fff!important}.et_pb_bg_layout_dark_phone.et_pb_button,.et_pb_bg_layout_dark_phone.et_pb_module.et_pb_button,.et_pb_bg_layout_dark_phone .et_pb_more_button{color:inherit}.et_pb_module .et_pb_bg_layout_dark_phone.et_pb_button{color:#fff!important}.et_pb_bg_layout_dark_phone .et_pb_forgot_password a{color:#fff}.et_pb_module.et_pb_text_align_left-phone{text-align:left}.et_pb_module.et_pb_text_align_center-phone{text-align:center}.et_pb_module.et_pb_text_align_right-phone{text-align:right}.et_pb_module.et_pb_text_align_justified-phone{text-align:justify}}@media (max-width:479px){a.et_pb_more_button{display:block}}@media (min-width:768px) and (max-width:980px){[data-et-multi-view-load-tablet-hidden=true]:not(.et_multi_view_swapped){display:none!important}}@media (max-width:767px){[data-et-multi-view-load-phone-hidden=true]:not(.et_multi_view_swapped){display:none!important}}.et_pb_menu.et_pb_menu--style-inline_centered_logo .et_pb_menu__menu nav ul{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}@-webkit-keyframes multi-view-image-fade{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}50%{-webkit-transform:scale(1.01);transform:scale(1.01);opacity:1}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@font-face{font-family:ETmodules;font-display:block;src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.eot);src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.eot?#iefix) format("embedded-opentype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.woff) format("woff"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.ttf) format("truetype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/modules/all/modules.svg#ETmodules) format("svg");font-weight:400;font-style:normal}@media (min-width:981px){.et_pb_gutters3 .et_pb_column,.et_pb_gutters3.et_pb_row .et_pb_column{margin-right:5.5%}.et_pb_gutters3 .et_pb_column_4_4,.et_pb_gutters3.et_pb_row .et_pb_column_4_4{width:100%}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_module{margin-bottom:2.75%}.et_pb_gutters3 .et_pb_column_3_4,.et_pb_gutters3.et_pb_row .et_pb_column_3_4{width:73.625%}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_module{margin-bottom:3.735%}.et_pb_gutters3 .et_pb_column_2_3,.et_pb_gutters3.et_pb_row .et_pb_column_2_3{width:64.833%}.et_pb_gutters3 .et_pb_column_2_3 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_module{margin-bottom:4.242%}.et_pb_gutters3 .et_pb_column_3_5,.et_pb_gutters3.et_pb_row .et_pb_column_3_5{width:57.8%}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_module{margin-bottom:4.758%}.et_pb_gutters3 .et_pb_column_1_2,.et_pb_gutters3.et_pb_row .et_pb_column_1_2{width:47.25%}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_module{margin-bottom:5.82%}.et_pb_gutters3 .et_pb_column_2_5,.et_pb_gutters3.et_pb_row .et_pb_column_2_5{width:36.7%}.et_pb_gutters3 .et_pb_column_2_5 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_module{margin-bottom:7.493%}.et_pb_gutters3 .et_pb_column_1_3,.et_pb_gutters3.et_pb_row .et_pb_column_1_3{width:29.6667%}.et_pb_gutters3 .et_pb_column_1_3 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_module{margin-bottom:9.27%}.et_pb_gutters3 .et_pb_column_1_4,.et_pb_gutters3.et_pb_row .et_pb_column_1_4{width:20.875%}.et_pb_gutters3 .et_pb_column_1_4 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_module{margin-bottom:13.174%}.et_pb_gutters3 .et_pb_column_1_5,.et_pb_gutters3.et_pb_row .et_pb_column_1_5{width:15.6%}.et_pb_gutters3 .et_pb_column_1_5 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_module{margin-bottom:17.628%}.et_pb_gutters3 .et_pb_column_1_6,.et_pb_gutters3.et_pb_row .et_pb_column_1_6{width:12.0833%}.et_pb_gutters3 .et_pb_column_1_6 .et_pb_module,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_module{margin-bottom:22.759%}.et_pb_gutters3 .et_full_width_page.woocommerce-page ul.products li.product{width:20.875%;margin-right:5.5%;margin-bottom:5.5%}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products li.product,.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products li.product{width:28.353%;margin-right:7.47%}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products.columns-1 li.product,.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products.columns-1 li.product{width:100%;margin-right:0}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products.columns-2 li.product,.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products.columns-2 li.product{width:48%;margin-right:4%}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products.columns-2 li:nth-child(2n+2),.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products.columns-2 li:nth-child(2n+2){margin-right:0}.et_pb_gutters3.et_left_sidebar.woocommerce-page #main-content ul.products.columns-2 li:nth-child(3n+1),.et_pb_gutters3.et_right_sidebar.woocommerce-page #main-content ul.products.columns-2 li:nth-child(3n+1){clear:none}}@media (min-width:981px){.et_pb_gutters3 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters3 .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters3 .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child,.et_pb_gutters3.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters3.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters3.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child{margin-bottom:30px}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_4_4 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_widget{width:20.875%;margin-right:5.5%;margin-bottom:5.5%}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3{width:29.667%;margin-right:5.5%}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post{margin-bottom:18.539%}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_3_4 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_widget{width:28.353%;margin-right:7.47%;margin-bottom:7.47%}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2{width:46.265%;margin-right:7.47%}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:14.941%}.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_widget{width:45.758%;margin-right:8.483%;margin-bottom:8.483%}.et_pb_gutters3 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2{width:45.758%;margin-right:8.483%}.et_pb_gutters3 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:16.967%}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_3_5 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_widget{width:45.242%;margin-right:9.516%;margin-bottom:9.516%}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:9.516%}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_2 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_widget{width:44.18%;margin-right:11.64%;margin-bottom:11.64%}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:11.64%}.et_pb_gutters3 .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_2_5 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_2_5 .et_pb_widget{width:100%;margin-bottom:14.986%}.et_pb_gutters3 .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_3 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_widget{width:100%;margin-bottom:18.539%}.et_pb_gutters3 .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_4 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_widget{width:100%;margin-bottom:26.347%}.et_pb_gutters3 .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_5 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_widget{width:100%;margin-bottom:35.256%}.et_pb_gutters3 .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3 .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters3 .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3 .et_pb_column_1_6 .et_pb_widget,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_widget{width:100%;margin-bottom:45.517%}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_widget:nth-child(4n),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n){margin-right:0}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1){clear:both}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_4_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_widget:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n){margin-right:0}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1){clear:both}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_widget:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_widget:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3 .et_pb_column_3_5 .et_pb_widget:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3 .et_pb_column_3_5 .et_pb_widget:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_3_5 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters3 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters3 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters3.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}}@media (min-width:981px){.et_pb_gutter.et_pb_gutters1 #left-area{width:75%}.et_pb_gutter.et_pb_gutters1 #sidebar{width:25%}.et_pb_gutters1.et_right_sidebar #left-area{padding-right:0}.et_pb_gutters1.et_left_sidebar #left-area{padding-left:0}.et_pb_gutter.et_pb_gutters1.et_right_sidebar #main-content .container:before{right:25%!important}.et_pb_gutter.et_pb_gutters1.et_left_sidebar #main-content .container:before{left:25%!important}.et_pb_gutters1 .et_pb_column,.et_pb_gutters1.et_pb_row .et_pb_column{margin-right:0}.et_pb_gutters1 .et_pb_column_4_4,.et_pb_gutters1.et_pb_row .et_pb_column_4_4{width:100%}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_4,.et_pb_gutters1.et_pb_row .et_pb_column_3_4{width:75%}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_2_3,.et_pb_gutters1.et_pb_row .et_pb_column_2_3{width:66.667%}.et_pb_gutters1 .et_pb_column_2_3 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_5,.et_pb_gutters1.et_pb_row .et_pb_column_3_5{width:60%}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2,.et_pb_gutters1.et_pb_row .et_pb_column_1_2{width:50%}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_2_5,.et_pb_gutters1.et_pb_row .et_pb_column_2_5{width:40%}.et_pb_gutters1 .et_pb_column_2_5 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_3,.et_pb_gutters1.et_pb_row .et_pb_column_1_3{width:33.3333%}.et_pb_gutters1 .et_pb_column_1_3 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_4,.et_pb_gutters1.et_pb_row .et_pb_column_1_4{width:25%}.et_pb_gutters1 .et_pb_column_1_4 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_5,.et_pb_gutters1.et_pb_row .et_pb_column_1_5{width:20%}.et_pb_gutters1 .et_pb_column_1_5 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_6,.et_pb_gutters1.et_pb_row .et_pb_column_1_6{width:16.6667%}.et_pb_gutters1 .et_pb_column_1_6 .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_full_width_page.woocommerce-page ul.products li.product{width:25%;margin-right:0;margin-bottom:0}.et_pb_gutters1.et_left_sidebar.woocommerce-page #main-content ul.products li.product,.et_pb_gutters1.et_right_sidebar.woocommerce-page #main-content ul.products li.product{width:33.333%;margin-right:0}}@media (max-width:980px){.et_pb_gutters1 .et_pb_column,.et_pb_gutters1 .et_pb_column .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_module{margin-bottom:0}.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5{width:50%;margin-right:0}.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6{width:33.333%;margin-right:0}.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6{width:50%;margin-right:0}}@media (max-width:767px){.et_pb_gutters1 .et_pb_column,.et_pb_gutters1 .et_pb_column .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_module{margin-bottom:0}}@media (max-width:479px){.et_pb_gutters1 .et_pb_column,.et_pb_gutters1.et_pb_row .et_pb_column{margin:0!important}.et_pb_gutters1 .et_pb_column .et_pb_module,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_module{margin-bottom:0}}@media (min-width:981px){.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child{margin-bottom:30px}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_4_4 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_widget{width:25%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3{width:33.333%;margin-right:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_3_4 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_widget{width:33.333%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2{width:50%;margin-right:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_widget{width:50%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2{width:50%;margin-right:0}.et_pb_gutters1 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_3_5 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_widget{width:50%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_2 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_widget{width:50%;margin-right:0;margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_3 .et_pb_widget,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column_2_5 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column_2_5 .et_pb_widget{width:100%;margin-bottom:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_widget:nth-child(4n),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n){margin-right:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1){clear:both}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_4_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_widget:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n){margin-right:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1){clear:both}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_widget:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_widget:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1 .et_pb_column_3_5 .et_pb_widget:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1 .et_pb_column_3_5 .et_pb_widget:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_3_5 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters1 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters1.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters1 .et_pb_portfolio_grid .et_pb_grid_item .et_pb_module_header:last-child,.et_pb_gutters1 .et_pb_portfolio_grid .et_pb_grid_item h2:last-child{line-height:normal}}@media (max-width:980px){.et_pb_gutters1 .et_pb_column .et_pb_grid_item,.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product{margin:0;width:33.333%}.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_column .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_widget{width:50%}.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:0}.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6 .et_pb_widget,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_4col>.et_pb_column.et_pb_column_1_4 .et_pb_widget,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_5col>.et_pb_column.et_pb_column_1_5 .et_pb_widget,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row_6col>.et_pb_column.et_pb_column_1_6 .et_pb_widget{margin:0;width:100%}.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1 .et_pb_column .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_widget{margin:0}}@media (max-width:767px){.et_pb_gutters1 .et_pb_column .et_pb_grid_item,.et_pb_gutters1 .et_pb_column .et_pb_grid_item.et_pb_portfolio_item,.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.et_pb_portfolio_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product{margin:0;width:50%}.et_pb_gutters1 .et_pb_column .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters1 .et_pb_column .et_pb_grid_item:nth-child(3n),.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item:nth-child(3n),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n){margin-right:0}.et_pb_gutters1 .et_pb_column .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters1 .et_pb_column .et_pb_grid_item:nth-child(3n+1),.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item:nth-child(3n+1),.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1){clear:none}.et_pb_gutters1 .et_pb_column .et_pb_grid_item.et_pb_portfolio_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.et_pb_portfolio_item{margin:0;width:100%}.et_pb_gutters1 .et_pb_column .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item{margin:0;width:50%}.et_pb_gutters1 .et_pb_column .et_pb_grid_item.last_in_row,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_widget{margin:0;width:100%}}@media (max-width:479px){.et_pb_gutters1 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1 .et_pb_column .et_pb_grid_item,.et_pb_gutters1 .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1 .et_pb_column .et_pb_widget,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_grid_item,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters1.et_pb_row .et_pb_column .et_pb_widget{width:100%;margin:0}}@media (min-width:981px){.et_pb_gutter.et_pb_gutters2 #left-area{width:77.25%}.et_pb_gutter.et_pb_gutters2 #sidebar{width:22.75%}.et_pb_gutters2.et_right_sidebar #left-area{padding-right:3%}.et_pb_gutters2.et_left_sidebar #left-area{padding-left:3%}.et_pb_gutter.et_pb_gutters2.et_right_sidebar #main-content .container:before{right:22.75%!important}.et_pb_gutter.et_pb_gutters2.et_left_sidebar #main-content .container:before{left:22.75%!important}.et_pb_gutters2 .et_pb_column,.et_pb_gutters2.et_pb_row .et_pb_column{margin-right:3%}.et_pb_gutters2 .et_pb_column_4_4,.et_pb_gutters2.et_pb_row .et_pb_column_4_4{width:100%}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_module{margin-bottom:1.5%}.et_pb_gutters2 .et_pb_column_3_4,.et_pb_gutters2.et_pb_row .et_pb_column_3_4{width:74.25%}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_module{margin-bottom:2.02%}.et_pb_gutters2 .et_pb_column_2_3,.et_pb_gutters2.et_pb_row .et_pb_column_2_3{width:65.667%}.et_pb_gutters2 .et_pb_column_2_3 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_module{margin-bottom:2.284%}.et_pb_gutters2 .et_pb_column_3_5,.et_pb_gutters2.et_pb_row .et_pb_column_3_5{width:58.8%}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_module{margin-bottom:2.551%}.et_pb_gutters2 .et_pb_column_1_2,.et_pb_gutters2.et_pb_row .et_pb_column_1_2{width:48.5%}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_module{margin-bottom:3.093%}.et_pb_gutters2 .et_pb_column_2_5,.et_pb_gutters2.et_pb_row .et_pb_column_2_5{width:38.2%}.et_pb_gutters2 .et_pb_column_2_5 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_module{margin-bottom:3.927%}.et_pb_gutters2 .et_pb_column_1_3,.et_pb_gutters2.et_pb_row .et_pb_column_1_3{width:31.3333%}.et_pb_gutters2 .et_pb_column_1_3 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_module{margin-bottom:4.787%}.et_pb_gutters2 .et_pb_column_1_4,.et_pb_gutters2.et_pb_row .et_pb_column_1_4{width:22.75%}.et_pb_gutters2 .et_pb_column_1_4 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_module{margin-bottom:6.593%}.et_pb_gutters2 .et_pb_column_1_5,.et_pb_gutters2.et_pb_row .et_pb_column_1_5{width:17.6%}.et_pb_gutters2 .et_pb_column_1_5 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_module{margin-bottom:8.523%}.et_pb_gutters2 .et_pb_column_1_6,.et_pb_gutters2.et_pb_row .et_pb_column_1_6{width:14.1667%}.et_pb_gutters2 .et_pb_column_1_6 .et_pb_module,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_module{margin-bottom:10.588%}.et_pb_gutters2 .et_full_width_page.woocommerce-page ul.products li.product{width:22.75%;margin-right:3%;margin-bottom:3%}.et_pb_gutters2.et_left_sidebar.woocommerce-page #main-content ul.products li.product,.et_pb_gutters2.et_right_sidebar.woocommerce-page #main-content ul.products li.product{width:30.64%;margin-right:4.04%}}@media (min-width:981px){.et_pb_gutters2 .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters2 .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters2 .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child,.et_pb_gutters2.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of1 .et_pb_post:last-child,.et_pb_gutters2.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of2 .et_pb_post:last-child,.et_pb_gutters2.et_pb_row .et_pb_column .et_pb_blog_grid .column.size-1of3 .et_pb_post:last-child{margin-bottom:30px}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_4_4 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_widget{width:22.75%;margin-right:3%;margin-bottom:3%}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3{width:31.333%;margin-right:3%}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3 .et_pb_post{margin-bottom:9.574%}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_3_4 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_widget{width:30.64%;margin-right:4.04%;margin-bottom:4.04%}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2{width:47.98%;margin-right:4.04%}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:8.081%}.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_widget{width:47.716%;margin-right:4.569%;margin-bottom:4.569%}.et_pb_gutters2 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2{width:47.716%;margin-right:4.569%}.et_pb_gutters2 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2 .et_pb_post{margin-bottom:9.137%}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_3_5 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_widget{width:47.449%;margin-right:5.102%;margin-bottom:5.102%}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:5.102%}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_2 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_widget{width:46.907%;margin-right:6.186%;margin-bottom:6.186%}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1{width:100%;margin-right:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of1 .et_pb_post{margin-bottom:6.186%}.et_pb_gutters2 .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_2_5 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_2_5 .et_pb_widget{width:100%;margin-bottom:7.853%}.et_pb_gutters2 .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_3 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_widget{width:100%;margin-bottom:9.574%}.et_pb_gutters2 .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_4 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_widget{width:100%;margin-bottom:13.187%}.et_pb_gutters2 .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_5 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_widget{width:100%;margin-bottom:17.045%}.et_pb_gutters2 .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2 .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters2 .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2 .et_pb_column_1_6 .et_pb_widget,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_blog_grid .column.size-1of1 .et_pb_post,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_grid_item,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_shop_grid .woocommerce ul.products li.product,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_widget{width:100%;margin-bottom:21.176%}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_widget:nth-child(4n),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n){margin-right:0}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(4n+1),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(4n+1),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_widget:nth-child(4n+1){clear:both}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_4_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_4_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_widget:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n){margin-right:0}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.et_pb_portfolio_item:nth-child(3n+1),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(3n+1),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_widget:nth-child(3n+1){clear:both}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_widget:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_widget:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_widget:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2 .et_pb_column_3_5 .et_pb_widget:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(2n){margin-right:0}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2 .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2 .et_pb_column_3_5 .et_pb_widget:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.et_pb_portfolio_item:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_shop_grid .woocommerce ul.products li.product:nth-child(odd),.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_widget:nth-child(odd){clear:both}.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_3_5 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_5 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_6 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_5 .et_pb_grid_item.on_last_row{margin-bottom:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters2 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.last_in_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of2:nth-child(2n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_blog_grid .column.size-1of3:nth-child(3n),.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.last_in_row{margin-right:0}.et_pb_gutters2 .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2 .et_pb_column_3_4 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_1_2 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_2_3 .et_pb_grid_item.on_last_row,.et_pb_gutters2.et_pb_row .et_pb_column_3_4 .et_pb_grid_item.on_last_row{margin-bottom:0}}.et_pb_widget{float:left;max-width:100%;word-wrap:break-word}.et_pb_widget a{text-decoration:none;color:#666}.et_pb_widget li a:hover{color:#82c0c7}.et_pb_widget ol li,.et_pb_widget ul li{margin-bottom:.5em}.et_pb_widget ol li ol li,.et_pb_widget ul li ul li{margin-left:15px}.et_pb_widget select{width:100%;height:28px;padding:0 5px}.et_pb_widget_area .et_pb_widget a{color:inherit}.et_pb_bg_layout_light .et_pb_widget li a{color:#666}.et_pb_bg_layout_dark .et_pb_widget li a{color:inherit}.et_pb_scroll_top.et-pb-icon{text-align:center;background:rgba(0,0,0,0.4);text-decoration:none;position:fixed;z-index:99999;bottom:125px;right:0px;-webkit-border-top-left-radius:5px;-webkit-border-bottom-left-radius:5px;-moz-border-radius-topleft:5px;-moz-border-radius-bottomleft:5px;border-top-left-radius:5px;border-bottom-left-radius:5px;display:none;cursor:pointer;font-size:30px;padding:5px;color:#fff}.et_pb_scroll_top:before{content:'2'}.et_pb_scroll_top.et-visible{opacity:1;-webkit-animation:fadeInRight 1s 1 cubic-bezier(0.77, 0, 0.175, 1);animation:fadeInRight 1s 1 cubic-bezier(0.77, 0, 0.175, 1)}.et_pb_scroll_top.et-hidden{opacity:0;-webkit-animation:fadeOutRight 1s 1 cubic-bezier(0.77, 0, 0.175, 1);animation:fadeOutRight 1s 1 cubic-bezier(0.77, 0, 0.175, 1)}@-webkit-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(100%);transform:translateX(100%)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;font-display:block;src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.eot);src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.woff2) format("woff2"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.woff) format("woff"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.ttf) format("truetype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-regular-400.svg#fontawesome) format("svg")}@font-face{font-family:FontAwesome;font-style:normal;font-weight:900;font-display:block;src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.eot);src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.woff2) format("woff2"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.woff) format("woff"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.ttf) format("truetype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-solid-900.svg#fontawesome) format("svg")}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;font-display:block;src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.eot);src:url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.woff2) format("woff2"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.woff) format("woff"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.ttf) format("truetype"),url(//zarc.web.za/wp-content/themes/Divi/core/admin/fonts/fontawesome/fa-brands-400.svg#fontawesome) format("svg")}.et_pb_section{position:relative;background-color:#fff;background-position:50%;background-size:100%;background-size:cover}.et_pb_section--absolute,.et_pb_section--fixed{width:100%}.et_pb_section.et_section_transparent{background-color:transparent}.et_pb_fullwidth_section{padding:0}.et_pb_fullwidth_section>.et_pb_module:not(.et_pb_post_content):not(.et_pb_fullwidth_post_content) .et_pb_row{padding:0!important}.et_pb_inner_shadow{-webkit-box-shadow:inset 0 0 7px rgba(0,0,0,.07);box-shadow:inset 0 0 7px rgba(0,0,0,.07)}.et_pb_bottom_inside_divider,.et_pb_top_inside_divider{display:block;background-repeat-y:no-repeat;height:100%;position:absolute;pointer-events:none;width:100%;left:0;right:0}.et_pb_bottom_inside_divider.et-no-transition,.et_pb_top_inside_divider.et-no-transition{-webkit-transition:none!important;transition:none!important}.et-fb .section_has_divider.et_fb_element_controls_visible--child>.et_pb_bottom_inside_divider,.et-fb .section_has_divider.et_fb_element_controls_visible--child>.et_pb_top_inside_divider{z-index:1}.et_pb_section_video:not(.et_pb_section--with-menu){overflow:hidden;position:relative}.et_pb_column>.et_pb_section_video_bg{z-index:-1}.et_pb_section_video_bg{visibility:visible;position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;display:block;pointer-events:none;-webkit-transition:display .3s;transition:display .3s}.et_pb_section_video_bg.et_pb_section_video_bg_hover,.et_pb_section_video_bg.et_pb_section_video_bg_phone,.et_pb_section_video_bg.et_pb_section_video_bg_tablet,.et_pb_section_video_bg.et_pb_section_video_bg_tablet_only{display:none}.et_pb_section_video_bg .mejs-controls,.et_pb_section_video_bg .mejs-overlay-play{display:none!important}.et_pb_section_video_bg embed,.et_pb_section_video_bg iframe,.et_pb_section_video_bg object,.et_pb_section_video_bg video{max-width:none}.et_pb_section_video_bg .mejs-video{left:50%;position:absolute;max-width:none}.et_pb_section_video_bg .mejs-overlay-loading{display:none!important}.et_pb_social_network_link .et_pb_section_video{overflow:visible}.et_pb_section_video_on_hover:hover>.et_pb_section_video_bg{display:none}.et_pb_section_video_on_hover:hover>.et_pb_section_video_bg_hover,.et_pb_section_video_on_hover:hover>.et_pb_section_video_bg_hover_inherit{display:block}@media (min-width:981px){.et_pb_section{padding:4% 0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_pb_section,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_pb_section{padding-top:0}.et_pb_fullwidth_section{padding:0}.et_pb_section_video_bg.et_pb_section_video_bg_desktop_only{display:block}}@media (max-width:980px){.et_pb_section{padding:50px 0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_pb_section,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_pb_section{padding-top:0}.et_pb_fullwidth_section{padding:0}.et_pb_section_video_bg.et_pb_section_video_bg_tablet{display:block}.et_pb_section_video_bg.et_pb_section_video_bg_desktop_only{display:none}}@media (min-width:768px){.et_pb_section_video_bg.et_pb_section_video_bg_desktop_tablet{display:block}}@media (min-width:768px) and (max-width:980px){.et_pb_section_video_bg.et_pb_section_video_bg_tablet_only{display:block}}@media (max-width:767px){.et_pb_section_video_bg.et_pb_section_video_bg_phone{display:block}.et_pb_section_video_bg.et_pb_section_video_bg_desktop_tablet{display:none}}.et_pb_row{width:80%;max-width:1080px;margin:auto;position:relative}body.safari .section_has_divider,body.uiwebview .section_has_divider{-webkit-perspective:2000px;perspective:2000px}.section_has_divider .et_pb_row{z-index:5}.et_pb_row_inner{width:100%;position:relative}.et_pb_row.et_pb_row_empty,.et_pb_row_inner:nth-of-type(n+2).et_pb_row_empty{display:none}.et_pb_row:after,.et_pb_row_inner:after{content:"";display:block;clear:both;visibility:hidden;line-height:0;height:0;width:0}.et_pb_row_4col .et-last-child,.et_pb_row_4col .et-last-child-2,.et_pb_row_6col .et-last-child,.et_pb_row_6col .et-last-child-2,.et_pb_row_6col .et-last-child-3{margin-bottom:0}.et_pb_column{float:left;background-size:cover;background-position:50%;position:relative;z-index:2;min-height:1px}.et_pb_column--with-menu{z-index:3}.et_pb_column.et_pb_column_empty{min-height:1px}.et_pb_row .et_pb_column.et-last-child,.et_pb_row .et_pb_column:last-child,.et_pb_row_inner .et_pb_column.et-last-child,.et_pb_row_inner .et_pb_column:last-child{margin-right:0!important}.et_pb_column.et_pb_section_parallax{position:relative}.et_pb_column,.et_pb_row,.et_pb_row_inner{background-size:cover;background-position:50%;background-repeat:no-repeat}@media (min-width:981px){.et_pb_row{padding:2% 0}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_pb_row,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_pb_row{padding:0;width:100%}.et_pb_column_3_4 .et_pb_row_inner{padding:3.735% 0}.et_pb_column_2_3 .et_pb_row_inner{padding:4.2415% 0}.et_pb_column_1_2 .et_pb_row_inner,.et_pb_column_3_5 .et_pb_row_inner{padding:5.82% 0}.et_section_specialty>.et_pb_row{padding:0}.et_pb_row_inner{width:100%}.et_pb_column_single{padding:2.855% 0}.et_pb_column_single .et_pb_module.et-first-child,.et_pb_column_single .et_pb_module:first-child{margin-top:0}.et_pb_column_single .et_pb_module.et-last-child,.et_pb_column_single .et_pb_module:last-child{margin-bottom:0}.et_pb_row .et_pb_column.et-last-child,.et_pb_row .et_pb_column:last-child,.et_pb_row_inner .et_pb_column.et-last-child,.et_pb_row_inner .et_pb_column:last-child{margin-right:0!important}.et_pb_row.et_pb_equal_columns,.et_pb_row_inner.et_pb_equal_columns,.et_pb_section.et_pb_equal_columns>.et_pb_row{display:-webkit-box;display:-ms-flexbox;display:flex}.rtl .et_pb_row.et_pb_equal_columns,.rtl .et_pb_row_inner.et_pb_equal_columns,.rtl .et_pb_section.et_pb_equal_columns>.et_pb_row{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.et_pb_row.et_pb_equal_columns>.et_pb_column,.et_pb_section.et_pb_equal_columns>.et_pb_row>.et_pb_column{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}}@media (max-width:980px){.et_pb_row{max-width:1080px}body.et_pb_pagebuilder_layout.et_pb_show_title .post-password-required .et_pb_row,body:not(.et_pb_pagebuilder_layout) .post-password-required .et_pb_row{padding:0;width:100%}.et_pb_column .et_pb_row_inner,.et_pb_row{padding:30px 0}.et_section_specialty>.et_pb_row{padding:0}.et_pb_column{width:100%;margin-bottom:30px}.et_pb_bottom_divider .et_pb_row:nth-last-child(2) .et_pb_column:last-child,.et_pb_row .et_pb_column.et-last-child,.et_pb_row .et_pb_column:last-child{margin-bottom:0}.et_section_specialty .et_pb_row>.et_pb_column{padding-bottom:0}.et_pb_column.et_pb_column_empty{display:none}.et_pb_row_1-2_1-4_1-4,.et_pb_row_1-2_1-6_1-6_1-6,.et_pb_row_1-4_1-4,.et_pb_row_1-4_1-4_1-2,.et_pb_row_1-5_1-5_3-5,.et_pb_row_1-6_1-6_1-6,.et_pb_row_1-6_1-6_1-6_1-2,.et_pb_row_1-6_1-6_1-6_1-6,.et_pb_row_3-5_1-5_1-5,.et_pb_row_4col,.et_pb_row_5col,.et_pb_row_6col{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4,.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4,.et_pb_row_4col>.et_pb_column.et_pb_column_1_4{width:47.25%;margin-right:5.5%}.et_pb_row_1-4_1-4>.et_pb_column.et_pb_column_1_4:nth-child(2n),.et_pb_row_1-4_1-4_1-2>.et_pb_column.et_pb_column_1_4:nth-child(2n),.et_pb_row_4col>.et_pb_column.et_pb_column_1_4:nth-child(2n){margin-right:0}.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4{width:47.25%;margin-right:5.5%}.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_2,.et_pb_row_1-2_1-4_1-4>.et_pb_column.et_pb_column_1_4:nth-child(odd){margin-right:0}.et_pb_row_1-2_1-4_1-4 .et_pb_column:nth-last-child(-n+2),.et_pb_row_1-4_1-4 .et_pb_column:nth-last-child(-n+2),.et_pb_row_4col .et_pb_column:nth-last-child(-n+2){margin-bottom:0}.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5,.et_pb_row_5col>.et_pb_column.et_pb_column_1_5{width:47.25%;margin-right:5.5%}.et_pb_row_1-5_1-5_3-5>.et_pb_column.et_pb_column_1_5:nth-child(2n),.et_pb_row_5col>.et_pb_column.et_pb_column_1_5:nth-child(2n){margin-right:0}.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5{width:47.25%;margin-right:5.5%}.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_1_5:nth-child(odd),.et_pb_row_3-5_1-5_1-5>.et_pb_column.et_pb_column_3_5{margin-right:0}.et_pb_row_3-5_1-5_1-5 .et_pb_column:nth-last-child(-n+2),.et_pb_row_5col .et_pb_column:last-child{margin-bottom:0}.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6,.et_pb_row_6col>.et_pb_column.et_pb_column_1_6{width:29.666%;margin-right:5.5%}.et_pb_row_1-6_1-6_1-6_1-2>.et_pb_column.et_pb_column_1_6:nth-child(3n),.et_pb_row_6col>.et_pb_column.et_pb_column_1_6:nth-child(3n){margin-right:0}.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6{width:29.666%;margin-right:5.5%}.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_2,.et_pb_row_1-2_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6:last-child{margin-right:0}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2,.et_pb_row_1-2_1-6_1-6_1-6 .et_pb_column:nth-last-child(-n+3),.et_pb_row_6col .et_pb_column:nth-last-child(-n+3){margin-bottom:0}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6{width:29.666%;margin-right:5.5%;margin-bottom:0}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6:last-child{margin-right:0}.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6{width:47.25%;margin-right:5.5%}.et_pb_row_1-6_1-6_1-6_1-6>.et_pb_column.et_pb_column_1_6:nth-child(2n){margin-right:0}.et_pb_row_1-6_1-6_1-6_1-6:nth-last-child(-n+3){margin-bottom:0}}@media (max-width:479px){.et_pb_row .et_pb_column.et_pb_column_1_4,.et_pb_row .et_pb_column.et_pb_column_1_5,.et_pb_row .et_pb_column.et_pb_column_1_6{width:100%;margin:0 0 30px}.et_pb_row .et_pb_column.et_pb_column_1_4.et-last-child,.et_pb_row .et_pb_column.et_pb_column_1_4:last-child,.et_pb_row .et_pb_column.et_pb_column_1_5.et-last-child,.et_pb_row .et_pb_column.et_pb_column_1_5:last-child,.et_pb_row .et_pb_column.et_pb_column_1_6.et-last-child,.et_pb_row .et_pb_column.et_pb_column_1_6:last-child{margin-bottom:0}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6{width:100%;margin:0 0 30px}.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6.et-last-child,.et_pb_row_1-2_1-2 .et_pb_column.et_pb_column_1_2 .et_pb_column.et_pb_column_1_6:last-child{margin-bottom:0}.et_pb_column{width:100%!important}}ul.et_pb_social_media_follow{list-style-type:none!important;margin:0 0 22px;padding:0}.et_pb_social_media_follow li{display:inline-block;margin-bottom:8px;position:relative}.et_pb_social_media_follow li a{margin-right:8px;display:inline-block;text-decoration:none;text-align:center;position:relative}.et_pb_social_media_follow li a.follow_button{padding:0 12px;margin-top:5px;margin-right:25px;font-size:14px;line-height:1.6em;background:rgba(0,0,0,.1);color:rgba(0,0,0,.5);border-radius:3px;border-width:0;border-style:solid;-webkit-transition:all .3s;transition:all .3s}.et_pb_social_media_follow li.last-child a,.et_pb_social_media_follow li:last-child a{margin-right:0}.et_pb_social_media_follow.has_follow_button li.last-child a.icon,.et_pb_social_media_follow.has_follow_button li:last-child a.icon{margin-right:8px}.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.2);color:rgba(0,0,0,.6)}.et_pb_social_media_follow.et_pb_bg_layout_dark li a.follow_button{background:rgba(0,0,0,.6);color:hsla(0,0%,100%,.8)}.et_pb_social_media_follow.et_pb_bg_layout_dark li a.follow_button:hover{background:rgba(0,0,0,.7);color:#fff}.et_pb_social_media_follow li a.icon{height:32px;width:32px;padding:0;-webkit-box-sizing:content-box;box-sizing:content-box}.et_pb_social_media_follow li a.icon:before{height:32px;width:32px;font-size:16px;line-height:32px;display:block;color:#fff;-webkit-transition:color .3s;transition:color .3s;position:relative;z-index:10}.et_pb_social_media_follow li a.icon:hover:before{color:hsla(0,0%,100%,.7)}.et_pb_social_media_follow li a.icon{border-radius:3px}.et_pb_social_media_follow_network_name{display:none}.et_pb_social_icon a.icon{vertical-align:middle}.et_pb_social_icon a.icon:before{font-family:ETmodules;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-shadow:0 0;direction:ltr}.et-pb-social-fa-icon a.icon:before{font-family:FontAwesome}.et-social-telegram a.icon:before{content:"\F3FE"}.et-social-amazon a.icon:before{content:"\F270"}.et-social-bandcamp a.icon:before{content:"\F2D5"}.et-social-bitbucket a.icon:before{content:"\F171"}.et-social-behance a.icon:before{content:"\F1B4"}.et-social-buffer a.icon:before{content:"\F837"}.et-social-codepen a.icon:before{content:"\F1CB"}.et-social-deviantart a.icon:before{content:"\F1BD"}.et-social-flipboard a.icon:before{content:"\F44D"}.et-social-foursquare a.icon:before{content:"\F180"}.et-social-github a.icon:before{content:"\F09B"}.et-social-goodreads a.icon:before{content:"\F3A9"}.et-social-google a.icon:before{content:"\F1A0"}.et-social-houzz a.icon:before{content:"\F27C"}.et-social-itunes a.icon:before{content:"\F3B5"}.et-social-last_fm a.icon:before{content:"\F202"}.et-social-line a.icon:before{content:"\F3C0"}.et-social-medium a.icon:before,.et-social-meetup a.icon:before{content:"\F3C7"}.et-social-odnoklassniki a.icon:before{content:"\F263"}.et-social-patreon a.icon:before{content:"\F3D9"}.et-social-periscope a.icon:before{content:"\F3DA"}.et-social-quora a.icon:before{content:"\F2C4"}.et-social-researchgate a.icon:before{content:"\F4F8"}.et-social-reddit a.icon:before{content:"\F281"}.et-social-snapchat a.icon:before{content:"\F2AC"}.et-social-soundcloud a.icon:before{content:"\F1BE"}.et-social-spotify a.icon:before{content:"\F1BC"}.et-social-steam a.icon:before{content:"\F3F6"}.et-social-tripadvisor a.icon:before{content:"\F262"}.et-social-tiktok a.icon:before{content:"\E07B"}.et-social-twitch a.icon:before{content:"\F1E8"}.et-social-vk a.icon:before{content:"\F189"}.et-social-weibo a.icon:before{content:"\F18A"}.et-social-whatsapp a.icon:before{content:"\F232"}.et-social-xing a.icon:before{content:"\F168"}.et-social-yelp a.icon:before{content:"\F1E9"}.et-social-pinterest a.icon:before{content:"\E095"}.et-social-linkedin a.icon:before{content:"\E09D"}.et-social-tumblr a.icon:before{content:"\E097"}.et-social-skype a.icon:before{content:"\E0A2"}.et-social-flikr a.icon:before{content:"\E0A6"}.et-social-myspace a.icon:before{content:"\E0A1"}.et-social-dribbble a.icon:before{content:"\E09B"}.et-social-youtube a.icon:before{content:"\E0A3"}.et-social-vimeo a.icon:before{content:"\E09C"}@media (max-width:980px){.et_pb_bg_layout_light_tablet.et_pb_social_media_follow li a.follow_button{background:rgba(0,0,0,.1);color:rgba(0,0,0,.5)}.et_pb_bg_layout_light_tablet.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.2);color:rgba(0,0,0,.6)}.et_pb_bg_layout_dark_tablet.et_pb_social_media_follow li a.follow_button{background:rgba(0,0,0,.6);color:hsla(0,0%,100%,.8)}.et_pb_bg_layout_dark_tablet.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.7);color:#fff}}@media (max-width:767px){.et_pb_bg_layout_light_phone.et_pb_social_media_follow li a.follow_button{background:rgba(0,0,0,.1);color:rgba(0,0,0,.5)}.et_pb_bg_layout_light_phone.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.2);color:rgba(0,0,0,.6)}.et_pb_bg_layout_dark_phone.et_pb_social_media_follow li a.follow_button{background:rgba(0,0,0,.6);color:hsla(0,0%,100%,.8)}.et_pb_bg_layout_dark_phone.et_pb_social_media_follow li a.follow_button:hover{background:rgba(0,0,0,.7);color:#fff}}.rtl .et_pb_social_media_follow li a{margin-left:8px;margin-right:0}.et_pb_code_inner{position:relative}.et_pb_search .screen-reader-text{display:none}.et_pb_search{border:1px solid #ddd;border-radius:3px;overflow:hidden}.et_pb_search input.et_pb_s,.et_pb_search input.et_pb_searchsubmit{padding:.715em;margin:0;font-size:14px;line-height:normal!important;border:none;color:#666}.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#666}.et_pb_search input.et_pb_s::-moz-placeholder{color:#666}.et_pb_search input.et_pb_s:-ms-input-placeholder{color:#666}.et_pb_search input.et_pb_s{-webkit-appearance:none;background:transparent;display:inline-block;padding-right:80px;-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.et_pb_search .et_pb_searchform{position:relative}.et_pb_search .et_pb_searchform>div{display:-webkit-box;display:-ms-flexbox;display:flex}.et_pb_search input.et_pb_searchsubmit{min-height:100%!important;background-color:#ddd;cursor:pointer}.et_pb_search.et_pb_text_align_right .et_pb_searchform>div{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.et_pb_search.et_pb_text_align_right input.et_pb_s{text-align:right;padding-left:80px;padding-right:.7em}.et_pb_search.et_pb_text_align_center input.et_pb_s{text-align:center}.et_pb_search.et_pb_hide_search_button input.et_pb_searchsubmit{display:none}.et_pb_search.et_pb_hide_search_button input.et_pb_s{padding-left:.7em;padding-right:.7em}.et_pb_search.et_pb_bg_layout_dark input.et_pb_s{color:#fff;border:2px solid #fff}.et_pb_search.et_pb_bg_layout_dark input.et_pb_s::-webkit-input-placeholder{color:#fff}.et_pb_search.et_pb_bg_layout_dark input.et_pb_s::-moz-placeholder{color:#fff}.et_pb_search.et_pb_bg_layout_dark input.et_pb_s:-ms-input-placeholder{color:#fff}.et_pb_search.et_pb_bg_layout_dark input.et_pb_searchsubmit{background-color:transparent;color:#fff;font-weight:500;border:2px solid #fff}@media (max-width:980px){.et_pb_bg_layout_light_tablet.et_pb_search input.et_pb_s{border:none;color:#666}.et_pb_bg_layout_light_tablet.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#666}.et_pb_bg_layout_light_tablet.et_pb_search input.et_pb_searchsubmit{border:none;color:#666;background-color:#ddd}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_s{color:#fff;border:2px solid #fff}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#fff}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_s::-moz-placeholder{color:#fff}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_s:-ms-input-placeholder{color:#fff}.et_pb_bg_layout_dark_tablet.et_pb_search input.et_pb_searchsubmit{background-color:transparent;color:#fff;font-weight:500;border:2px solid #fff}.et_pb_search.et_pb_text_align_right-tablet .et_pb_searchform>div{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.et_pb_search.et_pb_text_align_right-tablet input.et_pb_s{text-align:right;padding-left:80px;padding-right:.7em}.et_pb_search.et_pb_text_align_center-tablet input.et_pb_s{text-align:center}.et_pb_search.et_pb_text_align_left-tablet .et_pb_searchsubmit{left:auto}.et_pb_search.et_pb_text_align_left-tablet input.et_pb_s{text-align:left;padding-left:.715em}.et_pb_search.et_pb_text_align_center-tablet input.et_pb_s{padding-left:.715em;padding-right:.715em}}@media (max-width:767px){.et_pb_bg_layout_light_phone.et_pb_search input.et_pb_s{border:none;color:#666}.et_pb_bg_layout_light_phone.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#666}.et_pb_bg_layout_light_phone.et_pb_search input.et_pb_searchsubmit{border:none;color:#666;background-color:#ddd}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_s{color:#fff;border:2px solid #fff}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_s::-webkit-input-placeholder{color:#fff}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_s::-moz-placeholder{color:#fff}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_s:-ms-input-placeholder{color:#fff}.et_pb_bg_layout_dark_phone.et_pb_search input.et_pb_searchsubmit{background-color:transparent;color:#fff;font-weight:500;border:2px solid #fff}.et_pb_search.et_pb_text_align_right-phone .et_pb_searchform>div{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.et_pb_search.et_pb_text_align_right-phone input.et_pb_s{text-align:right;padding-left:80px;padding-right:.7em}.et_pb_search.et_pb_text_align_center-phone input.et_pb_s{text-align:center}.et_pb_search.et_pb_text_align_left-tablet .et_pb_searchsubmit{left:auto}.et_pb_search.et_pb_text_align_left-tablet input.et_pb_s{text-align:left;padding-left:.715em}.et_pb_search.et_pb_text_align_center-tablet input.et_pb_s{padding-left:.715em;padding-right:.715em}}.et-menu li{display:inline-block;font-size:14px;padding-right:22px}.et-menu>li:last-child{padding-right:0}.et-menu a{color:rgba(0,0,0,.6);text-decoration:none;display:block;position:relative}.et-menu a,.et-menu a:hover{-webkit-transition:all .4s ease-in-out;transition:all .4s ease-in-out}.et-menu a:hover{opacity:.7}.et-menu li>a{padding-bottom:29px;word-wrap:break-word}a.et_pb_menu__icon,button.et_pb_menu__icon{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0;margin:0 11px;font-size:17px;line-height:normal;background:none;border:0;cursor:pointer;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}a.et_pb_menu__icon:after,button.et_pb_menu__icon:after{font-family:ETmodules}a.et_pb_menu__icon__with_count:after,button.et_pb_menu__icon__with_count:after{margin-right:10px}.et_pb_menu__wrap .mobile_menu_bar{-webkit-transform:translateY(3%);transform:translateY(3%)}.et_pb_menu__wrap .mobile_menu_bar:before{top:0}.et_pb_menu__logo{overflow:hidden}.et_pb_menu__logo img{display:block}.et_pb_menu__logo img[src$=".svg"]{width:100%}.et_pb_menu__search-button:after{content:"U"}.et_pb_menu__cart-button:after{content:"\E07A"}@media (max-width:980px){.et-menu{display:none}.et_mobile_nav_menu{display:block;margin-top:-1px}}.et_pb_with_border.et_pb_menu .et_pb_menu__logo img{border:0 solid #333}.et_pb_menu.et_hover_enabled:hover{z-index:auto}.et_pb_menu .et-menu-nav,.et_pb_menu .et-menu-nav>ul{float:none}.et_pb_menu .et-menu-nav>ul{padding:0!important;line-height:1.7em}.et_pb_menu .et-menu-nav>ul ul{padding:20px 0;text-align:left}.et_pb_bg_layout_dark.et_pb_menu ul li a{color:#fff}.et_pb_bg_layout_dark.et_pb_menu ul li a:hover{color:hsla(0,0%,100%,.8)}.et-menu li li.menu-item-has-children>a:first-child:after{top:12px}.et_pb_menu .et-menu-nav>ul.upwards li ul{bottom:100%;top:auto;border-top:none;border-bottom:3px solid #2ea3f2;-webkit-box-shadow:2px -2px 5px rgba(0,0,0,.1);box-shadow:2px -2px 5px rgba(0,0,0,.1)}.et_pb_menu .et-menu-nav>ul.upwards li ul li ul{bottom:-23px}.et_pb_menu .et-menu-nav>ul.upwards li.mega-menu ul ul{bottom:0;top:auto;border:none}.et_pb_menu_inner_container{position:relative}.et_pb_menu .et_pb_menu__wrap{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap;opacity:1}.et_pb_menu .et_pb_menu__wrap--visible{-webkit-animation:fadeInBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeInBottom 1s cubic-bezier(.77,0,.175,1) 1}.et_pb_menu .et_pb_menu__wrap--hidden{opacity:0;-webkit-animation:fadeOutBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeOutBottom 1s cubic-bezier(.77,0,.175,1) 1}.et_pb_menu .et_pb_menu__menu{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.et_pb_menu .et_pb_menu__menu,.et_pb_menu .et_pb_menu__menu>nav,.et_pb_menu .et_pb_menu__menu>nav>ul{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.et_pb_menu .et_pb_menu__menu>nav>ul{-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.et_pb_menu .et_pb_menu__menu>nav>ul>li{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;margin:0}.et_pb_menu .et_pb_menu__menu>nav>ul>li.mega-menu{position:static}.et_pb_menu .et_pb_menu__menu>nav>ul>li>ul{top:calc(100% - 1px);left:0}.et_pb_menu .et_pb_menu__menu>nav>ul.upwards>li>ul{top:auto;bottom:calc(100% - 1px)}.et_pb_menu--with-logo .et_pb_menu__menu>nav>ul>li>a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:31px 0;white-space:nowrap}.et_pb_menu--with-logo .et_pb_menu__menu>nav>ul>li>a:after{top:50%!important;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul{padding:0!important}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul>li{margin-top:8px}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul>li>a{padding-bottom:8px}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul.upwards>li{margin-top:0;margin-bottom:8px}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul.upwards>li>a{padding-top:8px;padding-bottom:0}.et_pb_menu--without-logo .et_pb_menu__menu>nav>ul.upwards>li>a:after{top:auto;bottom:0}.et_pb_menu .et_pb_menu__icon{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.et_pb_menu .et-menu{margin-left:-11px;margin-right:-11px}.et_pb_menu .et-menu>li{padding-left:11px;padding-right:11px}.et_pb_menu--style-left_aligned .et_pb_menu_inner_container,.et_pb_menu--style-left_aligned .et_pb_row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.et_pb_menu--style-left_aligned .et_pb_menu__logo-wrap{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-left_aligned .et_pb_menu__logo{margin-right:30px}.rtl .et_pb_menu--style-left_aligned .et_pb_menu__logo{margin-right:0;margin-left:30px}.et_pb_menu--style-left_aligned.et_pb_text_align_center .et_pb_menu__menu>nav>ul,.et_pb_menu--style-left_aligned.et_pb_text_align_center .et_pb_menu__wrap{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.et_pb_menu--style-left_aligned.et_pb_text_align_right .et_pb_menu__menu>nav>ul,.et_pb_menu--style-left_aligned.et_pb_text_align_right .et_pb_menu__wrap{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__menu,.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__menu>nav,.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__wrap{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__menu>nav>ul{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.et_pb_menu--style-centered .et_pb_menu__logo-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-centered .et_pb_menu__logo-wrap,.et_pb_menu--style-centered .et_pb_menu__logo img{margin:0 auto}.et_pb_menu--style-centered .et_pb_menu__menu>nav>ul,.et_pb_menu--style-centered .et_pb_menu__wrap{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.et_pb_menu--style-inline_centered_logo .et_pb_menu_inner_container>.et_pb_menu__logo-wrap,.et_pb_menu--style-inline_centered_logo .et_pb_row>.et_pb_menu__logo-wrap{display:none;margin-bottom:30px}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo,.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo img{margin:0 auto}.et_pb_menu--style-inline_centered_logo .et_pb_menu__wrap{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot .et_pb_menu__logo,.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot .et_pb_menu__logo-wrap{width:100%;height:100%}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot img{max-height:100%}.et_pb_menu .et_pb_menu__logo-slot .et-fb-content-placeholder{min-width:96px}.et_pb_menu .et_pb_menu__search-container{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:stretch;-ms-flex-pack:stretch;justify-content:stretch;-ms-flex-line-pack:stretch;align-content:stretch;left:0;bottom:0;width:100%;height:100%;opacity:0;z-index:999}.et_pb_menu .et_pb_menu__search-container--visible{opacity:1;-webkit-animation:fadeInTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeInTop 1s cubic-bezier(.77,0,.175,1) 1}.et_pb_menu .et_pb_menu__search-container--hidden{-webkit-animation:fadeOutTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeOutTop 1s cubic-bezier(.77,0,.175,1) 1}.et_pb_menu .et_pb_menu__search-container--disabled{display:none}.et_pb_menu .et_pb_menu__search{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:stretch;-ms-flex-pack:stretch;justify-content:stretch;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu .et_pb_menu__search-form{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.et_pb_menu .et_pb_menu__search-input{border:0;width:100%;color:#333;background:transparent}.et_pb_menu .et_pb_menu__close-search-button{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.et_pb_menu .et_pb_menu__close-search-button:after{content:"M";font-size:1.7em}@media (min-width:981px){.et_dropdown_animation_fade.et_pb_menu ul li:hover>ul{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.et_dropdown_animation_slide.et_pb_menu ul li:hover>ul{-webkit-animation:fadeLeft .4s ease-in-out;animation:fadeLeft .4s ease-in-out}.et_dropdown_animation_expand.et_pb_menu ul li:hover>ul{-webkit-transform-origin:0 0;-webkit-animation:Grow .4s ease-in-out;animation:Grow .4s ease-in-out;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.et_dropdown_animation_flip.et_pb_menu ul li ul li:hover>ul{-webkit-animation:flipInX .6s ease-in-out;animation:flipInX .6s ease-in-out;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.et_dropdown_animation_flip.et_pb_menu ul li:hover>ul{-webkit-animation:flipInY .6s ease-in-out;animation:flipInY .6s ease-in-out;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.et_pb_menu.et_pb_menu_fullwidth .et_pb_row{width:100%;max-width:100%;padding:0 30px!important}}@media (max-width:980px){.et_pb_menu--style-left_aligned .et_pb_menu_inner_container,.et_pb_menu--style-left_aligned .et_pb_row{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-left_aligned .et_pb_menu__wrap{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.et_pb_menu--style-left_aligned.et_pb_text_align_center .et_pb_menu__wrap{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.et_pb_menu--style-left_aligned.et_pb_text_align_right .et_pb_menu__wrap{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.et_pb_menu--style-left_aligned.et_pb_text_align_justified .et_pb_menu__wrap{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.et_pb_menu--style-inline_centered_logo .et_pb_menu_inner_container>.et_pb_menu__logo-wrap,.et_pb_menu--style-inline_centered_logo .et_pb_row>.et_pb_menu__logo-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu--style-inline_centered_logo .et_pb_menu_inner_container>.et_pb_menu__logo,.et_pb_menu--style-inline_centered_logo .et_pb_row>.et_pb_menu__logo{margin:0 auto}.et_pb_menu--style-inline_centered_logo .et_pb_menu__logo-slot{display:none}.et_pb_menu .et_pb_row{min-height:81px}.et_pb_menu .et_pb_menu__menu{display:none}.et_pb_menu .et_mobile_nav_menu{float:none;margin:0 6px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.et_pb_menu .et_mobile_menu{top:100%;padding:5%}.et_pb_menu .et_mobile_menu,.et_pb_menu .et_mobile_menu ul{list-style:none!important;text-align:left}.et_pb_menu .et_mobile_menu ul{padding:0}.et_pb_menu .et_pb_mobile_menu_upwards .et_mobile_menu{top:auto;bottom:100%}}@-webkit-keyframes fadeOutTop{0%{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}to{opacity:0;-webkit-transform:translatey(-60%);transform:translatey(-60%)}}@keyframes fadeOutTop{0%{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}to{opacity:0;-webkit-transform:translatey(-60%);transform:translatey(-60%)}}@-webkit-keyframes fadeInTop{0%{opacity:0;-webkit-transform:translatey(-60%);transform:translatey(-60%)}to{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}}@keyframes fadeInTop{0%{opacity:0;-webkit-transform:translatey(-60%);transform:translatey(-60%)}to{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}}@-webkit-keyframes fadeInBottom{0%{opacity:0;-webkit-transform:translatey(60%);transform:translatey(60%)}to{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}}@keyframes fadeInBottom{0%{opacity:0;-webkit-transform:translatey(60%);transform:translatey(60%)}to{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}}@-webkit-keyframes fadeOutBottom{0%{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}to{opacity:0;-webkit-transform:translatey(60%);transform:translatey(60%)}}@keyframes fadeOutBottom{0%{opacity:1;-webkit-transform:translatey(0);transform:translatey(0)}to{opacity:0;-webkit-transform:translatey(60%);transform:translatey(60%)}}@-webkit-keyframes Grow{0%{opacity:0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes Grow{0%{opacity:0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}/*!* Animate.css - http://daneden.me/animate* Licensed under the MIT license - http://opensource.org/licenses/MIT* Copyright (c) 2015 Daniel Eden*/@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}#main-header{line-height:23px;font-weight:500;top:0;background-color:#fff;width:100%;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1);position:relative;z-index:99999}.nav li li{padding:0 20px;margin:0}.et-menu li li a{padding:6px 20px;width:200px}.nav li{position:relative;line-height:1em}.nav li li{position:relative;line-height:2em}.nav li ul{position:absolute;padding:20px 0;z-index:9999;width:240px;background:#fff;visibility:hidden;opacity:0;border-top:3px solid #2ea3f2;box-shadow:0 2px 5px rgba(0,0,0,.1);-moz-box-shadow:0 2px 5px rgba(0,0,0,.1);-webkit-box-shadow:0 2px 5px rgba(0,0,0,.1);-webkit-transform:translateZ(0);text-align:left}.nav li.et-hover>ul{visibility:visible}.nav li.et-touch-hover>ul,.nav li:hover>ul{opacity:1;visibility:visible}.nav li li ul{z-index:1000;top:-23px;left:240px}.nav li.et-reverse-direction-nav li ul{left:auto;right:240px}.nav li:hover{visibility:inherit}.et_mobile_menu li a,.nav li li a{font-size:14px;-webkit-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;transition:opacity .2s ease-in-out,background-color .2s ease-in-out}.et_mobile_menu li a:hover,.nav ul li a:hover{background-color:rgba(0,0,0,.03);opacity:.7}.et-dropdown-removing>ul{display:none}.mega-menu .et-dropdown-removing>ul{display:block}.et-menu .menu-item-has-children>a:first-child:after{font-family:ETmodules;content:"3";font-size:16px;position:absolute;right:0;top:0;font-weight:800}.et-menu .menu-item-has-children>a:first-child{padding-right:20px}.et-menu li li.menu-item-has-children>a:first-child:after{right:20px;top:6px}.et-menu-nav li.mega-menu{position:inherit}.et-menu-nav li.mega-menu>ul{padding:30px 20px;position:absolute!important;width:100%;left:0!important}.et-menu-nav li.mega-menu ul li{margin:0;float:left!important;display:block!important;padding:0!important}.et-menu-nav li.mega-menu li>ul{-webkit-animation:none!important;animation:none!important;padding:0;border:none;left:auto;top:auto;width:240px!important;position:relative;box-shadow:none;-webkit-box-shadow:none}.et-menu-nav li.mega-menu li ul{visibility:visible;opacity:1;display:none}.et-menu-nav li.mega-menu.et-hover li ul,.et-menu-nav li.mega-menu:hover li ul{display:block}.et-menu-nav li.mega-menu:hover>ul{opacity:1!important;visibility:visible!important}.et-menu-nav li.mega-menu>ul>li>a:first-child{padding-top:0!important;font-weight:700;border-bottom:1px solid rgba(0,0,0,.03)}.et-menu-nav li.mega-menu>ul>li>a:first-child:hover{background-color:transparent!important}.et-menu-nav li.mega-menu li>a{width:200px!important}.et-menu-nav li.mega-menu.mega-menu-parent li>a,.et-menu-nav li.mega-menu.mega-menu-parent li li{width:100%!important}.et-menu-nav li.mega-menu.mega-menu-parent li>.sub-menu{float:left;width:100%!important}.et-menu-nav li.mega-menu>ul>li{width:25%;margin:0}.et-menu-nav li.mega-menu.mega-menu-parent-3>ul>li{width:33.33%}.et-menu-nav li.mega-menu.mega-menu-parent-2>ul>li{width:50%}.et-menu-nav li.mega-menu.mega-menu-parent-1>ul>li{width:100%}.et_pb_fullwidth_menu li.mega-menu .menu-item-has-children>a:first-child:after,.et_pb_menu li.mega-menu .menu-item-has-children>a:first-child:after{display:none}.et_fullwidth_nav #top-menu li.mega-menu>ul{width:auto;left:30px!important;right:30px!important}.et_mobile_menu{position:absolute;left:0;padding:5%;background:#fff;width:100%;visibility:visible;opacity:1;display:none;z-index:9999;border-top:3px solid #2ea3f2;box-shadow:0 2px 5px rgba(0,0,0,.1);-moz-box-shadow:0 2px 5px rgba(0,0,0,.1);-webkit-box-shadow:0 2px 5px rgba(0,0,0,.1)}#main-header .et_mobile_menu li ul,.et_pb_fullwidth_menu .et_mobile_menu li ul,.et_pb_menu .et_mobile_menu li ul{visibility:visible!important;display:block!important;padding-left:10px}.et_mobile_menu li li{padding-left:5%}.et_mobile_menu li a{border-bottom:1px solid rgba(0,0,0,.03);color:#666;padding:10px 5%;display:block}.et_mobile_menu .menu-item-has-children>a{font-weight:700;background-color:rgba(0,0,0,.03)}.et_mobile_menu li .menu-item-has-children>a{background-color:transparent}.et_mobile_nav_menu{float:right;display:none}.mobile_menu_bar{position:relative;display:block;line-height:0}.mobile_menu_bar:before{content:"a";font-size:32px;position:relative;left:0;top:0;cursor:pointer}.et_pb_module .mobile_menu_bar:before{top:2px}.mobile_nav .select_page{display:none}.et_pb_bg_layout_light.et_pb_module.et_pb_button{color:#2ea3f2}.et_pb_module.et_pb_button{display:inline-block;color:inherit}.et_pb_button_module_wrapper.et_pb_button_alignment_left{text-align:left}.et_pb_button_module_wrapper.et_pb_button_alignment_right{text-align:right}.et_pb_button_module_wrapper.et_pb_button_alignment_center{text-align:center}.et_pb_button_module_wrapper>a{display:inline-block}@media (max-width:980px){.et_pb_button_module_wrapper.et_pb_button_alignment_tablet_left{text-align:left}.et_pb_button_module_wrapper.et_pb_button_alignment_tablet_right{text-align:right}.et_pb_button_module_wrapper.et_pb_button_alignment_tablet_center{text-align:center}}@media (max-width:767px){.et_pb_button_module_wrapper.et_pb_button_alignment_phone_left{text-align:left}.et_pb_button_module_wrapper.et_pb_button_alignment_phone_right{text-align:right}.et_pb_button_module_wrapper.et_pb_button_alignment_phone_center{text-align:center}}.et_pb_button[data-icon]:not([data-icon=""]):after{content:attr(data-icon)}@media (max-width:980px){.et_pb_button[data-icon-tablet]:not([data-icon-tablet=""]):after{content:attr(data-icon-tablet)}}@media (max-width:767px){.et_pb_button[data-icon-phone]:not([data-icon-phone=""]):after{content:attr(data-icon-phone)}}.et_pb_text{word-wrap:break-word}.et_pb_text ol,.et_pb_text ul{padding-bottom:1em}.et_pb_text>:last-child{padding-bottom:0}.et_pb_text_inner{position:relative}.et_pb_with_border .et-pb-icon,.et_pb_with_border .et_pb_image_wrap{border:0 solid #333}.et_pb_blurb_content{max-width:550px;margin:0 auto;position:relative;text-align:center;word-wrap:break-word;width:100%}.et_pb_blurb.et_pb_text_align_left .et_pb_blurb_content .et_pb_blurb_container{text-align:left}.et_pb_blurb.et_pb_text_align_right .et_pb_blurb_content .et_pb_blurb_container{text-align:right}.et_pb_blurb.et_pb_text_align_justified .et_pb_blurb_content .et_pb_blurb_container{text-align:justify}.et_pb_blurb.et_pb_text_align_center .et_pb_blurb_content .et_pb_blurb_container{text-align:center}.et_pb_blurb_content p:last-of-type{padding-bottom:0}.et_pb_blurb .et_pb_module_header a,.et_pb_blurb h4 a{text-decoration:none}.et_pb_blurb .et_pb_image_wrap{display:block;margin:auto}.et_pb_main_blurb_image img{border-radius:inherit}.et_pb_main_blurb_image img[src*=".svg"]{width:auto}.et_pb_sticky_module .et_pb_main_blurb_image .et_pb_image_wrap{width:100%;max-width:100%}.et_pb_blurb_position_left .et_pb_blurb_content,.et_pb_blurb_position_right .et_pb_blurb_content{display:table}.et_pb_blurb_position_left .et_pb_main_blurb_image,.et_pb_blurb_position_right .et_pb_main_blurb_image{width:32px;display:table-cell;line-height:0}.et_pb_blurb_position_left .et_pb_main_blurb_image img,.et_pb_blurb_position_right .et_pb_main_blurb_image img{width:inherit}.et_pb_blurb_position_left .et-pb-icon,.et_pb_blurb_position_right .et-pb-icon{font-size:32px}.et_pb_blurb_position_right .et-pb-icon{display:table-cell}.et_pb_blurb_position_left .et_pb_blurb_container,.et_pb_blurb_position_right .et_pb_blurb_container{display:table-cell;vertical-align:top}.et_pb_blurb_position_left .et_pb_blurb_container{padding-left:15px}.et_pb_blurb_position_left .et_pb_blurb_content{text-align:left}.et_pb_blurb_position_right .et_pb_blurb_container{padding-right:15px}.et_pb_blurb_position_right .et_pb_blurb_content{text-align:right}.et_pb_blurb_position_right .et_pb_main_blurb_image{left:auto;right:0}.et_pb_blurb_position_right .et-pb-icon{margin-right:0;margin-left:20px}.et_pb_main_blurb_image{display:inline-block;margin-bottom:30px;line-height:0;max-width:100%}@media (max-width:980px){.et_pb_blurb_position_left_tablet .et_pb_main_blurb_image,.et_pb_blurb_position_right_tablet .et_pb_main_blurb_image{width:32px;display:table-cell;line-height:0}.et_pb_blurb_position_left_tablet .et_pb_main_blurb_image img,.et_pb_blurb_position_right_tablet .et_pb_main_blurb_image img{width:inherit}.et_pb_blurb_position_left_tablet .et-pb-icon,.et_pb_blurb_position_right_tablet .et-pb-icon{font-size:32px;display:table-cell}.et_pb_blurb_position_left_tablet .et_pb_blurb_container,.et_pb_blurb_position_right_tablet .et_pb_blurb_container{display:table-cell;vertical-align:top}.et_pb_blurb_position_left_tablet .et_pb_blurb_container{padding-left:15px}.et_pb_blurb_position_left_tablet .et_pb_blurb_content{text-align:left}.et_pb_blurb_position_right_tablet .et_pb_blurb_container{padding-right:15px}.et_pb_blurb_position_right_tablet .et_pb_blurb_content{padding-right:52px;text-align:right}.et_pb_blurb_position_right_tablet .et_pb_main_blurb_image{left:auto;right:0}.et_pb_blurb_position_right_tablet .et-pb-icon{margin-right:0;margin-left:20px}.et_pb_blurb_position_top_tablet .et_pb_main_blurb_image{display:block;width:auto}.et_pb_blurb_position_top_tablet .et-pb-icon{font-size:96px;display:initial}.et_pb_blurb_position_top_tablet .et_pb_blurb_container{display:block;padding-left:0;padding-right:0}.et_pb_blurb_position_top_tablet .et_pb_blurb_content{display:inline-block;text-align:center;padding-right:0}}@media (max-width:767px){.et_pb_blurb_position_left_phone .et_pb_main_blurb_image,.et_pb_blurb_position_right_phone .et_pb_main_blurb_image{width:32px;display:table-cell;line-height:0}.et_pb_blurb_position_left_phone .et_pb_main_blurb_image img,.et_pb_blurb_position_right_phone .et_pb_main_blurb_image img{width:inherit}.et_pb_blurb_position_left_phone .et-pb-icon,.et_pb_blurb_position_right_phone .et-pb-icon{font-size:32px;display:table-cell}.et_pb_blurb_position_left_phone .et_pb_blurb_container,.et_pb_blurb_position_right_phone .et_pb_blurb_container{display:table-cell;vertical-align:top}.et_pb_blurb_position_left_phone .et_pb_blurb_container{padding-left:15px}.et_pb_blurb_position_left_phone .et_pb_blurb_content{text-align:left}.et_pb_blurb_position_right_phone .et_pb_blurb_container{padding-right:15px}.et_pb_blurb_position_right_phone .et_pb_blurb_content{padding-right:52px;text-align:right}.et_pb_blurb_position_right_phone .et_pb_main_blurb_image{left:auto;right:0}.et_pb_blurb_position_right_phone .et-pb-icon{margin-right:0;margin-left:20px}.et_pb_blurb_position_top_phone .et_pb_main_blurb_image{display:block;width:auto}.et_pb_blurb_position_top_phone .et-pb-icon{font-size:96px;display:initial}.et_pb_blurb_position_top_phone .et_pb_blurb_container{display:block;padding-left:0;padding-right:0}.et_pb_blurb_position_top_phone .et_pb_blurb_content{display:inline-block;text-align:center;padding-right:0}}@media (max-width:980px){.et_pb_blurb.et_pb_text_align_left-tablet .et_pb_blurb_content .et_pb_blurb_container{text-align:left}.et_pb_blurb.et_pb_text_align_right-tablet .et_pb_blurb_content .et_pb_blurb_container{text-align:right}.et_pb_blurb.et_pb_text_align_justified-tablet .et_pb_blurb_content .et_pb_blurb_container{text-align:justify}.et_pb_blurb.et_pb_text_align_center-tablet .et_pb_blurb_content .et_pb_blurb_container{text-align:center}}@media (max-width:767px){.et_pb_blurb.et_pb_text_align_left-phone .et_pb_blurb_content .et_pb_blurb_container{text-align:left}.et_pb_blurb.et_pb_text_align_right-phone .et_pb_blurb_content .et_pb_blurb_container{text-align:right}.et_pb_blurb.et_pb_text_align_justified-phone .et_pb_blurb_content .et_pb_blurb_container{text-align:justify}.et_pb_blurb.et_pb_text_align_center-phone .et_pb_blurb_content .et_pb_blurb_container{text-align:center}}.et-waypoint.et_pb_animation_off,.et-waypoint:not(.et_pb_counters).et_pb_animation_off,.et_pb_animation_off{opacity:1}.et-waypoint.et_pb_animation_left.et-animated,.et_pb_animation_left.et-animated{opacity:1;-webkit-animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_right.et-animated,.et_pb_animation_right.et-animated{opacity:1;-webkit-animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_top.et-animated,.et_pb_animation_top.et-animated{opacity:1;-webkit-animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_bottom.et-animated,.et_pb_animation_bottom.et-animated{opacity:1;-webkit-animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_fade_in.et-animated,.et_pb_animation_fade_in.et-animated{opacity:1;-webkit-animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1}@media (max-width:980px){.et-waypoint.et_pb_animation_off_tablet,.et-waypoint:not(.et_pb_counters).et_pb_animation_off_tablet,.et_pb_animation_off_tablet{opacity:1;-webkit-animation:none;animation:none}.et-waypoint.et_pb_animation_left_tablet.et-animated,.et_pb_animation_left_tablet.et-animated{opacity:1;-webkit-animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_right_tablet.et-animated,.et_pb_animation_right_tablet.et-animated{opacity:1;-webkit-animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_top_tablet.et-animated,.et_pb_animation_top_tablet.et-animated{opacity:1;-webkit-animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_bottom_tablet.et-animated,.et_pb_animation_bottom_tablet.et-animated{opacity:1;-webkit-animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_fade_in_tablet.et-animated,.et_pb_animation_fade_in_tablet.et-animated{opacity:1;-webkit-animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1}}@media (max-width:767px){.et-waypoint.et_pb_animation_off_phone,.et-waypoint:not(.et_pb_counters).et_pb_animation_off_phone,.et_pb_animation_off_phone{opacity:1;-webkit-animation:none;animation:none}.et-waypoint.et_pb_animation_left_phone.et-animated,.et_pb_animation_left_phone.et-animated{opacity:1;-webkit-animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeLeft 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_right_phone.et-animated,.et_pb_animation_right_phone.et-animated{opacity:1;-webkit-animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeRight 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_top_phone.et-animated,.et_pb_animation_top_phone.et-animated{opacity:1;-webkit-animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeTop 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_bottom_phone.et-animated,.et_pb_animation_bottom_phone.et-animated{opacity:1;-webkit-animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeBottom 1s cubic-bezier(.77,0,.175,1) 1}.et-waypoint.et_pb_animation_fade_in_phone.et-animated,.et_pb_animation_fade_in_phone.et-animated{opacity:1;-webkit-animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1;animation:fadeIn 1s cubic-bezier(.77,0,.175,1) 1}}.et_pb_with_border .et_pb_image_wrap{border:0 solid #333}.et_pb_image{margin-left:auto;margin-right:auto;line-height:0}.et_pb_image.aligncenter{text-align:center}.et_pb_image.et_pb_has_overlay a.et_pb_lightbox_image{display:block;position:relative}.et_pb_image{display:block}.et_pb_image .et_pb_image_wrap{display:inline-block;position:relative;max-width:100%}.et_pb_image .et_pb_image_wrap img[src*=".svg"]{width:auto}.et_pb_image img{position:relative}.et_pb_image_sticky{margin-bottom:0!important;display:inherit}.et_pb_image.et_pb_has_overlay .et_pb_image_wrap:hover .et_overlay{z-index:3;opacity:1}@media (min-width:981px){.et_pb_section_sticky,.et_pb_section_sticky.et_pb_bottom_divider .et_pb_row:nth-last-child(2),.et_pb_section_sticky .et_pb_column_single,.et_pb_section_sticky .et_pb_row.et-last-child,.et_pb_section_sticky .et_pb_row:last-child,.et_pb_section_sticky .et_pb_specialty_column .et_pb_row_inner.et-last-child,.et_pb_section_sticky .et_pb_specialty_column .et_pb_row_inner:last-child{padding-bottom:0!important}}@media (max-width:980px){.et_pb_image_sticky_tablet{margin-bottom:0!important;display:inherit}.et_pb_section_sticky_mobile,.et_pb_section_sticky_mobile.et_pb_bottom_divider .et_pb_row:nth-last-child(2),.et_pb_section_sticky_mobile .et_pb_column_single,.et_pb_section_sticky_mobile .et_pb_row.et-last-child,.et_pb_section_sticky_mobile .et_pb_row:last-child,.et_pb_section_sticky_mobile .et_pb_specialty_column .et_pb_row_inner.et-last-child,.et_pb_section_sticky_mobile .et_pb_specialty_column .et_pb_row_inner:last-child{padding-bottom:0!important}.et_pb_section_sticky .et_pb_row.et-last-child .et_pb_column.et_pb_row_sticky.et-last-child,.et_pb_section_sticky .et_pb_row:last-child .et_pb_column.et_pb_row_sticky:last-child{margin-bottom:0}.et_pb_image_bottom_space_tablet{margin-bottom:30px!important;display:block}.et_always_center_on_mobile{text-align:center!important;margin-left:auto!important;margin-right:auto!important}}@media (max-width:767px){.et_pb_image_sticky_phone{margin-bottom:0!important;display:inherit}.et_pb_image_bottom_space_phone{margin-bottom:30px!important;display:block}}.et_overlay{z-index:-1;position:absolute;top:0;left:0;display:block;width:100%;height:100%;background:hsla(0,0%,100%,.9);opacity:0;pointer-events:none;-webkit-transition:all .3s;transition:all .3s;border:1px solid #e5e5e5;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-font-smoothing:antialiased}.et_overlay:before{color:#2ea3f2;content:"\E050";position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:32px;-webkit-transition:all .4s;transition:all .4s}.et_portfolio_image,.et_shop_image{position:relative;display:block}.et_pb_has_overlay:not(.et_pb_image):hover .et_overlay,.et_portfolio_image:hover .et_overlay,.et_shop_image:hover .et_overlay{z-index:3;opacity:1}#ie7 .et_overlay,#ie8 .et_overlay{display:none}.et_pb_module.et_pb_has_overlay{position:relative}.et_pb_module.et_pb_has_overlay .et_overlay,article.et_pb_has_overlay{border:none}/* */(function ($) {$(document).ready(function () {$('.et_pb_module.et_pb_accordion .et_pb_accordion_item.et_pb_toggle_open').addClass('et_pb_toggle_close').removeClass('et_pb_toggle_open');});})(jQuery)jQuery(function ($) {$(document).ready(function () {$('body ul.et_mobile_menu li.menu-item-has-children, body ul.et_mobile_menu li.page_item_has_children').append('',);$('ul.et_mobile_menu li.menu-item-has-children .mobile-toggle, ul.et_mobile_menu li.page_item_has_children .mobile-toggle').click(function (event) {event.preventDefault();event.stopPropagation();$(this).parent('li').toggleClass('dt-open');$(this).parent('li').find('ul.children').first().toggleClass('visible');$(this).parent('li').find('ul.sub-menu').first().toggleClass('visible');});$('.mobile-toggle').on('mouseover', function () {$(this).parent().addClass('is-hover');}).on('mouseout', function () {$(this).parent().removeClass('is-hover');});});});body,.et_pb_column_1_2 .et_quote_content blockquote cite,.et_pb_column_1_2 .et_link_content a.et_link_main_url,.et_pb_column_1_3 .et_quote_content blockquote cite,.et_pb_column_3_8 .et_quote_content blockquote cite,.et_pb_column_1_4 .et_quote_content blockquote cite,.et_pb_blog_grid .et_quote_content blockquote cite,.et_pb_column_1_3 .et_link_content a.et_link_main_url,.et_pb_column_3_8 .et_link_content a.et_link_main_url,.et_pb_column_1_4 .et_link_content a.et_link_main_url,.et_pb_blog_grid .et_link_content a.et_link_main_url,body .et_pb_bg_layout_light .et_pb_post p,body .et_pb_bg_layout_dark .et_pb_post p{font-size:14px}.et_pb_slide_content,.et_pb_best_value{font-size:15px}body{color:#150e45}h1,h2,h3,h4,h5,h6{color:#150e45}body,.et_pb_column_1_2 .et_quote_content blockquote cite,.et_pb_column_1_2 .et_link_content a.et_link_main_url,.et_pb_column_1_3 .et_quote_content blockquote cite,.et_pb_column_3_8 .et_quote_content blockquote cite,.et_pb_column_1_4 .et_quote_content blockquote cite,.et_pb_blog_grid .et_quote_content blockquote cite,.et_pb_column_1_3 .et_link_content a.et_link_main_url,.et_pb_column_3_8 .et_link_content a.et_link_main_url,.et_pb_column_1_4 .et_link_content a.et_link_main_url,.et_pb_blog_grid .et_link_content a.et_link_main_url,body .et_pb_bg_layout_light .et_pb_post p,body .et_pb_bg_layout_dark .et_pb_post p{font-weight:400}.et_pb_slide_content,.et_pb_best_value{font-weight:400}#et_search_icon:hover,.mobile_menu_bar:before,.mobile_menu_bar:after,.et_toggle_slide_menu:after,.et-social-icon a:hover,.et_pb_sum,.et_pb_pricing li a,.et_pb_pricing_table_button,.et_overlay:before,.entry-summary p.price ins,.et_pb_member_social_links a:hover,.et_pb_widget li a:hover,.et_pb_filterable_portfolio .et_pb_portfolio_filters li a.active,.et_pb_filterable_portfolio .et_pb_portofolio_pagination ul li a.active,.et_pb_gallery .et_pb_gallery_pagination ul li a.active,.wp-pagenavi span.current,.wp-pagenavi a:hover,.nav-single a,.tagged_as a,.posted_in a{color:#1b3c74}.et_pb_contact_submit,.et_password_protected_form .et_submit_button,.et_pb_bg_layout_light .et_pb_newsletter_button,.comment-reply-link,.form-submit .et_pb_button,.et_pb_bg_layout_light .et_pb_promo_button,.et_pb_bg_layout_light .et_pb_more_button,.et_pb_contact p input[type="checkbox"]:checked+label i:before,.et_pb_bg_layout_light.et_pb_module.et_pb_button{color:#1b3c74}.footer-widget h4{color:#1b3c74}.et-search-form,.nav li ul,.et_mobile_menu,.footer-widget li:before,.et_pb_pricing li:before,blockquote{border-color:#1b3c74}.et_pb_counter_amount,.et_pb_featured_table .et_pb_pricing_heading,.et_quote_content,.et_link_content,.et_audio_content,.et_pb_post_slider.et_pb_bg_layout_dark,.et_slide_in_menu_container,.et_pb_contact p input[type="radio"]:checked+label i:before{background-color:#1b3c74}a{color:#ab0000}.nav li ul{border-color:#ab0000}.et_secondary_nav_enabled #page-container #top-header{background-color:#1b3c74!important}#et-secondary-nav li ul{background-color:#1b3c74}.et_header_style_centered .mobile_nav .select_page,.et_header_style_split .mobile_nav .select_page,.et_nav_text_color_light #top-menu>li>a,.et_nav_text_color_dark #top-menu>li>a,#top-menu a,.et_mobile_menu li a,.et_nav_text_color_light .et_mobile_menu li a,.et_nav_text_color_dark .et_mobile_menu li a,#et_search_icon:before,.et_search_form_container input,span.et_close_search_field:after,#et-top-navigation .et-cart-info{color:#1b3c74}.et_search_form_container input::-moz-placeholder{color:#1b3c74}.et_search_form_container input::-webkit-input-placeholder{color:#1b3c74}.et_search_form_container input:-ms-input-placeholder{color:#1b3c74}#main-header .nav li ul a{color:#150e45}#top-menu li a{font-size:12px}body.et_vertical_nav .container.et_search_form_container .et-search-form input{font-size:12px!important}#top-menu li a,.et_search_form_container input{font-weight:normal;font-style:normal;text-transform:uppercase;text-decoration:none}.et_search_form_container input::-moz-placeholder{font-weight:normal;font-style:normal;text-transform:uppercase;text-decoration:none}.et_search_form_container input::-webkit-input-placeholder{font-weight:normal;font-style:normal;text-transform:uppercase;text-decoration:none}.et_search_form_container input:-ms-input-placeholder{font-weight:normal;font-style:normal;text-transform:uppercase;text-decoration:none}#top-menu li.current-menu-ancestor>a,#top-menu li.current-menu-item>a,#top-menu li.current_page_item>a{color:#1b3c74}#main-footer .footer-widget h4,#main-footer .widget_block h1,#main-footer .widget_block h2,#main-footer .widget_block h3,#main-footer .widget_block h4,#main-footer .widget_block h5,#main-footer .widget_block h6{color:#1b3c74}.footer-widget li:before{border-color:#1b3c74}body .et_pb_button{font-size:14px;background-color:#1b3c74;border-width:0px!important;border-radius:4px}body.et_pb_button_helper_class .et_pb_button,body.et_pb_button_helper_class .et_pb_module.et_pb_button{color:#ffffff}body .et_pb_button:after{content:'9';font-size:14px}body .et_pb_bg_layout_light.et_pb_button:hover,body .et_pb_bg_layout_light .et_pb_button:hover,body .et_pb_button:hover{color:#ffffff!important;background-color:#828da4}@media only screen and (min-width:981px){#logo{max-height:60%}.et_pb_svg_logo #logo{height:60%}.et_fixed_nav #page-container .et-fixed-header#top-header{background-color:#1b3c74!important}.et_fixed_nav #page-container .et-fixed-header#top-header #et-secondary-nav li ul{background-color:#1b3c74}.et-fixed-header #top-menu a,.et-fixed-header #et_search_icon:before,.et-fixed-header #et_top_search .et-search-form input,.et-fixed-header .et_search_form_container input,.et-fixed-header .et_close_search_field:after,.et-fixed-header #et-top-navigation .et-cart-info{color:#1b3c74!important}.et-fixed-header .et_search_form_container input::-moz-placeholder{color:#1b3c74!important}.et-fixed-header .et_search_form_container input::-webkit-input-placeholder{color:#1b3c74!important}.et-fixed-header .et_search_form_container input:-ms-input-placeholder{color:#1b3c74!important}.et-fixed-header #top-menu li.current-menu-ancestor>a,.et-fixed-header #top-menu li.current-menu-item>a,.et-fixed-header #top-menu li.current_page_item>a{color:#1b3c74!important}}@media only screen and (min-width:1350px){.et_pb_row{padding:27px 0}.et_pb_section{padding:54px 0}.single.et_pb_pagebuilder_layout.et_full_width_page .et_post_meta_wrapper{padding-top:81px}.et_pb_fullwidth_section{padding:0}}h1,h1.et_pb_contact_main_title,.et_pb_title_container h1{font-weight:400}h2,.product .related h2,.et_pb_column_1_2 .et_quote_content blockquote p{font-weight:400}h3{font-weight:400}h4,.et_pb_circle_counter h3,.et_pb_number_counter h3,.et_pb_column_1_3 .et_pb_post h2,.et_pb_column_1_4 .et_pb_post h2,.et_pb_blog_grid h2,.et_pb_column_1_3 .et_quote_content blockquote p,.et_pb_column_3_8 .et_quote_content blockquote p,.et_pb_column_1_4 .et_quote_content blockquote p,.et_pb_blog_grid .et_quote_content blockquote p,.et_pb_column_1_3 .et_link_content h2,.et_pb_column_3_8 .et_link_content h2,.et_pb_column_1_4 .et_link_content h2,.et_pb_blog_grid .et_link_content h2,.et_pb_column_1_3 .et_audio_content h2,.et_pb_column_3_8 .et_audio_content h2,.et_pb_column_1_4 .et_audio_content h2,.et_pb_blog_grid .et_audio_content h2,.et_pb_column_3_8 .et_pb_audio_module_content h2,.et_pb_column_1_3 .et_pb_audio_module_content h2,.et_pb_gallery_grid .et_pb_gallery_item h3,.et_pb_portfolio_grid .et_pb_portfolio_item h2,.et_pb_filterable_portfolio_grid .et_pb_portfolio_item h2{font-weight:400}h5{font-weight:400}h6{font-weight:400}.et_pb_slide_description .et_pb_slide_title{font-weight:400}.et_pb_gallery_grid .et_pb_gallery_item h3,.et_pb_portfolio_grid .et_pb_portfolio_item h2,.et_pb_filterable_portfolio_grid .et_pb_portfolio_item h2,.et_pb_column_1_4 .et_pb_audio_module_content h2{font-weight:400} h1,h2,h3,h4,h5,h6{font-family:'IBM Plex Sans',Helvetica,Arial,Lucida,sans-serif}body,input,textarea,select{font-family:'IBM Plex Sans',Helvetica,Arial,Lucida,sans-serif}#main-header,#et-top-navigation{font-family:'IBM Plex Mono',monospace}.et_pb_section_0.et_pb_section{padding-bottom:20px;background-color:#150E45!important}.et_pb_row_0{background-size:contain;background-image:url(https://zarc.web.za/wp-content/uploads/2025/03/HERO_bg-1.png)}.et_pb_row_0.et_pb_row{padding-top:13vw!important;padding-bottom:13vw!important;padding-top:13vw;padding-bottom:13vw}.et_pb_row_0,body #page-container .et-db #et-boc .et-l .et_pb_row_0.et_pb_row,body.et_pb_pagebuilder_layout.single #page-container #et-boc .et-l .et_pb_row_0.et_pb_row,body.et_pb_pagebuilder_layout.single.et_full_width_page #page-container #et-boc .et-l .et_pb_row_0.et_pb_row{width:100%;max-width:90%}.et_pb_text_0 h1{text-transform:uppercase;font-size:72px;color:#FFFFFF!important;line-height:1.1em}.et_pb_text_0{padding-left:6vw!important}.et_pb_button_0_wrapper .et_pb_button_0,.et_pb_button_0_wrapper .et_pb_button_0:hover,.et_pb_button_5_wrapper .et_pb_button_5,.et_pb_button_5_wrapper .et_pb_button_5:hover,.et_pb_button_6_wrapper .et_pb_button_6,.et_pb_button_6_wrapper .et_pb_button_6:hover,.et_pb_button_11_wrapper .et_pb_button_11,.et_pb_button_11_wrapper .et_pb_button_11:hover{padding-top:10px!important;padding-right:34px!important;padding-bottom:10px!important;padding-left:20px!important}.et_pb_button_0_wrapper{margin-left:6vw!important}body #page-container .et_pb_section .et_pb_button_0{color:#FFFFFF!important;border-width:1px!important;border-color:#FFFFFF;border-radius:40px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_0:hover,body #page-container .et_pb_section .et_pb_button_1:hover,body #page-container .et_pb_section .et_pb_button_2:hover,body #page-container .et_pb_section .et_pb_button_3:hover,body #page-container .et_pb_section .et_pb_button_4:hover{color:#FFFFFF!important;background-image:initial;background-color:rgba(255,255,255,0.2)}body #page-container .et_pb_section .et_pb_button_0:hover:after,body #page-container .et_pb_section .et_pb_button_5:hover:after,body #page-container .et_pb_section .et_pb_button_6:hover:after,body #page-container .et_pb_section .et_pb_button_7:hover:after,body #page-container .et_pb_section .et_pb_button_8:hover:after,body #page-container .et_pb_section .et_pb_button_9:hover:after,body #page-container .et_pb_section .et_pb_button_10:hover:after,body #page-container .et_pb_section .et_pb_button_11:hover:after{margin-left:.3em;left:auto;margin-left:.3em}body #page-container .et_pb_section .et_pb_button_0:after,body #page-container .et_pb_section .et_pb_button_5:after,body #page-container .et_pb_section .et_pb_button_6:after,body #page-container .et_pb_section .et_pb_button_11:after{line-height:inherit;font-size:inherit!important;opacity:1;margin-left:.3em;left:auto;font-family:ETmodules!important;font-weight:400!important}.et_pb_button_0,.et_pb_button_5,.et_pb_button_6,.et_pb_button_11{transition:color 300ms ease 0ms,background-color 300ms ease 0ms}.et_pb_button_0,.et_pb_button_0:after,.et_pb_button_1,.et_pb_button_1:after,.et_pb_button_2,.et_pb_button_2:after,.et_pb_button_3,.et_pb_button_3:after,.et_pb_button_4,.et_pb_button_4:after,.et_pb_button_5,.et_pb_button_5:after,.et_pb_button_6,.et_pb_button_6:after,.et_pb_button_7,.et_pb_button_7:after,.et_pb_button_8,.et_pb_button_8:after,.et_pb_button_9,.et_pb_button_9:after,.et_pb_button_10,.et_pb_button_10:after,.et_pb_button_11,.et_pb_button_11:after{transition:all 300ms ease 0ms}.et_pb_row_1,body #page-container .et-db #et-boc .et-l .et_pb_row_1.et_pb_row,body.et_pb_pagebuilder_layout.single #page-container #et-boc .et-l .et_pb_row_1.et_pb_row,body.et_pb_pagebuilder_layout.single.et_full_width_page #page-container #et-boc .et-l .et_pb_row_1.et_pb_row{width:100%;max-width:85%}.et_pb_button_1_wrapper .et_pb_button_1,.et_pb_button_1_wrapper .et_pb_button_1:hover,.et_pb_button_2_wrapper .et_pb_button_2,.et_pb_button_2_wrapper .et_pb_button_2:hover,.et_pb_button_3_wrapper .et_pb_button_3,.et_pb_button_3_wrapper .et_pb_button_3:hover,.et_pb_button_4_wrapper .et_pb_button_4,.et_pb_button_4_wrapper .et_pb_button_4:hover{padding-top:10px!important;padding-right:30px!important;padding-bottom:10px!important;padding-left:40px!important}body #page-container .et_pb_section .et_pb_button_1,body #page-container .et_pb_section .et_pb_button_2,body #page-container .et_pb_section .et_pb_button_3,body #page-container .et_pb_section .et_pb_button_4{color:#FFFFFF!important;border-width:1px!important;border-color:#FFFFFF;border-radius:40px;font-size:17px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_1:after,body #page-container .et_pb_section .et_pb_button_2:after,body #page-container .et_pb_section .et_pb_button_3:after,body #page-container .et_pb_section .et_pb_button_4:after{display:none}body #page-container .et_pb_section .et_pb_button_1:before,body #page-container .et_pb_section .et_pb_button_2:before,body #page-container .et_pb_section .et_pb_button_3:before,body #page-container .et_pb_section .et_pb_button_4:before{content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important;line-height:inherit;font-size:inherit!important;opacity:1;margin-left:-1.3em;right:auto;display:inline-block;font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_1:hover:before,body #page-container .et_pb_section .et_pb_button_2:hover:before,body #page-container .et_pb_section .et_pb_button_3:hover:before,body #page-container .et_pb_section .et_pb_button_4:hover:before{margin-left:.3em;right:auto;margin-left:-1.3em}.et_pb_button_1,.et_pb_button_2,.et_pb_button_3,.et_pb_button_4{transition:color 300ms ease 0ms,background-color 300ms ease 0ms;width:100%}div.et_pb_section.et_pb_section_1{background-image:linear-gradient(180deg,#150e45 79%,#ffffff 79%)!important}.et_pb_section_1.et_pb_section{padding-bottom:20px}.et_pb_text_1,.et_pb_text_2{line-height:1.6em;font-weight:600;font-size:16px;line-height:1.6em;margin-top:40px!important}.et_pb_text_1 h2,.et_pb_text_2 h2{text-transform:uppercase;font-size:60px;text-align:right}.et_pb_text_3.et_pb_text,.et_pb_text_5.et_pb_text{color:#150E45!important}body #page-container .et_pb_section .et_pb_button_5,body #page-container .et_pb_section .et_pb_button_6{color:#150E45!important;border-width:1px!important;border-color:#150E45;border-radius:40px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_5:hover,body #page-container .et_pb_section .et_pb_button_6:hover{color:#150E45!important;background-image:initial;background-color:rgba(21,14,69,0.2)}.et_pb_row_3.et_pb_row{margin-top:40px!important}.et_pb_blurb_0.et_pb_blurb .et_pb_module_header,.et_pb_blurb_0.et_pb_blurb .et_pb_module_header a,.et_pb_blurb_1.et_pb_blurb .et_pb_module_header,.et_pb_blurb_1.et_pb_blurb .et_pb_module_header a,.et_pb_blurb_2.et_pb_blurb .et_pb_module_header,.et_pb_blurb_2.et_pb_blurb .et_pb_module_header a,.et_pb_blurb_3.et_pb_blurb .et_pb_module_header,.et_pb_blurb_3.et_pb_blurb .et_pb_module_header a{font-weight:600}.et_pb_blurb_0.et_pb_blurb p,.et_pb_blurb_1.et_pb_blurb p,.et_pb_blurb_2.et_pb_blurb p,.et_pb_blurb_3.et_pb_blurb p{line-height:1.5em}.et_pb_blurb_0.et_pb_blurb,.et_pb_blurb_1.et_pb_blurb,.et_pb_blurb_2.et_pb_blurb,.et_pb_blurb_3.et_pb_blurb{color:#150E45!important;line-height:1.5em}.et_pb_blurb_0 .et_pb_blurb_content,.et_pb_blurb_1 .et_pb_blurb_content,.et_pb_blurb_2 .et_pb_blurb_content,.et_pb_blurb_3 .et_pb_blurb_content{text-align:left}.et_pb_blurb_0.et_pb_blurb .et_pb_image_wrap,.et_pb_blurb_1.et_pb_blurb .et_pb_image_wrap,.et_pb_blurb_2.et_pb_blurb .et_pb_image_wrap,.et_pb_blurb_3.et_pb_blurb .et_pb_image_wrap{margin:auto auto auto 0}.et_pb_blurb_0 .et_pb_main_blurb_image .et_pb_image_wrap,.et_pb_blurb_1 .et_pb_main_blurb_image .et_pb_image_wrap,.et_pb_blurb_2 .et_pb_main_blurb_image .et_pb_image_wrap,.et_pb_blurb_3 .et_pb_main_blurb_image .et_pb_image_wrap{width:80px}.et_pb_button_7_wrapper .et_pb_button_7,.et_pb_button_7_wrapper .et_pb_button_7:hover,.et_pb_button_8_wrapper .et_pb_button_8,.et_pb_button_8_wrapper .et_pb_button_8:hover,.et_pb_button_9_wrapper .et_pb_button_9,.et_pb_button_9_wrapper .et_pb_button_9:hover,.et_pb_button_10_wrapper .et_pb_button_10,.et_pb_button_10_wrapper .et_pb_button_10:hover{padding-top:0px!important;padding-right:0px!important;padding-bottom:0px!important;padding-left:0px!important}body #page-container .et_pb_section .et_pb_button_7,body #page-container .et_pb_section .et_pb_button_8,body #page-container .et_pb_section .et_pb_button_9,body #page-container .et_pb_section .et_pb_button_10{color:#150E45!important;font-size:13px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_7:hover,body #page-container .et_pb_section .et_pb_button_8:hover,body #page-container .et_pb_section .et_pb_button_9:hover,body #page-container .et_pb_section .et_pb_button_10:hover{color:#828DA4!important}body #page-container .et_pb_section .et_pb_button_7:after,body #page-container .et_pb_section .et_pb_button_8:after,body #page-container .et_pb_section .et_pb_button_9:after,body #page-container .et_pb_section .et_pb_button_10:after{color:#150E45;line-height:inherit;font-size:inherit!important;opacity:1;margin-left:.3em;left:auto;font-family:ETmodules!important;font-weight:400!important}.et_pb_button_7,.et_pb_button_8,.et_pb_button_9,.et_pb_button_10{transition:color 300ms ease 0ms}.et_pb_column_12,.et_pb_column_13{display:flex;flex-direction:column;justify-content:center}.et_pb_image_0{text-align:left;margin-left:0}.et_pb_text_4 h2{text-transform:uppercase;font-size:60px}body #page-container .et_pb_section .et_pb_button_11{color:#AB0000!important;border-width:1px!important;border-color:#AB0000;border-radius:40px;font-family:'IBM Plex Mono',monospace!important;background-color:RGBA(255,255,255,0)}body #page-container .et_pb_section .et_pb_button_11:hover{color:#AB0000!important;background-image:initial;background-color:rgba(171,0,0,0.2)}.et_pb_column_7{background-color:#FFFFFF;border-radius:20px 20px 20px 20px;overflow:hidden;padding-top:3vw;padding-right:3vw;padding-bottom:3vw;padding-left:3vw}.et_pb_column_8,.et_pb_column_9,.et_pb_column_10,.et_pb_column_11{background-color:#FFFFFF;border-radius:15px 15px 15px 15px;overflow:hidden;padding-top:30px;padding-right:20px;padding-bottom:30px;padding-left:25px;box-shadow:0px 2px 18px 0px rgba(0,0,0,0.18)}.et_pb_image_0.et_pb_module{margin-left:auto!important;margin-right:auto!important}@media only screen and (min-width:981px){.et_pb_image_0{width:70%}}@media only screen and (max-width:980px){.et_pb_section_0.et_pb_section{padding-bottom:20px}.et_pb_row_0{background-color:initial}.et_pb_row_0.et_pb_row{padding-top:13vw!important;padding-bottom:13vw!important;padding-top:13vw!important;padding-bottom:13vw!important}.et_pb_text_0 h1{font-size:60px;line-height:1.1em}.et_pb_text_0{padding-left:6vw!important}body #page-container .et_pb_section .et_pb_button_0:after,body #page-container .et_pb_section .et_pb_button_5:after,body #page-container .et_pb_section .et_pb_button_6:after,body #page-container .et_pb_section .et_pb_button_7:after,body #page-container .et_pb_section .et_pb_button_8:after,body #page-container .et_pb_section .et_pb_button_9:after,body #page-container .et_pb_section .et_pb_button_10:after,body #page-container .et_pb_section .et_pb_button_11:after{line-height:inherit;font-size:inherit!important;margin-left:.3em;left:auto;display:inline-block;opacity:1;content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_0:before,body #page-container .et_pb_section .et_pb_button_1:after,body #page-container .et_pb_section .et_pb_button_2:after,body #page-container .et_pb_section .et_pb_button_3:after,body #page-container .et_pb_section .et_pb_button_4:after,body #page-container .et_pb_section .et_pb_button_5:before,body #page-container .et_pb_section .et_pb_button_6:before,body #page-container .et_pb_section .et_pb_button_7:before,body #page-container .et_pb_section .et_pb_button_8:before,body #page-container .et_pb_section .et_pb_button_9:before,body #page-container .et_pb_section .et_pb_button_10:before,body #page-container .et_pb_section .et_pb_button_11:before{display:none}body #page-container .et_pb_section .et_pb_button_0:hover:after,body #page-container .et_pb_section .et_pb_button_5:hover:after,body #page-container .et_pb_section .et_pb_button_6:hover:after,body #page-container .et_pb_section .et_pb_button_7:hover:after,body #page-container .et_pb_section .et_pb_button_8:hover:after,body #page-container .et_pb_section .et_pb_button_9:hover:after,body #page-container .et_pb_section .et_pb_button_10:hover:after,body #page-container .et_pb_section .et_pb_button_11:hover:after{margin-left:.3em;left:auto;margin-left:.3em}.et_pb_button_1_wrapper .et_pb_button_1,.et_pb_button_1_wrapper .et_pb_button_1:hover,.et_pb_button_2_wrapper .et_pb_button_2,.et_pb_button_2_wrapper .et_pb_button_2:hover,.et_pb_button_3_wrapper .et_pb_button_3,.et_pb_button_3_wrapper .et_pb_button_3:hover,.et_pb_button_4_wrapper .et_pb_button_4,.et_pb_button_4_wrapper .et_pb_button_4:hover{padding-top:10px!important;padding-right:30px!important;padding-bottom:10px!important;padding-left:40px!important}body #page-container .et_pb_section .et_pb_button_1:before,body #page-container .et_pb_section .et_pb_button_2:before,body #page-container .et_pb_section .et_pb_button_3:before,body #page-container .et_pb_section .et_pb_button_4:before{line-height:inherit;font-size:inherit!important;margin-left:-1.3em;right:auto;display:inline-block;opacity:1;content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_1:hover:before,body #page-container .et_pb_section .et_pb_button_2:hover:before,body #page-container .et_pb_section .et_pb_button_3:hover:before,body #page-container .et_pb_section .et_pb_button_4:hover:before{margin-left:.3em;right:auto;margin-left:-1.3em}div.et_pb_section.et_pb_section_1{background-size:cover;background-repeat:no-repeat;background-position:center;background-blend-mode:normal;background-image:url(https://zarc.web.za/wp-content/uploads/2025/03/ABOUT_LINES.png),linear-gradient(180deg,#150e45 58%,#ffffff 58%)!important}.et_pb_section_1.et_pb_section{padding-bottom:70px}.et_pb_text_1,.et_pb_text_2{font-size:16px;margin-top:40px!important}.et_pb_text_1 h2,.et_pb_text_2 h2{text-align:left}.et_pb_row_3.et_pb_row{margin-top:40px!important}.et_pb_image_0{width:50%}.et_pb_image_0 .et_pb_image_wrap img{width:auto}.et_pb_column_7{padding-top:3vw;padding-right:3vw;padding-bottom:3vw;padding-left:3vw}}@media only screen and (max-width:767px){.et_pb_section_0.et_pb_section{padding-top:20px;padding-bottom:20px}.et_pb_row_0{background-size:cover;background-position:right 0px center;border-radius:30px 30px 30px 30px;overflow:hidden}.et_pb_row_0.et_pb_row{padding-top:18vw!important;padding-bottom:0vw!important;padding-top:18vw!important;padding-bottom:0vw!important}.et_pb_text_0 h1{font-size:32px;line-height:1.4em}.et_pb_text_0{padding-top:20px!important;padding-left:6vw!important}body #page-container .et_pb_section .et_pb_button_0:after,body #page-container .et_pb_section .et_pb_button_5:after,body #page-container .et_pb_section .et_pb_button_6:after,body #page-container .et_pb_section .et_pb_button_7:after,body #page-container .et_pb_section .et_pb_button_8:after,body #page-container .et_pb_section .et_pb_button_9:after,body #page-container .et_pb_section .et_pb_button_10:after,body #page-container .et_pb_section .et_pb_button_11:after{line-height:inherit;font-size:inherit!important;margin-left:.3em;left:auto;display:inline-block;opacity:1;content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_0:before,body #page-container .et_pb_section .et_pb_button_1:after,body #page-container .et_pb_section .et_pb_button_2:after,body #page-container .et_pb_section .et_pb_button_3:after,body #page-container .et_pb_section .et_pb_button_4:after,body #page-container .et_pb_section .et_pb_button_5:before,body #page-container .et_pb_section .et_pb_button_6:before,body #page-container .et_pb_section .et_pb_button_7:before,body #page-container .et_pb_section .et_pb_button_8:before,body #page-container .et_pb_section .et_pb_button_9:before,body #page-container .et_pb_section .et_pb_button_10:before,body #page-container .et_pb_section .et_pb_button_11:before{display:none}body #page-container .et_pb_section .et_pb_button_0:hover:after,body #page-container .et_pb_section .et_pb_button_5:hover:after,body #page-container .et_pb_section .et_pb_button_6:hover:after,body #page-container .et_pb_section .et_pb_button_7:hover:after,body #page-container .et_pb_section .et_pb_button_8:hover:after,body #page-container .et_pb_section .et_pb_button_9:hover:after,body #page-container .et_pb_section .et_pb_button_10:hover:after,body #page-container .et_pb_section .et_pb_button_11:hover:after{margin-left:.3em;left:auto;margin-left:.3em}.et_pb_button_1_wrapper .et_pb_button_1,.et_pb_button_1_wrapper .et_pb_button_1:hover,.et_pb_button_2_wrapper .et_pb_button_2,.et_pb_button_2_wrapper .et_pb_button_2:hover,.et_pb_button_3_wrapper .et_pb_button_3,.et_pb_button_3_wrapper .et_pb_button_3:hover,.et_pb_button_4_wrapper .et_pb_button_4,.et_pb_button_4_wrapper .et_pb_button_4:hover{padding-top:8px!important;padding-right:30px!important;padding-bottom:8px!important;padding-left:40px!important}.et_pb_button_1_wrapper,.et_pb_button_2_wrapper,.et_pb_button_3_wrapper,.et_pb_button_4_wrapper{margin-bottom:-10px!important}body #page-container .et_pb_section .et_pb_button_1,body #page-container .et_pb_section .et_pb_button_2,body #page-container .et_pb_section .et_pb_button_3,body #page-container .et_pb_section .et_pb_button_4{font-size:16px!important}body #page-container .et_pb_section .et_pb_button_1:before,body #page-container .et_pb_section .et_pb_button_2:before,body #page-container .et_pb_section .et_pb_button_3:before,body #page-container .et_pb_section .et_pb_button_4:before{line-height:inherit;font-size:inherit!important;margin-left:-1.3em;right:auto;display:inline-block;opacity:1;content:attr(data-icon);font-family:ETmodules!important;font-weight:400!important}body #page-container .et_pb_section .et_pb_button_1:hover:before,body #page-container .et_pb_section .et_pb_button_2:hover:before,body #page-container .et_pb_section .et_pb_button_3:hover:before,body #page-container .et_pb_section .et_pb_button_4:hover:before{margin-left:.3em;right:auto;margin-left:-1.3em}div.et_pb_section.et_pb_section_1{background-image:url(https://zarc.web.za/wp-content/uploads/2025/03/ABOUT_LINES.png),linear-gradient(180deg,#150e45 51%,#ffffff 51%)!important}.et_pb_section_1.et_pb_section{padding-bottom:0px}.et_pb_row_2.et_pb_row{padding-top:0px!important;padding-top:0px!important}.et_pb_text_1,.et_pb_text_2{font-size:14px;margin-top:0px!important}.et_pb_text_1 h2,.et_pb_text_2 h2{font-size:40px;text-align:left}.et_pb_row_3.et_pb_row{margin-top:0px!important}.et_pb_image_0{margin-bottom:30px!important;width:60%}.et_pb_image_0 .et_pb_image_wrap img{width:auto}.et_pb_text_4 h2{font-size:40px}.et_pb_column_7{padding-top:5vw;padding-right:5vw;padding-bottom:5vw;padding-left:5vw}}FollowFollowFollowFollowFollowFollow.sp-status {color: #fff;}System Statusdocument.addEventListener("DOMContentLoaded", function() {// Define status coloursconst greens = '#35955f'; // Operationalconst blues = '#648aad'; // Performance issuesconst oranges = '#e37e3b'; // Partial outageconst reds = '#e75a53'; // Major outageconst statusWidget = {badge: {enabled: true,selector: '.sp-status',},banner: {enabled: true,position: 'bottom-left', // Optional [bottom-left | bottom-right | top-left | top-right], def: bottom-leftstatusPageUrl: 'https://status.zarc.net.za'},};// Fetch system status APIfetch('https://status.zarc.net.za/api/v1/components', {method: 'GET',headers: {'X-Cachet-Token': 'UyHA0mIGO9NPp2OnDBxs',}}).then(response => response.json()).then(data => {const statuses = data.data.map(component => component.status);const isOperational = statuses.every(status => status === 1);const isPerformanceIssues = statuses.some(status => status === 2);const isPartialOutage = statuses.some(status => status === 3);const isMajorOutage = statuses.some(status => status === 4);// Update Badgeif (statusWidget.badge.enabled) {const badgeElement = document.querySelector(statusWidget.badge.selector);if (badgeElement) {badgeElement.style.padding = '10px';badgeElement.style.borderRadius = '5px';badgeElement.style.display = 'inline-flex';badgeElement.style.alignItems = 'center';badgeElement.style.cursor = 'pointer';badgeElement.style.position = 'relative';// Status circleconst statusCircle = document.createElement('span');statusCircle.classList.add('status-circle');statusCircle.style.display = 'inline-block';statusCircle.style.width = '10px';statusCircle.style.height = '10px';statusCircle.style.borderRadius = '50%';statusCircle.style.marginLeft = '5px';statusCircle.style.verticalAlign = 'middle';if (isOperational) {statusCircle.style.backgroundColor = greens;} else if (isPerformanceIssues) {statusCircle.style.backgroundColor = blues;} else if (isPartialOutage) {statusCircle.style.backgroundColor = oranges;} else if (isMajorOutage) {statusCircle.style.backgroundColor = reds;}badgeElement.appendChild(statusCircle);// Tooltipconst tooltip = document.createElement('div');tooltip.textContent = isOperational ? 'All systems operational' :isPerformanceIssues ? 'Performance issues detected' :isPartialOutage ? 'Partial outage' :'Major outage';tooltip.style.position = 'absolute';tooltip.style.top = '120%';tooltip.style.left = '50%';tooltip.style.transform = 'translateX(-50%)';tooltip.style.padding = '5px';tooltip.style.borderRadius = '4px';tooltip.style.backgroundColor = 'black';tooltip.style.color = 'white';tooltip.style.fontSize = '12px';tooltip.style.visibility = 'hidden';tooltip.style.whiteSpace = 'nowrap';badgeElement.addEventListener('mouseenter', () => {tooltip.style.visibility = 'visible';});badgeElement.addEventListener('mouseleave', () => {tooltip.style.visibility = 'hidden';});badgeElement.appendChild(tooltip);}}// Ionicons Scriptconst ioniconsEsm = document.createElement("script");ioniconsEsm.type = "module";ioniconsEsm.src ="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js";const ioniconsNomodule = document.createElement("script");ioniconsNomodule.nomodule = true;ioniconsNomodule.src ="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js";document.head.appendChild(ioniconsEsm);document.head.appendChild(ioniconsNomodule);let issueStartTime = null;// Update Bannerif (statusWidget.banner.enabled && !isOperational) {const bannerContainer = document.createElement('div');bannerContainer.style.display = 'flex';bannerContainer.style.flexDirection = 'column';bannerContainer.style.position = 'fixed';bannerContainer.style.width = 'fit-content';bannerContainer.style.margin = '20px';bannerContainer.style.padding = '20px';bannerContainer.style.borderRadius = '4px';bannerContainer.style.color = 'white';bannerContainer.style.zIndex = '1000';if (isMajorOutage) {bannerContainer.style.backgroundColor = reds;} else if (isPartialOutage) {bannerContainer.style.backgroundColor = oranges;} else if (isPerformanceIssues) {bannerContainer.style.backgroundColor = blues;}// Close buttonconst closeButton = document.createElement('button');closeButton.textContent = '✖';closeButton.style.background = 'none';closeButton.style.border = 'none';closeButton.style.color = 'white';closeButton.style.fontSize = '10px';closeButton.style.cursor = 'pointer';closeButton.style.position = 'absolute';closeButton.style.top = '5px';closeButton.style.right = '5px';closeButton.addEventListener('click', function() {bannerContainer.style.display = 'none';});bannerContainer.appendChild(closeButton);// Flex container for the contentconst contentContainer = document.createElement('div');contentContainer.style.display = 'flex';contentContainer.style.width = '100%';// Icon containerconst iconContainer = document.createElement('div');const warningIcon = document.createElement('ion-icon');warningIcon.setAttribute('name', 'warning');warningIcon.classList.add('text-component-4');warningIcon.style.color = 'white';warningIcon.style.marginRight = '10px';warningIcon.style.fontSize = '24px';iconContainer.appendChild(warningIcon);// Text containerconst textContainer = document.createElement('div');textContainer.style.color = 'white';// Banner messageconst statusText = document.createElement('span');statusText.textContent = isMajorOutage ? 'Major outage' :isPartialOutage ? 'Partial outage' :isPerformanceIssues ? 'Performance issues detected' : '';textContainer.appendChild(statusText);// Ongoing timeconst ongoingTextElement = document.createElement('div');function updateOngoingTime() {if (issueStartTime) {const elapsedTime = Math.floor((Date.now() - issueStartTime) / 1000);const days = Math.floor(elapsedTime / (3600 * 24));const hours = Math.floor((elapsedTime % (3600 * 24)) / 3600);const minutes = Math.floor((elapsedTime % 3600) / 60);let ongoingText = '';if (elapsedTime >= 60) {if (days > 0) ongoingText += `${days} day${days > 1 ? 's' : ''}, `;if (hours > 0 || days > 0) ongoingText += `${hours} hour${hours > 1 ? 's' : ''}, `;ongoingText += `${minutes} minute${minutes > 1 ? 's' : ''}`;ongoingTextElement.textContent = `Ongoing for ${ongoingText}`;}}}// Check the initial status and set the issueStartTime based on updated_atfunction checkStatusAndSetup(updatedAtTimestamps) {if (isOperational) {issueStartTime = null; // Reset timingongoingTextElement.textContent = ''; // Clear ongoing text} else {// Find the most recent updated_at timestampconst latestUpdatedAt = Math.max(...updatedAtTimestamps);issueStartTime = new Date(latestUpdatedAt).getTime(); // Set issueStartTime to the latest updated_at}updateOngoingTime();}// Initial checkconst updatedAtTimestamps = data.data.map(component => new Date(component.updated_at).getTime());checkStatusAndSetup(updatedAtTimestamps);setInterval(() => {checkStatusAndSetup(updatedAtTimestamps); // Regularly check the status every minuteupdateOngoingTime();}, 60000);ongoingTextElement.style.marginTop = '20px';textContainer.appendChild(ongoingTextElement);// Updates linkconst updatesLink = document.createElement('a');updatesLink.href = statusWidget.banner.statusPageUrl;updatesLink.textContent = 'View latest updates';updatesLink.style.color = 'white';updatesLink.style.display = 'block';updatesLink.style.marginTop = '20px';updatesLink.style.textDecoration = 'underline';textContainer.appendChild(updatesLink);contentContainer.appendChild(iconContainer);contentContainer.appendChild(textContainer);bannerContainer.appendChild(contentContainer);// Set the banner positionswitch (statusWidget.banner.position) {case 'bottom-left':bannerContainer.style.bottom = '0';bannerContainer.style.left = '0';break;case 'bottom-right':bannerContainer.style.bottom = '0';bannerContainer.style.right = '0';break;case 'top-left':bannerContainer.style.top = '0';bannerContainer.style.left = '0';break;case 'top-right':bannerContainer.style.top = '0';bannerContainer.style.right = '0';break;default:bannerContainer.style.bottom = '0';bannerContainer.style.left = '0';}document.body.appendChild(bannerContainer);}}).catch(error => {console.error('Error fetching system status:', error);});});Search for:.sp-status {color: #fff;}System Statusdocument.addEventListener("DOMContentLoaded", function() {// Define status coloursconst greens = '#35955f'; // Operationalconst blues = '#648aad'; // Performance issuesconst oranges = '#e37e3b'; // Partial outageconst reds = '#e75a53'; // Major outageconst statusWidget = {badge: {enabled: true,selector: '.sp-status',},banner: {enabled: true,position: 'bottom-left', // Optional [bottom-left | bottom-right | top-left | top-right], def: bottom-leftstatusPageUrl: 'https://status.zarc.net.za'},};// Fetch system status APIfetch('https://status.zarc.net.za/api/v1/components', {method: 'GET',headers: {'X-Cachet-Token': 'UyHA0mIGO9NPp2OnDBxs',}}).then(response => response.json()).then(data => {const statuses = data.data.map(component => component.status);const isOperational = statuses.every(status => status === 1);const isPerformanceIssues = statuses.some(status => status === 2);const isPartialOutage = statuses.some(status => status === 3);const isMajorOutage = statuses.some(status => status === 4);// Update Badgeif (statusWidget.badge.enabled) {const badgeElement = document.querySelector(statusWidget.badge.selector);if (badgeElement) {badgeElement.style.padding = '10px';badgeElement.style.borderRadius = '5px';badgeElement.style.display = 'inline-flex';badgeElement.style.alignItems = 'center';badgeElement.style.cursor = 'pointer';badgeElement.style.position = 'relative';// Status circleconst statusCircle = document.createElement('span');statusCircle.classList.add('status-circle');statusCircle.style.display = 'inline-block';statusCircle.style.width = '10px';statusCircle.style.height = '10px';statusCircle.style.borderRadius = '50%';statusCircle.style.marginLeft = '5px';statusCircle.style.verticalAlign = 'middle';if (isOperational) {statusCircle.style.backgroundColor = greens;} else if (isPerformanceIssues) {statusCircle.style.backgroundColor = blues;} else if (isPartialOutage) {statusCircle.style.backgroundColor = oranges;} else if (isMajorOutage) {statusCircle.style.backgroundColor = reds;}badgeElement.appendChild(statusCircle);// Tooltipconst tooltip = document.createElement('div');tooltip.textContent = isOperational ? 'All systems operational' :isPerformanceIssues ? 'Performance issues detected' :isPartialOutage ? 'Partial outage' :'Major outage';tooltip.style.position = 'absolute';tooltip.style.top = '120%';tooltip.style.left = '50%';tooltip.style.transform = 'translateX(-50%)';tooltip.style.padding = '5px';tooltip.style.borderRadius = '4px';tooltip.style.backgroundColor = 'black';tooltip.style.color = 'white';tooltip.style.fontSize = '12px';tooltip.style.visibility = 'hidden';tooltip.style.whiteSpace = 'nowrap';badgeElement.addEventListener('mouseenter', () => {tooltip.style.visibility = 'visible';});badgeElement.addEventListener('mouseleave', () => {tooltip.style.visibility = 'hidden';});badgeElement.appendChild(tooltip);}}// Ionicons Scriptconst ioniconsEsm = document.createElement("script");ioniconsEsm.type = "module";ioniconsEsm.src ="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js";const ioniconsNomodule = document.createElement("script");ioniconsNomodule.nomodule = true;ioniconsNomodule.src ="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js";document.head.appendChild(ioniconsEsm);document.head.appendChild(ioniconsNomodule);let issueStartTime = null;// Update Bannerif (statusWidget.banner.enabled && !isOperational) {const bannerContainer = document.createElement('div');bannerContainer.style.display = 'flex';bannerContainer.style.flexDirection = 'column';bannerContainer.style.position = 'fixed';bannerContainer.style.width = 'fit-content';bannerContainer.style.margin = '20px';bannerContainer.style.padding = '20px';bannerContainer.style.borderRadius = '4px';bannerContainer.style.color = 'white';bannerContainer.style.zIndex = '1000';if (isMajorOutage) {bannerContainer.style.backgroundColor = reds;} else if (isPartialOutage) {bannerContainer.style.backgroundColor = oranges;} else if (isPerformanceIssues) {bannerContainer.style.backgroundColor = blues;}// Close buttonconst closeButton = document.createElement('button');closeButton.textContent = '✖';closeButton.style.background = 'none';closeButton.style.border = 'none';closeButton.style.color = 'white';closeButton.style.fontSize = '10px';closeButton.style.cursor = 'pointer';closeButton.style.position = 'absolute';closeButton.style.top = '5px';closeButton.style.right = '5px';closeButton.addEventListener('click', function() {bannerContainer.style.display = 'none';});bannerContainer.appendChild(closeButton);// Flex container for the contentconst contentContainer = document.createElement('div');contentContainer.style.display = 'flex';contentContainer.style.width = '100%';// Icon containerconst iconContainer = document.createElement('div');const warningIcon = document.createElement('ion-icon');warningIcon.setAttribute('name', 'warning');warningIcon.classList.add('text-component-4');warningIcon.style.color = 'white';warningIcon.style.marginRight = '10px';warningIcon.style.fontSize = '24px';iconContainer.appendChild(warningIcon);// Text containerconst textContainer = document.createElement('div');textContainer.style.color = 'white';// Banner messageconst statusText = document.createElement('span');statusText.textContent = isMajorOutage ? 'Major outage' :isPartialOutage ? 'Partial outage' :isPerformanceIssues ? 'Performance issues detected' : '';textContainer.appendChild(statusText);// Ongoing timeconst ongoingTextElement = document.createElement('div');function updateOngoingTime() {if (issueStartTime) {const elapsedTime = Math.floor((Date.now() - issueStartTime) / 1000);const days = Math.floor(elapsedTime / (3600 * 24));const hours = Math.floor((elapsedTime % (3600 * 24)) / 3600);const minutes = Math.floor((elapsedTime % 3600) / 60);let ongoingText = '';if (elapsedTime >= 60) {if (days > 0) ongoingText += `${days} day${days > 1 ? 's' : ''}, `;if (hours > 0 || days > 0) ongoingText += `${hours} hour${hours > 1 ? 's' : ''}, `;ongoingText += `${minutes} minute${minutes > 1 ? 's' : ''}`;ongoingTextElement.textContent = `Ongoing for ${ongoingText}`;}}}// Check the initial status and set the issueStartTime based on updated_atfunction checkStatusAndSetup(updatedAtTimestamps) {if (isOperational) {issueStartTime = null; // Reset timingongoingTextElement.textContent = ''; // Clear ongoing text} else {// Find the most recent updated_at timestampconst latestUpdatedAt = Math.max(...updatedAtTimestamps);issueStartTime = new Date(latestUpdatedAt).getTime(); // Set issueStartTime to the latest updated_at}updateOngoingTime();}// Initial checkconst updatedAtTimestamps = data.data.map(component => new Date(component.updated_at).getTime());checkStatusAndSetup(updatedAtTimestamps);setInterval(() => {checkStatusAndSetup(updatedAtTimestamps); // Regularly check the status every minuteupdateOngoingTime();}, 60000);ongoingTextElement.style.marginTop = '20px';textContainer.appendChild(ongoingTextElement);// Updates linkconst updatesLink = document.createElement('a');updatesLink.href = statusWidget.banner.statusPageUrl;updatesLink.textContent = 'View latest updates';updatesLink.style.color = 'white';updatesLink.style.display = 'block';updatesLink.style.marginTop = '20px';updatesLink.style.textDecoration = 'underline';textContainer.appendChild(updatesLink);contentContainer.appendChild(iconContainer);contentContainer.appendChild(textContainer);bannerContainer.appendChild(contentContainer);// Set the banner positionswitch (statusWidget.banner.position) {case 'bottom-left':bannerContainer.style.bottom = '0';bannerContainer.style.left = '0';break;case 'bottom-right':bannerContainer.style.bottom = '0';bannerContainer.style.right = '0';break;case 'top-left':bannerContainer.style.top = '0';bannerContainer.style.left = '0';break;case 'top-right':bannerContainer.style.top = '0';bannerContainer.style.right = '0';break;default:bannerContainer.style.bottom = '0';bannerContainer.style.left = '0';}document.body.appendChild(bannerContainer);}}).catch(error => {console.error('Error fetching system status:', error);});});Search for:HomeZonesRegistrarsAccredited RegistrarsRegistrar onboardingAvailable Products & NamespacesPremium Domain NamesDNSSECContact & Balance CheckCIPCTechnicalEPP Explained.ZA SLDsOT&E CriteriaLogging In/OutContact OperationsDomain OperationsCustom ExtensionsEPP Contact ExtensionsEPP Domain ExtensionsConstraintsContact ConstraintsDomain ConstraintsMessage PollingSSL RequirementsLegacy Transfer ProcedureStatus MappingNamespace ComparisonResources.ZA SLD PoliciesFAQNewsWHOISContact.dvcs_smooth_secondary_menu .et_pb_menu__wrap {justify-content: right !important;}/* desktop menu */.et_pb_menu.dvcs_free_header_5 .et_pb_menu__menu {flex: 1 0 auto !important;justify-content: center !important;}/* mobile menu */.et_pb_menu.dvcs_free_header_5 .et_mobile_menu {max-height: 75vh;overflow-y: auto;}@media all and (max-width: 980px){.et_pb_menu.dvcs_free_header_5 .et_mobile_menu {border-radius: 4px;width: 300px !important;right: 0;left: auto;top: calc(100% + 18px) !important;}}@media all and (max-width: 768px){.et_pb_menu.dvcs_free_header_5 .et_mobile_menu {width: calc(100% + 160px) !important;left: 0;right: auto;margin-left: -15px !important;}/* mobile menu links */.dvcs_free_header_5 .et_mobile_menu a {border-left: 5px solid #2c3333;margin-bottom: 4px;border-radius: 5px;}}/* mobile menu first link */.dvcs_free_header_5 .et_mobile_menu > li:first-child > a {border-top: 1px solid rgba(0,0,0,.03) !important;}/* open mobile menu icon */.et-db #et-boc .et-l .dvcs_free_header_5 .opened .mobile_menu_bar:before {content: "d";}/* mobile menu parent menu items */.dvcs_free_header_5 .et_mobile_menu .menu-item-has-children > a {background-color: transparent;}/*** SMOOTH SUBMENUS EFFECT CSS.* @author Ivan Chiurcci* @site https://www.divicio.us/tutorials/menu/create-the-smooth-submenus-effect-for-divi-desktop-menu/*//* Submenu background and arrow *//* hide submenu */.dvcs_smooth_submenus .et_pb_menu__menu nav .et-menu > li > ul {animation: none;opacity: 0;transition: opacity 0.4s ease-in !important;}/* visible submenu */.dvcs-item-enter > .sub-menu {display: block;}.dvcs_smooth_submenus .et_pb_menu__menu nav .et-menu > .dvcs-item-enter-active > .sub-menu,.dvcs_smooth_submenus .dvcs-item-enter-active > .sub-menu {opacity: 1;}/* submenu background wrapper */.dvcs_submenu_bg_wrapper {position: absolute;z-index: 1;pointer-events: none;}.dvcs_submenu_bg_wrapper.dvcs-animatable {/* transition: transform 0.2s; */transition: all 0.4s ease;transform-origin: 50% 0;}.dvcs_submenu_bg_wrapper:not(.dvcs-animatable) {pointer-events: none;}/* submenu background */.dvcs_free_header_5 .dvcs_submenu_bg {width: 150px;height: 100px;position: absolute;left: 50%;transform: translateX(-50%);background: #ffffff;border-radius: 5px;box-shadow: 0px 2px 18px 0px rgb(0 0 0 / 10%);transition: all 0.2s, opacity 0.1s, transform 0.1s;transform-origin: 50% 0;display: flex;justify-content: center;opacity: 0;border-top: 5px solid #2c3333;}.dvcs_submenu_bg.dvcs_open {opacity: 1;}/* submenu background arrow */.dvcs_free_header_5 .dvcs_arrow {position: absolute;width: 7px;height: 7px;display: block;background: #2c3333;transform: translateY(-50%) rotate(45deg);pointer-events: none;top: -5px;}/* END Submenu background and arrow *//* Menus CSS *//* first level submenus */.dvcs_smooth_submenus .et_pb_menu__menu nav .et-menu > li > ul {left: 50%;transform: translate(-50%, 0) translateZ(0);background-color: transparent !important;}/* remove submenu box-shadow */.dvcs_smooth_submenus .nav li ul {box-shadow: none !important;}/* remove parent item arrow */.dvcs_smooth_submenus .et-menu > li.menu-item-has-children > a:after {content: "" !important;}/* parent item link */.dvcs_smooth_submenus .et-menu > li > a {padding-left: 10px !important;padding-right: 10px !important;}/* END Menus CSS *//* END SMOOTH SUBMENUS EFFECT CSS *//*** SMOOTH SUBMENUS EFFECT FOR DIVI DESKTOP MENU.* @author Ivan Chiurcci* @site https://www.divicio.us/tutorials/menu/create-the-smooth-submenus-effect-for-divi-desktop-menu/*/window.dvcsSmoothSubmenus = {/*** Create the submenu background element* and insert it into the menu element before element.** @param {HTMLelement} nav Menu element.* @param {HTMLelement} ul Menu element.*/createSubmenuBg: function(nav, ul){// create submenu background elementlet submenuBgWrapper = document.createElement("div"),submenuBg = document.createElement("div"),arrow = document.createElement("span");// add CSS classessubmenuBgWrapper.classList.add("dvcs_submenu_bg_wrapper");submenuBg.classList.add("dvcs_submenu_bg");arrow.classList.add("dvcs_arrow");// insert into menunav.insertBefore(submenuBgWrapper, ul);submenuBgWrapper.appendChild(submenuBg);submenuBg.appendChild(arrow);},/*** Handle the submenu bakcground on menu item mouse enter.** Shows the submenu background when the parent menu item is hovered over* and updates it's coordinates and size values accordingly.** @param {HTMLelement} item The menu item that is currently hovered over.* @param {HTMLelement} nav Menu element.* @param {HTMLelement} submenuBgWrapper Submenu background wrapper.* @param {HTMLelement} submenuBg Submenu background.*/handleEnter: function(item, nav, submenuBgWrapper, submenuBg){// coordinates of the current submenu and menu elementconst submenu = item.querySelector('.sub-menu'),submenuRect = submenu.getBoundingClientRect(),navRect = nav.getBoundingClientRect();// submenu background valuesconst bg = {height: submenuRect.height,width: submenuRect.width,top: submenuRect.top - navRect.top,left: submenuRect.left - navRect.left};// add CSS classesitem.classList.add('dvcs-item-enter');setTimeout(() => item.classList.contains('dvcs-item-enter') && item.classList.add('dvcs-item-enter-active'), 150);submenuBg.classList.add('dvcs_open');// set the submenu wrapper background propertiessubmenuBgWrapper.style.setProperty('transform', `translate(${bg.left}px, ${bg.top}px)`);submenuBgWrapper.style.setProperty('width', `${bg.width}px`);submenuBgWrapper.style.setProperty('height', `${bg.height}px`);// set the submenu background propertiessubmenuBg.style.setProperty('width', `${bg.width}px`);submenuBg.style.setProperty('height', `${bg.height}px`);},/*** Handle the submenu background hiding.** Hides the submenu background when the mouse leaves* the parent menu item.** @param {HTMLelement} item The menu item.* @param {HTMLelement} submenuBg Submenu background.*/handleLeave: function(item, submenuBg){// remove CSS classesitem.classList.remove('dvcs-item-enter', 'dvcs-item-enter-active');submenuBg.classList.remove('dvcs_open');// remove the submenu background propertiessubmenuBg.style.setProperty('width', '');submenuBg.style.setProperty('height', '');},/*** Handle the submenu background when mouse enters the menu element.** Enables transition for the submenu background to ensure it* moves smoothly in between the adjacent parent menu items.** @param {HTMLelement} submenuBgWrapper Submenu background wrapper.*/handleEnterUl: function(submenuBgWrapper){setTimeout(function(){submenuBgWrapper.classList.add('dvcs-animatable')}, 150);},/*** Handle the submenu background when mouse leaves the menu element.** Disables transition for the submenu background and* resets it's size.** @param {HTMLelement} submenuBgWrapper Submenu background wrapper.* @param {HTMLelement} submenuBg Submenu background.*/handleLeaveUl: function(submenuBgWrapper, submenuBg){submenuBgWrapper.classList.remove('dvcs-animatable');// remove the submenu background propertiessubmenuBg.style.setProperty('width', '');submenuBg.style.setProperty('height', '');},/*** Handle the "smooth submenus" effect.** @param {string} menuSelector Menu selector, CSS ID or class. Default: '#et-top-navigation'* @param {string} navSelector Menu element selector, CSS ID or class. Default: '#top-menu-nav'* @param {string} ulSelector Menu element selector, CSS ID or class. Default: '#top-menu'*/effect: function(menuSelector = '#et-top-navigation', navSelector = '#top-menu-nav', ulSelector = '#top-menu'){// select the menuslet menus = document.querySelectorAll(menuSelector); // EXPERIMENTALmenus.forEach(menu => {if(!menu){return}// select the menu and elementslet nav = menu.querySelector(navSelector),ul = nav.querySelector(ulSelector);// insert the submenu background element(with arrow) into the elementthis.createSubmenuBg(nav, ul);const items = nav.querySelectorAll(`${ulSelector} > li.menu-item-has-children`),submenuBgWrapper = nav.querySelector('.dvcs_submenu_bg_wrapper'),submenuBg = nav.querySelector('.dvcs_submenu_bg');// handle element mouse enterul.addEventListener('mouseenter', () => this.handleEnterUl(submenuBgWrapper));ul.addEventListener('touchstart', () => this.handleEnterUl(submenuBgWrapper)); // ???// handle menu items mouse enteritems.forEach(item => {item.addEventListener('mouseenter', () => {this.handleEnter(item, nav, submenuBgWrapper, submenuBg)})});items.forEach(item => { // ???item.addEventListener('touchstart', () => {this.handleEnter(item, nav, submenuBgWrapper, submenuBg)})});// handle menu items mouse leaveitems.forEach(item => {item.addEventListener('mouseleave', () => {this.handleLeave(item, submenuBg)})});// handle element mouse leaveul.addEventListener('mouseleave', () => this.handleLeaveUl(submenuBgWrapper, submenuBg));});}}document.addEventListener('DOMContentLoaded', function(){// Divi Menu(or Fullwidth Menu) moduledvcsSmoothSubmenus.effect('.dvcs_smooth_submenus', '.et-menu-nav', '.et-menu');})/*** Collapse Divi mobile menu submenus CSS.* @author Ivan Chiurcci* @site https://www.divicio.us/tutorials/how-to-collapse-divi-menu-module-submenus-and-keep-parent-links-clickable-on-mobile-devices/*//* START: Collapse Divi Menu Module Submenus and Keep Parent Items Clickable on Mobile *//* Parent menu item */.et_pb_module .et_mobile_menu .menu-item-has-children.clickable,.et_pb_module .et_mobile_menu .menu-item-has-children > a {position: relative;}/* Parent menu item icon */.et_pb_module .et_mobile_menu .menu-item-has-children:not(.clickable) > a:after,.et_pb_module .et_mobile_menu .menu-item-has-children.clickable > span.parent_icon:after {font-family: "ETmodules";text-align: center;speak: none;font-weight: normal;font-variant: normal;text-transform: none;-webkit-font-smoothing: antialiased;font-size: 16px;}/* Disabled parent menu item icon positioning */.et_pb_module .et_mobile_menu .menu-item-has-children:not(.clickable) > a:after {position: absolute;top: 13px;right: 10px;}/* Clickable parent menu item icon */.et_pb_module .et_mobile_menu .menu-item-has-children.clickable > span.parent_icon {display: grid;grid-template-rows: 1fr;grid-template-columns: 1fr;align-items: center;position: absolute;width: 46px;height: 46px;color: #120b75;background: rgba(0, 0, 0, 0);right: 0;top: 0;z-index: 9;}/* Collapsed submenu parent menu item icon */.et_pb_module .et_mobile_menu .menu-item-has-children:not(.clickable) > a:after,.et_pb_module .et_mobile_menu .menu-item-has-children.clickable > span.parent_icon:after {content: "#";}/* Expanded submenu parent menu item icon */.et_pb_module .et_mobile_menu .menu-item-has-children:not(.clickable).visible > a:after,.et_pb_module .et_mobile_menu .menu-item-has-children.clickable.visible > span.parent_icon:after {content: """;}/* Hide submenu by default */.et_pb_module .et_mobile_menu ul.sub-menu,.et-db #et-boc .et-l .et_pb_menu .et_mobile_menu > ul.sub-menu,.et-db #et-boc .et-l .et_pb_fullwidth_menu .et_mobile_menu > ul.sub-menu {display: none !important;visibility: hidden !important;}/* Show submenu */.et_pb_module .et_mobile_menu .visible > ul.sub-menu,.et-db #et-boc .et-l .et_pb_menu .et_mobile_menu .visible > ul.sub-menu,.et-db #et-boc .et-l .et_pb_fullwidth_menu .et_mobile_menu .visible > ul.sub-menu {display: block !important;visibility: visible !important;}/* END: Collapse Divi Menu Module Submenus and Keep Parent Items Clickable on Mobile */(function($) {/*** Collapse Divi mobile menu submenus.** Works for both the Menu and the Fullwidth Menu modules.* The parent item links can be either disabled or clickable.** @author Ivan Chiurcci* @site https://www.divicio.us/tutorials/how-to-collapse-divi-menu-module-submenus-and-keep-parent-links-clickable-on-mobile-devices/** @param bool parentClickable Pass true to keep the parent menu item links clickable. Default: false.*/function dvcs_collapse_menu_module_submenus_on_mobile(parentClickable = false) {// Mobile menulet $menu = $('.et_pb_module .et_mobile_menu');// Iterate the mobile menu links$menu.find('a').each(function() {// Menu hamburger iconlet $menu_icon = $(this).parents('.mobile_nav').find('.mobile_menu_bar');// Remove click event handlers from the link$(this).off('click');// If the menu item DOESN'T HAVE submenusif( ! $(this).siblings('.sub-menu').length ) {// Close the mobile menu on link click$(this).on('click', (e) => $menu_icon.trigger('click'));} else {// If parent items links are DISABLEDif( ! parentClickable ){// Replace the URL with the # symbol$(this).attr('href', '#');// Open/close the submenu on link click$(this).on('click', (e) => toggle_visible(e, $(this).parent()));} else {// Add the "clickable" class to the parent( tag)$(this).parent().addClass('clickable')// Prepend the icon to parent.prepend('')// Open/close the submenu on icon click.find('.parent_icon').on('click', (e) => toggle_visible(e, $(this).parent()));// Link click$(this).on('click', function(e){// Toggle the submenu if the link doesn't have a URL or anchorif ( $(this).attr('href') === '#' ) {toggle_visible(e, $(this).parent());} else {// Close the mobile menu$menu_icon.trigger('click');}});}}});/*** Toggles the 'visible' class on passed element.*/const toggle_visible = (e, elem) => {e.preventDefault();elem.toggleClass('visible');}}$(function() {/*** Call the function with a delay to allow* the mobile menu(s) be ready first.** To keep parent links clickable pass true (boolean) as argument.*/setTimeout(function() {dvcs_collapse_menu_module_submenus_on_mobile(false);}, 700);});})(jQuery);Login Secure, Reliable, South African
+Find out moreco.zaorg.zanet.zaweb.zaAbout Us
+
+ZA Registry Consortium (ZARC) is the contracted Registry Operator for South Africa’s second-level domains (SLDs): CO.ZA, ORG.ZA, NET.ZA, and WEB.ZA.
+
+As a proudly South African, homegrown initiative, we are dedicated to providing innovative and internationally benchmarked domain name solutions that drive the security, stability, and growth of South Africa’s digital landscape.
+Backed by industry expertise, ZARC ensures the seamless operation of .ZA domains through technical excellence, robust infrastructure, and a commitment to cybersecurity. Our experienced team of registry professionals, technicians, and partners work together to uphold the integrity of South Africa’s domain space.
+OUR MISSION – ZARC IS COMMITED TO:Ensuring Security & Reliability – We implement world-class standards to safeguard domain ownership and prevent domain abuse.Driving Local Innovation – As a South African entity, we continuously evolve our offerings to meet the needs of businesses and individuals in the digital economy.Supporting the Internet Community – Through training, education, and strategic partnerships, we empower stakeholders with the knowledge and tools to navigate the domain name industry.More About UsStay connected with usRegistrars
+View the full list of accredited registrars.Take me thereWHOIS
+Querying domain names and IP addresses.View Port 43 WHOISTechnical
+Choose your zones, start your journey with ZARC.Technical OT&EFAQ
+Provides quick answers to common questions.View FAQsCELEbrating 30 years of co.za
+
+In 2024, ZARC proudly celebrates 30 years of CO.ZA, a milestone that highlights the resilience, trust, and growth of South Africa’s online presence. As we look to the future, we remain focused on fostering a secure and inclusive internet space for all.Become a RegistrarArticles
+Building Trust Through Data: How .ZA Turned Raw Logs into Insights
+Nov 5, 2025 | Uncategorized
+At ZARC, the registry operator for South Africa’s .ZA commercial second-level domains, data isn’t just an operational by-product — it’s...read moreUnderstanding DNSSEC: Strengthening Trust in the Internet
+Oct 27, 2025 | Articles
+The Domain Name System (DNS) is often described as the “phonebook of the Internet.” It translates human-friendly domain names, like...read moreMandela Day 2025
+Aug 15, 2025 | Articles
+Every year on 18 July, South Africans and the world pause to honour the life and legacy of Nelson Mandela. Mandela Day is a global call to...read moreRead all articlesStatistics
+Vertical Domain Movement (growth/decline) of the SRSfetch('proxy-vertical.php').then(response => response.json()).then(data => {// Format date categories as "MMM YYYY" (e.g., "Apr 2024")const categories = data.map(item => {const d = new Date(item.date);return d.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });});// Convert the values to integersconst createCounts = data.map(item => parseInt(item.create_count, 10));const deleteCounts = data.map(item => parseInt(item.delete_count, 10));const movements = data.map(item => parseInt(item.movement, 10));// ApexCharts options for a mixed chartvar options = {chart: {height: 426,type: 'line',stacked: false,toolbar: {show: false // disables the zoom and export buttons}},title: {align: 'center',style: {fontSize: '16px',fontWeight: 'bold',color: '#373d3f'}},series: [{ name: 'Creates', type: 'line', data: createCounts },{ name: 'Deletes', type: 'line', data: deleteCounts },{ name: 'Net Movement', type: 'column', data: movements }],xaxis: {categories: categories,labels: {rotate: -45,rotateAlways: true,style: {fontSize: '12px'}}},colors: ['#4c956c', '#e63946', '#193e73'],stroke: {width: [4, 4, 0],curve: 'smooth'},markers: {size: [5, 5, 0]},tooltip: {shared: true,intersect: false},legend: {position: 'bottom'},plotOptions: {bar: {columnWidth: '50%',borderRadius: 4, // Rounded corner radiusborderRadiusApplication: 'end' // Apply the rounding only to the "end" side of the bar}}};// Render the chart in the specified divvar chart = new ApexCharts(document.querySelector("#verticalMovementChart"), options);chart.render();}).catch(error => console.error('Error fetching data:', error));Horizontal Movement (Transfers) in the SRS// Fetch the JSON data from your proxy file (adjust the URL/path if needed)fetch('proxy-horizontal.php').then(response => response.json()).then(data => {// Format x-axis labels as "Apr 2024"const categories = data.map(item => {const d = new Date(item.date);return d.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });});// The in/out counts are identical, so we only use one value for the chartconst transfers = data.map(item => parseInt(item.transfer_in_count, 10));// Configure ApexCharts optionsvar options = {chart: {height: 426,type: 'bar'},title: {align: 'center',style: {fontSize: '16px',fontWeight: 'bold',color: '#373d3f'}},subtitle: {align: 'center'},series: [{name: 'Transfers',data: transfers}],xaxis: {categories: categories,labels: {rotate: -45,rotateAlways: true,style: {fontSize: '12px'}}},colors: ['#4c956c'], // Green color for the barsplotOptions: {bar: {columnWidth: '50%',borderRadius: 4, // Rounded cornersborderRadiusApplication: 'end' // Only applied at the top (end) of the bar}},dataLabels: {enabled: false // Disable data labels on each bar},tooltip: {shared: true,intersect: false},legend: {position: 'bottom'}};// Render the chart in the specified divvar chart = new ApexCharts(document.querySelector("#transfersChart"), options);chart.render();}).catch(error => console.error('Error fetching data:', error));SRS Domain Count Over Time// Fetch the domain count data from your proxy filefetch('proxy-domain-count.php').then(response => response.json()).then(data => {// Convert date strings to user-friendly month/year labels (e.g., "May 2024")const categories = data.map(item => {const d = new Date(item.date);return d.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });});// Convert string sums to integersconst domainCounts = data.map(item => parseInt(item.sum, 10));// Configure ApexChartsvar options = {chart: {height: 426,type: 'area',toolbar: {show: false // disables the zoom and export buttons}},title: {align: 'left',style: {fontSize: '16px',fontWeight: 'bold',color: '#373d3f'}},subtitle: {align: 'left'},series: [{name: "Domain Count",data: domainCounts}],xaxis: {categories: categories,labels: {rotate: -45,rotateAlways: true,style: {fontSize: '12px'}}},yaxis: {labels: {formatter: val => val.toLocaleString() // e.g., 1,400,092}},colors: ['#193e73'],stroke: {curve: 'smooth',width: 3},fill: {type: 'gradient',gradient: {shadeIntensity: 1,gradientToColors: ['#193e73'], // same base color or vary as neededinverseColors: false,opacityFrom: 0.4,opacityTo: 0,stops: [0, 90, 100]}},dataLabels: {enabled: false},tooltip: {shared: true,intersect: false,y: {formatter: val => val.toLocaleString()}},legend: {position: 'bottom'}};// Render the chart inside the #domainCountChart divvar chart = new ApexCharts(document.querySelector("#domainCountChart"), options);chart.render();}).catch(error => console.error('Error fetching domain count data:', error));See all statistics
+ZARC will operate with skeletal staff from 24 Dec 2025 to 5 Jan 2026. Essential support remains available via support@registry.net.za.Wishing you a safe and joyful festive season! 🎄Email Support
+ZA Registry Consortium (ZARC) is the contracted registry operator for South Africa’s commercial second-level domains (SLDs): CO.ZA, ORG.ZA, NET.ZA and WEB.ZA.
+We maintain a proud association with the CO.ZA domain space, having been involved in its establishment, promotion and administration since 1995, supporting the growth of South Africa’s online presence for nearly three decadesRead our FAQsFollowFollowFollowFollowFollowFollow
+PAIA INFO | TERMSNEWSLETTER
+
+Success!
+First NameLast NameEmailSubscribeCONTACT US
+
+ADDRESSZA Registry Consortium (Pty) Ltd,COZA House, Corporate Park South,Gazelle Close, Midrand
+TEL+27 11 314 0077LEGAL LINKS
+
+.ZA SLD Policies & Procedures →
+Registry Lock Service →
+Data Protection – Privacy Policy →
+Data Protection – Consent Form →
+Complaints Policy →
+Takedown Policy →
+Registrant Agreement Mandatory Terms
+Domain Name Dispute Resolution →ZarcAccreditations & Affiliations
+{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/Divi\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}(function() {var file = ["https:\/\/zarc.web.za\/wp-content\/et-cache\/43\/et-divi-dynamic-tb-1011-tb-91-43-late.css"];var handle = document.getElementById('divi-style-inline-inline-css');var location = handle.parentNode;if (0===document.querySelectorAll('link[href="' + file + '"]').length) {var link = document.createElement('link');link.rel = 'stylesheet';link.id = 'et-dynamic-late-css';link.href = file;location.insertBefore(link, handle.nextSibling);}})();/* *//* *//* *//* */
\ No newline at end of file
diff --git a/tests/fixtures/sex.za.net.txt b/tests/fixtures/sex.za.net.txt
new file mode 100644
index 00000000..9837ef3c
--- /dev/null
+++ b/tests/fixtures/sex.za.net.txt
@@ -0,0 +1,54 @@
+ZA NiC
+
+
+The results of your query:
+
+
+Domain Name : sex.za.net
+
+Registered for : Cyberhost Internet
+42c Goldbourne St.
+Kenilworth
+7700
+ZA
+
+Administrative Contact : Ian Ward <admin@cyberhost.co.za>
+Cyberhost Internet
+42c Goldbourne St.
+Kenilworth
+WC
+7700
+ZA
++27 21 7628512
++27 12 7628683
+
+Technical Contact : Ian Ward <dns@cyberhost.co.za>
+Cyberhost Internet
+42c Goldbourne St.
+Kenilworth
+WC
+7700
+ZA
++27 21 7628512
++27 12 7628683
+
+Record Created : Tue Sep 15 16:56:24 BST 1998
+Record Last Updated : Tue Sep 15 16:56:24 BST 1998
+
+Database Last Updated : Sun Nov 30 06:00:07 UTC 2025
+
+Domain Name Servers listed in order:
+
+cyberhost.co.za
+dinkytoy.cyberhost.co.za
+
+
+The ZA NiC whois service contains ONLY information relating to the registration
+or availability of Internet domain names under the ZA.NET and ZA.ORG namespace.
+Online registration of ZA NiC domains can be made using the automated tool
+available at http://www.za.net/
+
+
+To perform another whois lookup, enter the domain name below:
+
+©1998-2002 ZA NiC
\ No newline at end of file
diff --git a/tests/fixtures/smile.coop.txt b/tests/fixtures/smile.coop.txt
new file mode 100644
index 00000000..f7779f4e
--- /dev/null
+++ b/tests/fixtures/smile.coop.txt
@@ -0,0 +1,58 @@
+Domain Name: smile.coop
+Registry Domain ID: D7878757-CNIC
+Registrar WHOIS Server: whois.encirca.com
+Registrar URL: http://www.encirca.com/html/whoisaccuracy.shtml
+Updated Date: 2024-12-28T20:17:37.675Z
+Creation Date: 2001-07-10T10:21:30.000Z
+Registry Expiry Date: 2026-01-30T23:59:59.000Z
+Registrar: EnCirca, Inc.
+Registrar IANA ID: 455
+Registrar Abuse Contact Email: abuse-2024-4@encirca.com
+Registrar Abuse Contact Phone: +01.7819429975
+Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+Registry Registrant ID: REDACTED FOR PRIVACY
+Registrant Name: REDACTED FOR PRIVACY
+Registrant Organization: The Co-operative Bank plc
+Registrant Street: REDACTED FOR PRIVACY
+Registrant City: REDACTED FOR PRIVACY
+Registrant State/Province: Manchester, ENG
+Registrant Postal Code: REDACTED FOR PRIVACY
+Registrant Country: GB
+Registrant Phone: REDACTED FOR PRIVACY
+Registrant Fax: REDACTED FOR PRIVACY
+Registrant Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
+Name Server: ns1.netnames.net
+Name Server: ns2.netnames.net
+DNSSEC: unsigned
+URL of the ICANN RDDS Inaccuracy Complaint Form: https://icann.org/wicf
+
+>>> Last update of WHOIS database: 2025-11-30T17:10:02.082Z <<<
+
+For more information on domain status codes, please visit https://icann.org/epp
+
+The WHOIS information provided in this page has been redacted
+in compliance with ICANN's Temporary Specification for gTLD
+Registration Data.
+
+The data in this record is provided by Tucows Registry for informational
+purposes only, and it does not guarantee its accuracy. Tucows Registry is
+authoritative for whois information in top-level domains it operates
+under contract with the Internet Corporation for Assigned Names and
+Numbers. Whois information from other top-level domains is provided by
+a third-party under license to Tucows Registry.
+
+This service is intended only for query-based access. By using this
+service, you agree that you will use any data presented only for lawful
+purposes and that, under no circumstances will you use (a) data
+acquired for the purpose of allowing, enabling, or otherwise supporting
+the transmission by e-mail, telephone, facsimile or other
+communications mechanism of mass unsolicited, commercial advertising
+or solicitations to entities other than your existing customers; or
+(b) this service to enable high volume, automated, electronic processes
+that send queries or data to the systems of any Registrar or any
+Registry except as reasonably necessary to register domain names or
+modify existing domain name registrations.
+
+Tucows Registry reserves the right to modify these terms at any time. By
+submitting this query, you agree to abide by this policy. All rights
+reserved.
\ No newline at end of file
diff --git a/tests/fixtures/surf.ws.txt b/tests/fixtures/surf.ws.txt
new file mode 100644
index 00000000..eb182bea
--- /dev/null
+++ b/tests/fixtures/surf.ws.txt
@@ -0,0 +1,19 @@
+Domain Name: SURF.WS
+Domain ID: 67ED55F393691EC6E050010AAC01EAB3-GDI
+WHOIS Server: whois.publicdomainregistry.com
+Registrar URL: http://PublicDomainRegistry.com/whois
+Updated Date: 2025-04-20T12:06:30Z
+Creation Date: 2018-04-19T09:40:58Z
+Registrar Registration Expiration Date: 2026-04-19T09:40:58Z
+Registrar: PDR Ltd.
+Registrar IANA ID: 303
+Registrar Abuse Contact Email: whoisabuse@publicdomainregistry.com
+Registrar Abuse Contact Phone: 832-295-1535
+Domain Status: clientTransferProhibited
+Name Server: ns5.mydnspt.net
+Name Server: ns6.mydnspt.net
+DNSSEC: unsigned
+URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/
+>>> Last update of WHOIS database: 2025-11-30T17:09:17Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
diff --git a/tests/fixtures/tapuz.co.il.txt b/tests/fixtures/tapuz.co.il.txt
new file mode 100644
index 00000000..e0607837
--- /dev/null
+++ b/tests/fixtures/tapuz.co.il.txt
@@ -0,0 +1,67 @@
+
+% The data in the WHOIS database of the .il registry is provided
+% by ISOC-IL for information purposes, and to assist persons in
+% obtaining information about or related to a domain name
+% registration record. ISOC-IL does not guarantee its accuracy.
+% By submitting a WHOIS query, you agree that you will use this
+% Data only for lawful purposes and that, under no circumstances
+% will you use this Data to: (1) allow, enable, or otherwise
+% support the transmission of mass unsolicited, commercial
+% advertising or solicitations via e-mail (spam);
+% or (2) enable high volume, automated, electronic processes that
+% apply to ISOC-IL (or its systems).
+% ISOC-IL reserves the right to modify these terms at any time.
+% By submitting this query, you agree to abide by this policy.
+
+query: tapuz.co.il
+
+reg-name: tapuz
+domain: tapuz.co.il
+
+descr: Tapuz Media ltd.
+descr: Yad Haruzim
+descr: Tel Aviv
+descr: 6770005
+descr: Israel
+phone: +972 52 468886
+e-mail: avishai AT bizportal.co.il
+admin-c: DT-AO4765-IL
+tech-c: DT-SR6267-IL
+zone-c: DT-SR6267-IL
+nserver: danica.ns.cloudflare.com
+nserver: jake.ns.cloudflare.com
+assigned: 13-09-2021
+validity: 13-09-2026
+DNSSEC: unsigned
+status: Transfer Locked
+changed: domain-registrar AT isoc.org.il 20210913 (Assigned)
+changed: domain-registrar AT isoc.org.il 20220829 (Changed)
+changed: domain-registrar AT isoc.org.il 20230914 (Changed)
+changed: domain-registrar AT isoc.org.il 20240908 (Changed)
+
+person: Avishai Ovadia
+address Tapuz Media ltd.
+address Yad Haruzim
+address Tel Aviv
+address 6770005
+address Israel
+phone: +972 52 468886
+e-mail: avishai AT bizportal.co.il
+nic-hdl: DT-AO4765-IL
+changed: domain-registrar AT isoc.org.il 20210913
+
+person: Sergey Rishal
+address Tapuz People Ltd
+address 30Ben Gurion
+address Ramat Gan IL
+address 52573
+address Israel
+phone: +972 3 6109608
+e-mail: sr AT tapuz.co.il
+nic-hdl: DT-SR6267-IL
+changed: Managing Registrar 20070930
+
+registrar name: Domain The Net Technologies Ltd
+registrar info: https://www.domainthenet.com
+
+% Rights to the data above are restricted by copyright.
\ No newline at end of file
diff --git a/tests/fixtures/telstra.com.au.txt b/tests/fixtures/telstra.com.au.txt
new file mode 100644
index 00000000..72057487
--- /dev/null
+++ b/tests/fixtures/telstra.com.au.txt
@@ -0,0 +1,55 @@
+Domain Name: telstra.com.au
+Registry Domain ID: c7c5840070eb47af81a3e3a836b8baa2-AU
+Registrar WHOIS Server: whois.auda.org.au
+Registrar URL: https://www.cscdigitalbrand.services
+Last Modified: 2025-05-10T05:06:12Z
+Registrar Name: Corporation Service Company (Aust) Pty Ltd
+Registrar Abuse Contact Email: domainabuse@cscglobal.com
+Registrar Abuse Contact Phone: +1.8887802723
+Reseller Name:
+Status: clientDeleteProhibited https://identitydigital.au/whois-status-codes#clientDeleteProhibited
+Status: serverDeleteProhibited https://identitydigital.au/whois-status-codes#serverDeleteProhibited
+Status Reason: Registry Lock
+Status: serverRenewProhibited https://identitydigital.au/whois-status-codes#serverRenewProhibited
+Status Reason: Not Currently Eligible For Renewal
+Status: serverTransferProhibited https://identitydigital.au/whois-status-codes#serverTransferProhibited
+Status Reason: Registry Lock
+Status: serverUpdateProhibited https://identitydigital.au/whois-status-codes#serverUpdateProhibited
+Status Reason: Registry Lock
+Registrant Contact ID: 4e6d4d2d22e14e42afb6f7dd7964ec25-AU
+Registrant Contact Name: Domain Administrator
+Tech Contact ID: 4e6d4d2d22e14e42afb6f7dd7964ec25-AU
+Tech Contact Name: Domain Administrator
+Name Server: a1-185.akam.net
+Name Server: a11-66.akam.net
+Name Server: a18-64.akam.net
+Name Server: a2-65.akam.net
+Name Server: a28-66.akam.net
+Name Server: a3-65.akam.net
+Name Server: adns05.bigpond.com
+Name Server: adns06.bigpond.com
+DNSSEC: unsigned
+Registrant: Telstra Corporation Ltd
+Registrant ID: ABN 33051775556
+Eligibility Type: Company
+Eligibility ID: ABN 33051775556
+>>> Last update of WHOIS database: 2025-12-08T10:39:11Z <<<
+
+Identity Digital Australia Pty Ltd, for itself and on behalf of .au Domain Administration Limited (auDA), makes the WHOIS registration data directory service (WHOIS Service) available solely for the purposes of:
+
+(a) querying the availability of a domain name licence;
+
+(b) identifying the holder of a domain name licence; and/or
+
+(c) contacting the holder of a domain name licence in relation to that domain name and its use.
+
+The WHOIS Service must not be used for any other purpose (even if that purpose is lawful), including:
+
+(a) aggregating, collecting or compiling information from the WHOIS database, whether for personal or commercial purposes;
+
+(b) enabling the sending of unsolicited electronic communications; and / or
+
+(c) enabling high volume, automated, electronic processes that send queries or data to the systems of Afilias, any registrar, any domain name licence holder, or auDA.
+
+The WHOIS Service is provided for information purposes only. By using the WHOIS Service, you agree to be bound by these terms and conditions. The WHOIS Service is operated in
+accordance with the auDA WHOIS Policy (available at https://www.auda.org.au/policy/2014-07-whois-policy).
\ No newline at end of file
diff --git a/tests/fixtures/tucows.com.txt b/tests/fixtures/tucows.com.txt
new file mode 100644
index 00000000..f70e48e9
--- /dev/null
+++ b/tests/fixtures/tucows.com.txt
@@ -0,0 +1,56 @@
+ Domain Name: TUCOWS.COM
+ Registry Domain ID: 299060_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.tucows.com
+ Registrar URL: http://www.tucows.com
+ Updated Date: 2025-08-08T03:45:12Z
+ Creation Date: 1995-09-07T04:00:00Z
+ Registry Expiry Date: 2026-09-06T04:00:00Z
+ Registrar: Tucows Domains Inc.
+ Registrar IANA ID: 69
+ Registrar Abuse Contact Email: domainabuse@tucows.com
+ Registrar Abuse Contact Phone: +1.4165350123
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+ Name Server: NS1.TUCOWS.COM
+ Name Server: NS2.TUCOWS.COM
+ Name Server: NS3.TUCOWS.COM
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/urllog.net rrpproxy.net.txt b/tests/fixtures/urllog.net rrpproxy.net.txt
new file mode 100644
index 00000000..7bef2acb
--- /dev/null
+++ b/tests/fixtures/urllog.net rrpproxy.net.txt
@@ -0,0 +1,36 @@
+No match for domain "URLLOG.NET RRPPROXY.NET".
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/urllog.net.txt b/tests/fixtures/urllog.net.txt
new file mode 100644
index 00000000..246acf1b
--- /dev/null
+++ b/tests/fixtures/urllog.net.txt
@@ -0,0 +1,36 @@
+No match for domain "URLLOG.NET".
+>>> Last update of whois database: 2023-08-11T10:02:59Z <<<
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/venetacucine.co.il.txt b/tests/fixtures/venetacucine.co.il.txt
new file mode 100644
index 00000000..939542b6
--- /dev/null
+++ b/tests/fixtures/venetacucine.co.il.txt
@@ -0,0 +1,84 @@
+
+% The data in the WHOIS database of the .il registry is provided
+% by ISOC-IL for information purposes, and to assist persons in
+% obtaining information about or related to a domain name
+% registration record. ISOC-IL does not guarantee its accuracy.
+% By submitting a WHOIS query, you agree that you will use this
+% Data only for lawful purposes and that, under no circumstances
+% will you use this Data to: (1) allow, enable, or otherwise
+% support the transmission of mass unsolicited, commercial
+% advertising or solicitations via e-mail (spam);
+% or (2) enable high volume, automated, electronic processes that
+% apply to ISOC-IL (or its systems).
+% ISOC-IL reserves the right to modify these terms at any time.
+% By submitting this query, you agree to abide by this policy.
+
+query: venetacucine.co.il
+
+reg-name: venetacucine
+domain: venetacucine.co.il
+
+descr: Veneta Cucine S.p.a.
+descr: Via Paris Bordone, 84
+descr: Biancade di Roncade
+descr: 31056
+descr: Italy
+phone: +39 42 2847437
+fax-no: +39 42 2847561
+e-mail: domain.admins AT venetacucine.com
+admin-c: GC-RP7946-IL
+tech-c: GC-ST6359-IL
+zone-c: GC-SA13431-IL
+nserver: ns1.register.it
+nserver: ns2.register.it
+validity: 17-02-2024
+DNSSEC: unsigned
+status: Transfer Locked
+changed: domain-registrar AT isoc.org.il 20110217 (Assigned)
+changed: domain-registrar AT isoc.org.il 20161030 (Transferred)
+changed: domain-registrar AT isoc.org.il 20161101 (Changed)
+changed: domain-registrar AT isoc.org.il 20161101 (Changed)
+changed: domain-registrar AT isoc.org.il 20161101 (Changed)
+changed: domain-registrar AT isoc.org.il 20171017 (Transferred)
+changed: domain-registrar AT isoc.org.il 20171017 (Changed)
+
+person: Roberto Pellizzer
+address Veneta Cucine Spa
+address Via Paris Bordone, 84
+address Biancade di Roncade
+address 31056
+address Italy
+phone: +3 9 042284743
+fax-no: +3 9 042284756
+e-mail: domain.admins AT venetacucine.com
+nic-hdl: GC-RP7946-IL
+changed: Managing Registrar 20171017
+
+person: Support Technical
+address Registerit spa
+address via Zanchi 22
+address Bergamo
+address 24126
+address Italy
+phone: +3 9 353230300
+fax-no: +3 9 353230312
+e-mail: corporate.support AT register.it
+nic-hdl: GC-ST6359-IL
+changed: Managing Registrar 20171017
+
+person: Service Administrative
+address Registerit spa
+address via Zanchi 22
+address bergamo
+address 24126
+address Italy
+phone: +3 9 353230300
+fax-no: +3 9 353230312
+e-mail: administration AT register.it
+nic-hdl: GC-SA13431-IL
+changed: Managing Registrar 20171017
+
+registrar name: Communigal Communication Ltd
+registrar info: http://www.galcomm.co.il/
+
+% Rights to the data above are restricted by copyright.
\ No newline at end of file
diff --git a/tests/fixtures/vibrantdigitalfuture.uk.txt b/tests/fixtures/vibrantdigitalfuture.uk.txt
new file mode 100644
index 00000000..07c111f6
--- /dev/null
+++ b/tests/fixtures/vibrantdigitalfuture.uk.txt
@@ -0,0 +1,39 @@
+
+ Domain name:
+ vibrantdigitalfuture.uk
+
+ Data validation:
+ Nominet was not able to match the registrant's name and/or address against a 3rd party source on 24-Oct-2024
+
+ Registrar:
+ Namecheap, Inc. t/a Spaceship, Inc. [Tag = SPACESHIP]
+ URL: https://www.spaceship.com
+
+ Relevant dates:
+ Registered on: 24-Oct-2024
+ Expiry date: 24-Oct-2025
+ Last updated: 31-Oct-2025
+
+ Registration status:
+ Renewal required.
+ *** This registration has been SUSPENDED. ***
+
+ Name servers:
+ launch1.spaceship.net
+ launch2.spaceship.net
+
+ WHOIS lookup made at 17:09:10 30-Nov-2025
+
+--
+This WHOIS information is provided for free by Nominet UK the central registry
+for .uk domain names. This information and the .uk WHOIS are:
+
+ Copyright Nominet UK 1996 - 2025.
+
+You may not access the .uk WHOIS or use any data from it except as permitted
+by the terms of use available in full at https://www.nominet.uk/whoisterms,
+which includes restrictions on: (A) use of the data for advertising, or its
+repackaging, recompilation, redistribution or reuse (B) obscuring, removing
+or hiding any or all of this notice and (C) exceeding query rate or volume
+limits. The data is provided on an 'as-is' basis and may lag behind the
+register. Access may be withdrawn or restricted at any time.
\ No newline at end of file
diff --git a/tests/fixtures/who.int.txt b/tests/fixtures/who.int.txt
new file mode 100644
index 00000000..fba96dca
--- /dev/null
+++ b/tests/fixtures/who.int.txt
@@ -0,0 +1,41 @@
+% IANA WHOIS server
+% for more information on IANA, visit http://www.iana.org
+% This query returned 1 object
+
+domain: WHO.INT
+
+organisation: World Health Organization (WHO)
+address: 20, Avenue Appia
+address: Geneva 27
+address: Geneva Geneva CH-1211
+address: Switzerland
+
+contact: administrative
+name: WHO-IMT-ESS
+address: 20, Avenue Appia
+address: Geneva 27
+address: Geneva CH-1211
+address: Switzerland
+phone: +41 22 791 2411
+fax-no: +41 22 791 3111
+e-mail: hostmaster@who.int
+
+contact: technical
+name: WHO-IMT-ESS
+address: 20, Avenue Appia
+address: Geneva 27
+address: Geneva CH-1211
+address: Switzerland
+phone: +41 22 791 2411
+fax-no: +41 22 791 3111
+e-mail: hostmaster@who.int
+
+nserver: EXT-DNS-2.CERN.CH 192.91.245.85
+nserver: NS1.WPRO.WHO.INT 123.176.64.11
+nserver: WHQDNS1.WHO.INT 158.232.12.5
+nserver: WHQDNS2.WHO.INT 158.232.12.6
+nserver: WHQDNS3.WHO.INT 211.24.11.120
+
+created: 1998-06-05
+changed: 2020-12-10
+source: IANA
diff --git a/tests/fixtures/whois.travel.txt b/tests/fixtures/whois.travel.txt
new file mode 100644
index 00000000..0d9c8a41
--- /dev/null
+++ b/tests/fixtures/whois.travel.txt
@@ -0,0 +1,4 @@
+TLD is not supported.
+>>> Last update of WHOIS database: 2025-11-30T17:10:19Z <<<
+
+Terms of Use: Access to WHOIS information is provided to assist persons in determining the contents of a domain name registration record in the registry database. The data in this record is provided by Identity Digital or the Registry Operator for informational purposes only, and accuracy is not guaranteed. This service is intended only for query-based access. You agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data to (a) allow, enable, or otherwise support the transmission by e-mail, telephone, or facsimile of mass unsolicited, commercial advertising or solicitations to entities other than the data recipient's own existing customers; or (b) enable high volume, automated, electronic processes that send queries or data to the systems of Registry Operator, a Registrar, or Identity Digital except as reasonably necessary to register domain names or modify existing registrations. When using the Whois service, please consider the following: The Whois service is not a replacement for standard EPP commands to the SRS service. Whois is not considered authoritative for registered domain objects. The Whois service may be scheduled for downtime during production or OT&E maintenance periods. Queries to the Whois services are throttled. If too many queries are received from a single IP address within a specified time, the service will begin to reject further queries for a period of time to prevent disruption of Whois service access. Abuse of the Whois system through data mining is mitigated by detecting and limiting bulk query access from single sources. Where applicable, the presence of a [Non-Public Data] tag indicates that such data is not made publicly available due to applicable data privacy laws or requirements. Should you wish to contact the registrant, please refer to the Whois records available through the registrar URL listed above. Access to non-public data may be provided, upon request, where it can be reasonably confirmed that the requester holds a specific legitimate interest and a proper legal basis for accessing the withheld data. Access to this data provided by Identity Digital can be requested by submitting a request via the form found at https://www.identity.digital/about/policies/whois-layered-access/. The Registrar of Record identified in this output may have an RDDS service that can be queried for additional information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. Identity Digital Inc. and Registry Operator reserve the right to modify these terms at any time. By submitting this query, you agree to abide by this policy.
\ No newline at end of file
diff --git a/tests/fixtures/wildwestdomains.com.txt b/tests/fixtures/wildwestdomains.com.txt
new file mode 100644
index 00000000..10a770ca
--- /dev/null
+++ b/tests/fixtures/wildwestdomains.com.txt
@@ -0,0 +1,59 @@
+ Domain Name: WILDWESTDOMAINS.COM
+ Registry Domain ID: 33386184_DOMAIN_COM-VRSN
+ Registrar WHOIS Server: whois.wildwestdomains.com
+ Registrar URL: http://www.wildwestdomains.com
+ Updated Date: 2023-10-26T18:55:15Z
+ Creation Date: 2000-08-22T23:29:11Z
+ Registry Expiry Date: 2032-11-01T11:59:59Z
+ Registrar: Wild West Domains, LLC
+ Registrar IANA ID: 440
+ Registrar Abuse Contact Email: abuse@wildwestdomains.com
+ Registrar Abuse Contact Phone: 480-624-2505
+ Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
+ Domain Status: clientRenewProhibited https://icann.org/epp#clientRenewProhibited
+ Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
+ Domain Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited
+ Domain Status: serverDeleteProhibited https://icann.org/epp#serverDeleteProhibited
+ Domain Status: serverTransferProhibited https://icann.org/epp#serverTransferProhibited
+ Domain Status: serverUpdateProhibited https://icann.org/epp#serverUpdateProhibited
+ Name Server: CNS1.SECURESERVER.NET
+ Name Server: CNS2.SECURESERVER.NET
+ DNSSEC: unsigned
+ URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
+>>> Last update of whois database: 2025-11-30T17:09:31Z <<<
+
+For more information on Whois status codes, please visit https://icann.org/epp
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the expiration
+date of the domain name registrant's agreement with the sponsoring
+registrar. Users may consult the sponsoring registrar's Whois database to
+view the registrar's reported date of expiration for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign Global Registry
+Services' ("VeriSign") Whois database is provided by VeriSign for
+information purposes only, and to assist persons in obtaining information
+about or related to a domain name registration record. VeriSign does not
+guarantee its accuracy. By submitting a Whois query, you agree to abide
+by the following terms of use: You agree that you may use this Data only
+for lawful purposes and that under no circumstances will you use this Data
+to: (1) allow, enable, or otherwise support the transmission of mass
+unsolicited, commercial advertising or solicitations via e-mail, telephone,
+or facsimile; or (2) enable high volume, automated, electronic processes
+that apply to VeriSign (or its computer systems). The compilation,
+repackaging, dissemination or other use of this Data is expressly
+prohibited without the prior written consent of VeriSign. You agree not to
+use electronic processes that are automated and high-volume to access or
+query the Whois database except as reasonably necessary to register
+domain names or modify existing registrations. VeriSign reserves the right
+to restrict your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
+
+The Registry database contains ONLY .COM, .NET, .EDU domains and
+Registrars.
\ No newline at end of file
diff --git a/tests/fixtures/www.tv.txt b/tests/fixtures/www.tv.txt
new file mode 100644
index 00000000..f2600e09
--- /dev/null
+++ b/tests/fixtures/www.tv.txt
@@ -0,0 +1,34 @@
+No match for "WWW.TV".
+>>> Last update of WHOIS database: 2025-11-30T17:09:46Z <<<
+
+NOTICE: The expiration date displayed in this record is the date the
+registrar's sponsorship of the domain name registration in the registry is
+currently set to expire. This date does not necessarily reflect the
+expiration date of the domain name registrant's agreement with the
+sponsoring registrar. Users may consult the sponsoring registrar's
+Whois database to view the registrar's reported date of expiration
+for this registration.
+
+TERMS OF USE: You are not authorized to access or query our Whois
+database through the use of electronic processes that are high-volume and
+automated except as reasonably necessary to register domain names or
+modify existing registrations; the Data in VeriSign's ("VeriSign") Whois
+database is provided by VeriSign for information purposes only, and to
+assist persons in obtaining information about or related to a domain name
+registration record. VeriSign does not guarantee its accuracy.
+By submitting a Whois query, you agree to abide by the following terms of
+use: You agree that you may use this Data only for lawful purposes and that
+under no circumstances will you use this Data to: (1) allow, enable, or
+otherwise support the transmission of mass unsolicited, commercial
+advertising or solicitations via e-mail, telephone, or facsimile; or
+(2) enable high volume, automated, electronic processes that apply to
+VeriSign (or its computer systems). The compilation, repackaging,
+dissemination or other use of this Data is expressly prohibited without
+the prior written consent of VeriSign. You agree not to use electronic
+processes that are automated and high-volume to access or query the
+Whois database except as reasonably necessary to register domain names
+or modify existing registrations. VeriSign reserves the right to restrict
+your access to the Whois database in its sole discretion to ensure
+operational stability. VeriSign may restrict or terminate your access to the
+Whois database for failure to abide by these terms of use. VeriSign
+reserves the right to modify these terms at any time.
\ No newline at end of file
diff --git a/tests/fixtures/xn--c1ad6a.xn--p1ai.txt b/tests/fixtures/xn--c1ad6a.xn--p1ai.txt
new file mode 100644
index 00000000..04f7300d
--- /dev/null
+++ b/tests/fixtures/xn--c1ad6a.xn--p1ai.txt
@@ -0,0 +1,18 @@
+% TCI Whois Service. Terms of use:
+% https://tcinet.ru/documents/whois_ru_rf.pdf (in Russian)
+% https://tcinet.ru/documents/whois_su.pdf (in Russian)
+
+domain: XN--C1AD6A.XN--P1AI
+nserver: ns1.reg.ru.
+nserver: ns2.reg.ru.
+state: REGISTERED, DELEGATED, VERIFIED
+org: Domain name registrar REG.RU
+taxpayer-id: 7733568767
+registrar: REGRU-RF
+admin-contact: http://www.reg.ru/whois/admin_contact
+created: 2009-12-11T11:53:43Z
+paid-till: 2026-12-11T11:53:43Z
+free-date: 2027-01-11
+source: TCI
+
+Last updated on 2025-11-30T17:08:01Z
diff --git a/tests/fixtures/xn--p1ai.txt b/tests/fixtures/xn--p1ai.txt
new file mode 100644
index 00000000..a70c645e
--- /dev/null
+++ b/tests/fixtures/xn--p1ai.txt
@@ -0,0 +1,24 @@
+
+#
+# ARIN WHOIS data and services are subject to the Terms of Use
+# available at: https://www.arin.net/resources/registry/whois/tou/
+#
+# If you see inaccuracies in the results, please report at
+# https://www.arin.net/resources/registry/whois/inaccuracy_reporting/
+#
+# Copyright 1997-2025, American Registry for Internet Numbers, Ltd.
+#
+
+
+No match found for a xn--p1ai.
+
+
+#
+# ARIN WHOIS data and services are subject to the Terms of Use
+# available at: https://www.arin.net/resources/registry/whois/tou/
+#
+# If you see inaccuracies in the results, please report at
+# https://www.arin.net/resources/registry/whois/inaccuracy_reporting/
+#
+# Copyright 1997-2025, American Registry for Internet Numbers, Ltd.
+#
diff --git "a/tests/fixtures/\321\200\320\265\320\263.\321\200\321\204.txt" "b/tests/fixtures/\321\200\320\265\320\263.\321\200\321\204.txt"
new file mode 100644
index 00000000..04f7300d
--- /dev/null
+++ "b/tests/fixtures/\321\200\320\265\320\263.\321\200\321\204.txt"
@@ -0,0 +1,18 @@
+% TCI Whois Service. Terms of use:
+% https://tcinet.ru/documents/whois_ru_rf.pdf (in Russian)
+% https://tcinet.ru/documents/whois_su.pdf (in Russian)
+
+domain: XN--C1AD6A.XN--P1AI
+nserver: ns1.reg.ru.
+nserver: ns2.reg.ru.
+state: REGISTERED, DELEGATED, VERIFIED
+org: Domain name registrar REG.RU
+taxpayer-id: 7733568767
+registrar: REGRU-RF
+admin-contact: http://www.reg.ru/whois/admin_contact
+created: 2009-12-11T11:53:43Z
+paid-till: 2026-12-11T11:53:43Z
+free-date: 2027-01-11
+source: TCI
+
+Last updated on 2025-11-30T17:08:01Z
diff --git a/testsuite.php b/testsuite.php
deleted file mode 100755
index 4a746c9e..00000000
--- a/testsuite.php
+++ /dev/null
@@ -1,192 +0,0 @@
-#!/usr/local/bin/php -n
-lookup($domain);
-
- unset($result['rawdata']);
-
- if (!isset($results[$domain])) {
- print_r($result);
- $res = get_answer("Add result for $domain");
-
- if ($res) {
- // Add as it is
- unset($result['regrinfo']['disclaimer']);
- $results[$domain] = $result;
- save_results();
- }
- } else {
- // Compare with previous result
- unset($result['regrinfo']['disclaimer']);
- unset($results[$domain]['regrinfo']['disclaimer']);
-
- if (empty($result)) {
- echo "!! empty result\n";
- } else {
- $diff = array_diff_assoc_recursive($result, $results[$domain]);
-
- if (is_array($diff)) {
- print_r($diff);
- $res = get_answer("Accept differences for $domain");
-
- if ($res) {
- // Add as it is
- $results[$domain] = $result;
- save_results();
- }
- } else {
- echo "Handler for domain $domain gives same results as before ...\n";
- }
- }
- }
-}
-
-save_results();
-
-//--------------------------------------------------------------------------
-
-function save_results() {
- global $results;
-
- $fp = fopen('testsuite.txt', 'wt');
- fputs($fp, serialize($results));
- fclose($fp);
-}
-
-//--------------------------------------------------------------------------
-
-function get_answer($question) {
- echo "\n------ $question ? (y/n/a/c) ";
-
- while (true) {
- $res = trim(fgetc(STDIN));
-
- if ($res == 'a')
- exit();
-
- if ($res == 'c') {
- save_results();
- exit();
- }
- if ($res == 'y')
- return true;
- if ($res == 'n')
- return false;
- }
-}
-
-//--------------------------------------------------------------------------
-
-function array_diff_assoc_recursive($array1, $array2) {
- foreach ($array1 as $key => $value) {
- if (is_array($value)) {
- if (!is_array($array2[$key])) {
- $difference[$key] = array('previous' => $array2[$key], 'actual' => $value);
- } else {
- $new_diff = array_diff_assoc_recursive($value, $array2[$key]);
-
- if ($new_diff != false) {
- $difference[$key] = $new_diff;
- }
- }
- } else {
- if (!isset($array2[$key]) || $array2[$key] != $value) {
- $difference[$key] = array('previous' => $array2[$key], 'actual' => $value);
- }
- }
- }
-
- // Search missing items
-
- foreach ($array2 as $key => $value) {
- if (!isset($array1[$key])) {
- $difference[$key] = array('previous' => $value, 'actual' => '(missing)');
- }
- }
-
- return !isset($difference) ? false : $difference;
-}
diff --git a/testsuite.txt b/testsuite.txt
deleted file mode 100644
index 0e4c4277..00000000
--- a/testsuite.txt
+++ /dev/null
@@ -1 +0,0 @@
-a:145:{s:6:"nic.ag";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:8:{s:6:"handle";s:11:"D52707-LRCC";s:4:"name";s:6:"nic.ag";s:7:"created";s:10:"1998-05-02";s:7:"changed";s:10:"2011-05-02";s:7:"expires";s:10:"2012-05-02";s:7:"sponsor";s:26:"NicAg Registrar (R32-LRCC)";s:6:"status";a:1:{i:0;s:2:"OK";}s:7:"nserver";a:1:{s:10:"ns1.nic.ag";s:12:"67.215.171.2";}}s:5:"owner";a:7:{s:6:"handle";s:5:"66454";s:4:"name";s:13:"Patrick W Lay";s:12:"organization";s:10:"Nic AG LLC";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:23:"3321 Whitestone Cir 206";}s:4:"city";s:9:"Kissimmee";s:5:"state";s:2:"FL";s:5:"pcode";s:5:"34741";s:7:"country";s:2:"US";}s:5:"phone";s:13:"+1.4072015298";s:3:"fax";s:13:"+1.7185044461";s:5:"email";s:12:"drlay@nic.ag";}s:5:"admin";a:7:{s:6:"handle";s:5:"65672";s:4:"name";s:18:"Dr. Patrick W. Lay";s:12:"organization";s:10:"Nic AG LLC";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:23:"3321 Whitestone Cir 206";}s:4:"city";s:9:"Kissimmee";s:5:"state";s:2:"FL";s:5:"pcode";s:5:"34741";s:7:"country";s:2:"US";}s:5:"phone";s:13:"+1.4072015298";s:3:"fax";s:13:"+1.7185044461";s:5:"email";s:12:"drlay@nic.ag";}s:4:"tech";a:7:{s:6:"handle";s:5:"65672";s:4:"name";s:18:"Dr. Patrick W. Lay";s:12:"organization";s:10:"Nic AG LLC";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:23:"3321 Whitestone Cir 206";}s:4:"city";s:9:"Kissimmee";s:5:"state";s:2:"FL";s:5:"pcode";s:5:"34741";s:7:"country";s:2:"US";}s:5:"phone";s:13:"+1.4072015298";s:3:"fax";s:13:"+1.7185044461";s:5:"email";s:12:"drlay@nic.ag";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.nic.ag";s:9:"registrar";s:6:"Nic AG";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"ag.whois-servers.net";s:4:"args";s:6:"nic.ag";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"nic.at";a:2:{s:8:"regrinfo";a:5:{s:10:"registered";s:3:"yes";s:5:"owner";a:8:{s:12:"organization";s:51:"NIC.AT Internet Verwaltungs- und Betriebsges.m.b.H.";s:7:"address";a:4:{s:6:"street";s:23:"Jakob-Haringerstrasse 8";s:5:"pcode";s:6:"A-5020";s:4:"city";s:8:"Salzburg";s:7:"country";s:7:"Austria";}s:5:"phone";s:11:"+4366246690";s:3:"fax";s:12:"+43662466929";s:5:"email";s:14:"service@nic.at";s:6:"handle";s:17:"NAIV1902732-NICAT";s:7:"changed";s:10:"2005-07-07";s:6:"source";s:6:"AT-DOM";}s:5:"admin";a:8:{s:4:"name";s:11:"NIC.AT Role";s:7:"address";a:4:{s:6:"street";s:23:"Jakob-Haringerstrasse 8";s:5:"pcode";s:6:"A-5020";s:4:"city";s:8:"Salzburg";s:7:"country";s:7:"Austria";}s:5:"phone";s:11:"+4366246690";s:3:"fax";s:12:"+43662466929";s:5:"email";s:9:"it@nic.at";s:6:"handle";s:16:"NAR1899634-NICAT";s:7:"changed";s:10:"2005-12-29";s:6:"source";s:6:"AT-DOM";}s:4:"tech";a:8:{s:4:"name";s:17:"UNIVIE Hostmaster";s:7:"address";a:4:{s:6:"street";s:22:"Universitaetsstrasse 7";s:5:"pcode";s:6:"A-1010";s:4:"city";s:6:"Vienna";s:7:"country";s:7:"Austria";}s:5:"phone";s:13:"+431427714277";s:3:"fax";s:13:"+431427714279";s:5:"email";s:25:"domain-admin@univie.ac.at";s:6:"handle";s:14:"UH567003-NICAT";s:7:"changed";s:10:"2010-06-25";s:6:"source";s:6:"AT-DOM";}s:6:"domain";a:5:{s:6:"domain";s:6:"nic.at";s:7:"nserver";a:5:{s:19:"ns3ext.univie.ac.at";s:10:"77.80.62.2";s:19:"ns4ext.univie.ac.at";s:14:"131.130.249.82";s:16:"ns5.univie.ac.at";s:14:"193.171.255.77";s:16:"ns8.univie.ac.at";s:13:"81.91.161.104";s:15:"sec1.rcode0.net";s:12:"194.0.25.100";}s:7:"changed";s:10:"2012-02-23";s:6:"source";s:6:"AT-DOM";s:4:"name";s:6:"nic.at";}}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.nic.at";s:9:"registrar";s:6:"NIC-AT";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"at.whois-servers.net";s:4:"args";s:6:"nic.at";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:14:"telstra.com.au";a:2:{s:8:"regrinfo";a:4:{s:6:"domain";a:5:{s:4:"name";s:14:"telstra.com.au";s:7:"changed";s:10:"2011-09-20";s:7:"sponsor";s:12:"TPP Internet";s:6:"status";s:42:"clientDeleteProhibited (Client protection)";s:7:"nserver";a:4:{s:18:"adns03.bigpond.com";s:14:"144.135.133.81";s:18:"adns04.bigpond.com";s:14:"144.135.135.17";s:18:"adns01.bigpond.com";s:14:"144.135.133.76";s:18:"adns02.bigpond.com";s:14:"144.135.135.12";}}s:5:"owner";a:4:{s:12:"organization";s:27:"Telecom Australia (Telstra)";s:6:"handle";s:11:"C0699190-AR";s:4:"name";s:20:"Domain Administrator";s:5:"email";s:50:"Visit whois.ausregistry.com.au for Web based WhoIs";}s:4:"tech";a:3:{s:6:"handle";s:11:"C0699192-AR";s:4:"name";s:20:"domain Administrator";s:5:"email";s:50:"Visit whois.ausregistry.com.au for Web based WhoIs";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:20:"http://www.aunic.net";s:9:"registrar";s:6:"AU-NIC";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"au.whois-servers.net";s:4:"args";s:14:"telstra.com.au";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"nic.be";a:2:{s:8:"regrinfo";a:3:{s:6:"domain";a:5:{s:4:"name";s:6:"nic.be";s:6:"status";s:10:"REGISTERED";s:7:"created";s:10:"1998-04-01";s:7:"nserver";a:3:{s:20:"ns.fr.hostbasket.com";s:12:"80.66.133.57";s:20:"ns.nl.hostbasket.com";s:12:"85.112.17.78";s:20:"ns.be.hostbasket.com";s:14:"195.130.154.74";}s:7:"sponsor";a:2:{s:4:"name";s:10:"Telenet NV";s:7:"address";a:1:{s:3:"uri";s:18:"www.hostbasket.com";}}}s:4:"tech";a:6:{s:4:"name";s:18:"Telenet Hostbasket";s:12:"organization";s:10:"Telenet NV";s:7:"address";a:3:{s:6:"street";s:21:"Antwerpse Steenweg 19";s:4:"city";s:14:"9080 Lochristi";s:7:"country";s:2:"BE";}s:5:"phone";s:12:"+32.93269090";s:3:"fax";s:12:"+32.93269098";s:5:"email";s:22:"support@hostbasket.com";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:29:"http://www.domain-registry.nl";s:9:"registrar";s:11:"DNS Belgium";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"be.whois-servers.net";s:4:"args";s:6:"nic.be";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:11:"registro.br";a:2:{s:8:"regrinfo";a:3:{s:10:"registered";s:3:"yes";s:6:"domain";a:2:{s:4:"name";s:11:"registro.br";s:7:"nserver";a:5:{s:8:"a.dns.br";s:12:"200.160.0.10";s:8:"b.dns.br";s:13:"200.189.41.10";s:8:"c.dns.br";s:14:"200.192.232.10";s:8:"d.dns.br";s:14:"200.219.154.10";s:8:"e.dns.br";s:14:"200.229.248.10";}}s:5:"owner";a:1:{s:12:"organization";s:60:"Núcleo de Informação e Coordenação do Ponto BR (662379)";}}s:8:"regyinfo";a:4:{s:9:"registrar";s:6:"BR-NIC";s:8:"referrer";s:17:"http://www.nic.br";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"br.whois-servers.net";s:4:"args";s:11:"registro.br";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:7:"cira.ca";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:6:"status";s:10:"registered";s:7:"created";s:10:"1998-02-05";s:7:"expires";s:10:"2050-02-05";s:7:"changed";s:10:"2011-05-25";s:7:"sponsor";s:58:"Please contact CIRA at 1-877-860-1411 for more information";s:7:"nserver";a:3:{s:12:"ns01.cira.ca";s:14:"192.228.26.135";s:12:"ns02.cira.ca";s:14:"192.228.26.136";s:14:"sns-pb.isc.org";s:9:"192.5.4.1";}s:4:"name";s:7:"cira.ca";}s:5:"owner";a:1:{s:4:"name";s:110:"Canadian Internet Registration Authority (NFP) / Autorité Canadienne pour les enregistrements Internet (OSBL)";}s:5:"admin";a:5:{s:4:"name";s:11:"Linda Arial";s:7:"address";a:4:{i:0;s:40:"Canadian Internet Registration Authority";i:1;s:17:"350 Sparks Street";i:2;s:9:"Suite 306";i:3;s:25:"Ottawa ON K1R 7S8 Canada";}s:5:"phone";s:14:"(613) 237-5335";s:3:"fax";s:14:"(613) 237-0534";s:5:"email";s:15:"domains@cira.ca";}s:4:"tech";a:4:{s:4:"name";s:16:"Address Reply To";s:7:"address";a:3:{i:0;s:17:"350 Sparks Street";i:1;s:9:"Suite 306";i:2;s:23:"Ottawa ON K1R7S8 Canada";}s:5:"phone";s:13:"+1.6132375335";s:5:"email";s:21:"regtrant-conf@cira.ca";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:4:"CIRA";s:8:"referrer";s:19:"http://www.cira.ca/";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"ca.whois-servers.net";s:4:"args";s:7:"cira.ca";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:9:"creart.ch";a:2:{s:8:"regrinfo";a:4:{s:6:"domain";a:3:{s:4:"name";s:9:"creart.ch";s:6:"dnssec";s:1:"N";s:7:"nserver";a:2:{s:14:"ns5.netmarq.ch";s:13:"80.74.130.203";s:14:"ns6.netmarq.ch";s:12:"80.74.144.45";}}s:5:"owner";a:3:{s:8:"language";s:6:"German";s:4:"name";s:19:"von Allmen Beatrice";s:7:"address";a:3:{i:0;s:20:"Schlossmattstrasse 4";i:1;s:16:"CH-3400 Burgdorf";i:2;s:11:"Switzerland";}}s:4:"tech";a:2:{s:4:"name";s:12:"Netmarq GmbH";s:7:"address";a:5:{i:0;s:13:"Dietrich Marc";i:1;s:7:"Hosting";i:2;s:12:"Postfach 448";i:3;s:18:"CH-3800 Interlaken";i:4;s:11:"Switzerland";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.nic.ch";s:9:"registrar";s:31:"SWITCH Domain Name Registration";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"ch.whois-servers.net";s:4:"args";s:9:"creart.ch";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:14:"blaueskreuz.ch";a:2:{s:8:"regrinfo";a:4:{s:6:"domain";a:3:{s:4:"name";s:14:"blaueskreuz.ch";s:6:"dnssec";s:1:"N";s:7:"nserver";a:2:{s:15:"ns1.interway.ch";s:15:"194.246.118.119";s:15:"ns2.interway.ch";s:12:"212.25.28.54";}}s:5:"owner";a:3:{s:8:"language";s:6:"German";s:4:"name";s:53:"Blaues Kreuz Kinder- & Jugendwerk, Zentralsekretariat";s:7:"address";a:5:{i:0;s:14:"Lehner Andreas";i:1;s:31:"Prävention + Gesundheitsförd.";i:2;s:12:"Lindenrain 5";i:3;s:12:"CH-3012 Bern";i:4;s:11:"Switzerland";}}s:4:"tech";a:2:{s:4:"name";s:10:"Satzart AG";s:7:"address";a:5:{i:0;s:15:"Ammann Bernhard";i:1;s:20:"!frappant webfactory";i:2;s:12:"Birkenweg 61";i:3;s:12:"CH-3001 Bern";i:4;s:11:"Switzerland";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.nic.ch";s:9:"registrar";s:31:"SWITCH Domain Name Registration";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"ch.whois-servers.net";s:4:"args";s:14:"blaueskreuz.ch";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:12:"cnnic.net.cn";a:2:{s:8:"regyinfo";a:4:{s:8:"referrer";s:23:"http://www.cnnic.net.cn";s:9:"registrar";s:9:"China NIC";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"cn.whois-servers.net";s:4:"args";s:12:"cnnic.net.cn";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}s:8:"regrinfo";a:4:{s:6:"domain";a:6:{s:4:"name";s:12:"cnnic.net.cn";s:6:"status";s:24:"serverTransferProhibited";s:7:"sponsor";s:30:"中国互联网络信息中心";s:7:"nserver";a:5:{s:10:"a.cnnic.cn";s:12:"203.119.25.5";s:10:"b.cnnic.cn";s:12:"203.119.26.5";s:10:"c.cnnic.cn";s:12:"203.119.27.5";s:10:"d.cnnic.cn";s:12:"203.119.28.5";s:10:"e.cnnic.cn";s:12:"203.119.29.5";}s:7:"created";s:10:"1997-06-03";s:7:"expires";s:10:"2018-06-03";}s:5:"owner";a:2:{s:12:"organization";s:30:"中国互联网络信息中心";s:4:"name";s:9:"孙含会";}s:5:"admin";a:1:{s:5:"email";s:16:"service@cnnic.cn";}s:10:"registered";s:3:"yes";}}s:6:"nic.cz";a:2:{s:8:"regrinfo";a:4:{s:10:"registered";s:3:"yes";s:5:"admin";a:6:{s:6:"handle";s:5:"MAPET";s:4:"name";s:14:"Martin Peterka";s:7:"address";a:4:{i:0;s:15:"Bitovska 1226/7";i:1;s:14:"Praha 4 Michle";i:2;s:6:"140 00";i:3;s:2:"CZ";}s:9:"registrar";s:10:"REG-MOJEID";s:7:"created";s:10:"2002-03-06";s:7:"changed";s:10:"2011-07-13";}s:5:"owner";a:9:{s:6:"handle";s:6:"CZ-NIC";s:12:"organization";s:16:"CZ.NIC, z.s.p.o.";s:4:"name";s:16:"CZ.NIC, z.s.p.o.";s:7:"address";a:4:{i:0;s:11:"Americka 23";i:1;s:7:"Praha 2";i:2;s:5:"12000";i:3;s:2:"CZ";}s:5:"phone";s:14:"+420.222745111";s:3:"fax";s:14:"+420.222745112";s:5:"email";s:12:"admin@nic.cz";s:9:"registrar";s:9:"REG-CZNIC";s:7:"created";s:10:"2008-10-17";}s:6:"domain";a:9:{s:4:"name";s:6:"nic.cz";s:5:"nsset";s:6:"CZ.NIC";s:6:"keyset";s:9:"KS:NIC.CZ";s:9:"registrar";s:9:"REG-CZNIC";s:6:"status";s:38:"Sponsoring registrar change prohibited";s:7:"created";s:10:"1997-10-30";s:7:"changed";s:10:"2010-12-14";s:7:"expires";s:10:"2017-03-15";s:7:"nserver";a:3:{s:11:"b.ns.nic.cz";s:10:"194.0.13.1";s:11:"d.ns.nic.cz";s:12:"193.29.206.1";s:11:"a.ns.nic.cz";s:10:"194.0.12.1";}}}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.nic.cz";s:9:"registrar";s:6:"CZ-NIC";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"cz.whois-servers.net";s:4:"args";s:6:"nic.cz";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:8:"4ever.de";a:2:{s:8:"regrinfo";a:4:{s:6:"domain";a:4:{s:4:"name";s:8:"4ever.de";s:7:"nserver";a:4:{s:11:"ns.4ever.de";s:15:"213.239.225.238";s:20:"ns.does.not-exist.de";s:12:"62.159.88.13";s:12:"ns2.4ever.de";s:13:"200.35.149.45";s:12:"ns3.4ever.de";s:12:"67.23.32.103";}s:6:"status";s:7:"connect";s:7:"changed";s:10:"2004-05-13";}s:4:"tech";a:5:{s:4:"name";s:21:"Hostmaster of the day";s:7:"address";a:4:{s:6:"street";a:2:{i:0;s:13:"Elmar K. Bins";i:1;s:22:"Carl-Goerdeler-Str. 11";}s:5:"pcode";s:5:"60320";s:4:"city";s:9:"Frankfurt";s:7:"country";s:2:"DE";}s:5:"phone";s:16:"+49 69 3308 2951";s:3:"fax";s:16:"+49 69 27235 239";s:5:"email";s:15:"elmi@detebe.org";}s:4:"zone";a:5:{s:4:"name";s:21:"Hostmaster of the day";s:7:"address";a:4:{s:6:"street";a:2:{i:0;s:13:"Elmar K. Bins";i:1;s:22:"Carl-Goerdeler-Str. 11";}s:5:"pcode";s:5:"60320";s:4:"city";s:9:"Frankfurt";s:7:"country";s:2:"DE";}s:5:"phone";s:16:"+49 69 3308 2951";s:3:"fax";s:16:"+49 69 27235 239";s:5:"email";s:15:"elmi@detebe.org";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:8:"DENIC eG";s:8:"referrer";s:20:"http://www.denic.de/";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"de.whois-servers.net";s:4:"args";s:18:"-T dn,ace 4ever.de";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"ols.es";a:2:{s:8:"regrinfo";a:6:{s:5:"owner";a:1:{s:4:"name";s:26:"On-line Services 2000 S.L.";}s:5:"admin";a:5:{s:5:"phone";s:13:"+34.902502975";s:5:"email";s:13:"domreg@ols.es";s:4:"name";s:17:"David Saez Padros";s:7:"address";a:5:{i:0;s:17:"Pintor Vayreda, 1";i:1;s:5:"08184";i:2;s:24:"Palau Solita i Plegamans";i:3;s:9:"BARCELONA";i:4;s:2:"ES";}s:6:"handle";s:9:"DS5-ESNIC";}s:4:"tech";a:1:{s:6:"handle";s:9:"DS5-ESNIC";}s:7:"billing";a:1:{s:6:"handle";s:9:"DS5-ESNIC";}s:6:"domain";a:4:{s:7:"created";s:10:"1996-07-15";s:7:"expires";s:10:"2009-07-15";s:7:"nserver";a:2:{s:11:"b.ns.ols.es";s:13:"78.129.233.52";s:11:"a.ns.ols.es";s:13:"82.98.132.208";}s:4:"name";s:6:"ols.es";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.nic.es";s:9:"registrar";s:6:"ES-NIC";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:30:"http://shop.arsys.es/whois.php";s:4:"args";s:14:"dominio=ols.es";s:4:"port";i:80;}}s:4:"type";s:6:"domain";}}s:6:"dot.fm";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:7:{s:6:"status";s:6:"Active";s:7:"created";s:10:"1999-12-31";s:7:"changed";s:10:"2011-02-07";s:7:"expires";s:10:"2099-04-29";s:7:"nserver";a:2:{s:18:"ns2.intermedia.net";s:10:"207.5.44.2";s:18:"ns3.intermedia.net";s:11:"207.5.1.222";}s:7:"sponsor";s:14:"BRS Media Inc.";s:4:"name";s:6:"dot.fm";}s:5:"owner";a:4:{s:4:"name";s:14:"BRS Media Inc.";s:12:"organization";s:14:"BRS Media Inc.";s:5:"phone";s:12:"415-677-4027";s:7:"address";a:3:{i:3;s:31:"55 New Montgomery St. Suite 622";i:4;s:28:"San Francisco, CA 94105-3432";i:5;s:2:"US";}}s:5:"admin";a:6:{s:4:"name";s:14:"BRS Media Inc.";s:12:"organization";s:14:"BRS Media Inc.";s:5:"email";s:14:"gtbundy@dot.fm";s:5:"phone";s:12:"415-677-4027";s:3:"fax";s:12:"415-677-4025";s:7:"address";a:3:{i:3;s:31:"55 New Montgomery St. Suite 622";i:4;s:28:"San Francisco, CA 94105-3432";i:5;s:2:"US";}}s:4:"tech";a:6:{s:4:"name";s:16:"dotFM Hostmaster";s:12:"organization";s:14:"BRS Media Inc.";s:5:"email";s:17:"hostmaster@dot.fm";s:5:"phone";s:12:"415-677-4027";s:3:"fax";s:12:"415-677-4025";s:7:"address";a:3:{i:3;s:31:"55 New Montgomery St. Suite 622";i:4;s:28:"San Francisco, CA 94105-3432";i:5;s:2:"US";}}s:7:"billing";a:6:{s:4:"name";s:13:"dotFM Billing";s:12:"organization";s:14:"BRS Media Inc.";s:5:"email";s:14:"billing@dot.fm";s:5:"phone";s:24:"+1.415.677.4027 ·";s:3:"fax";s:41:"+1.415.677.4025 · Support Helpdesk";s:7:"address";a:4:{i:0;s:31:"55 New Montgomery St. Suite 622";i:1;s:28:"San Francisco, CA 94105-3432";i:2;s:2:"US";i:3;s:30:"dotFM Whois Server Version 1.5";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.dot.dm";s:9:"registrar";s:5:"dotFM";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:33:"http://www.dot.fm/query_whois.cfm";s:4:"args";s:17:"domain=dot&tld=fm";s:4:"port";i:80;}}s:4:"type";s:6:"domain";}}s:6:"nic.hu";a:2:{s:8:"regrinfo";a:2:{s:6:"domain";a:3:{s:4:"name";s:6:"nic.hu";s:7:"created";s:10:"1996-06-27";s:7:"nserver";a:2:{s:11:"ns-s.nic.hu";s:15:"193.225.195.166";s:10:"ns.iszt.hu";s:15:"193.239.149.116";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.nic.hu";s:9:"registrar";s:5:"HUNIC";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"hu.whois-servers.net";s:4:"args";s:6:"nic.hu";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:17:"domainregistry.ie";a:2:{s:8:"regrinfo";a:5:{s:10:"registered";s:3:"yes";s:5:"admin";a:3:{s:4:"name";s:15:"IEDR Hostmaster";s:6:"handle";s:8:"IH4-IEDR";s:6:"source";s:4:"IEDR";}s:4:"tech";a:3:{s:4:"name";s:15:"IEDR Hostmaster";s:6:"handle";s:8:"IH4-IEDR";s:6:"source";s:4:"IEDR";}s:6:"domain";a:6:{s:6:"domain";s:17:"domainregistry.ie";s:7:"expires";s:10:"2013-03-19";s:6:"status";s:6:"Active";s:7:"nserver";a:4:{s:21:"ns0.domainregistry.ie";s:11:"193.1.32.38";s:15:"auth-ns2.ucd.ie";s:13:"137.43.132.54";s:12:"ns.heanet.ie";s:13:"193.1.193.194";s:16:"ice.netsource.ie";s:11:"212.17.32.2";}s:6:"source";s:4:"IEDR";s:4:"name";s:17:"domainregistry.ie";}s:5:"owner";a:1:{s:12:"organization";s:26:"IE Domain Registry Limited";}}s:8:"regyinfo";a:4:{s:8:"referrer";s:28:"http://www.domainregistry.ie";s:9:"registrar";s:18:"IE Domain Registry";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"ie.whois-servers.net";s:4:"args";s:17:"domainregistry.ie";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:8:"isnic.is";a:2:{s:8:"regrinfo";a:7:{s:10:"registered";s:3:"yes";s:5:"admin";a:8:{s:4:"name";s:18:"Jens Pétur Jensen";s:7:"address";a:3:{i:0;s:28:"ISNIC - Internet Íslandi hf";i:1;s:20:"Höfðatúni 2, 17h.";i:2;s:17:"IS-105 Reykjavík";}s:5:"phone";s:13:"+354 578 2034";s:3:"fax";s:13:"+354 578 2031";s:5:"email";s:13:"jens@isnic.is";s:6:"handle";s:7:"JENS-IS";s:7:"created";s:10:"1999-12-15";s:6:"source";s:5:"ISNIC";}s:4:"tech";a:8:{s:4:"role";s:16:"ISNIC Hostmaster";s:7:"address";a:2:{i:0;s:14:"Höfðatúni 2";i:1;s:17:"IS-105 Reykjavík";}s:5:"phone";s:13:"+354 578 2030";s:3:"fax";s:13:"+354 578 2031";s:5:"email";s:19:"hostmaster@isnic.is";s:6:"handle";s:7:"ISHM-IS";s:7:"created";s:10:"2002-05-15";s:6:"source";s:5:"ISNIC";}s:7:"billing";a:7:{s:4:"role";s:23:"Internet á Íslandi hf";s:7:"address";a:2:{i:0;s:14:"Höfðatúni 2";i:1;s:17:"IS-105 Reykjavík";}s:5:"phone";s:13:"+354 578 2030";s:5:"email";s:16:"bokhald@isnic.is";s:6:"handle";s:7:"ISBC-IS";s:7:"created";s:10:"2000-11-06";s:6:"source";s:5:"ISNIC";}s:4:"zone";a:8:{s:4:"role";s:16:"ISNIC Hostmaster";s:7:"address";a:2:{i:0;s:14:"Höfðatúni 2";i:1;s:17:"IS-105 Reykjavík";}s:5:"phone";s:13:"+354 578 2030";s:3:"fax";s:13:"+354 578 2031";s:5:"email";s:19:"hostmaster@isnic.is";s:6:"handle";s:7:"ISHM-IS";s:7:"created";s:10:"2002-05-15";s:6:"source";s:5:"ISNIC";}s:6:"domain";a:6:{s:6:"domain";s:8:"isnic.is";s:7:"nserver";a:3:{s:13:"aker.isnic.is";s:11:"193.4.58.91";s:15:"hathor.isnic.is";s:11:"193.4.58.92";s:18:"ns.colo-a.isnic.is";s:12:"193.4.241.11";}s:7:"created";s:10:"2000-09-05";s:7:"expires";s:10:"2012-09-05";s:6:"source";s:5:"ISNIC";s:4:"name";s:8:"isnic.is";}s:5:"owner";a:2:{s:4:"name";s:23:"Internet á Íslandi hf";s:7:"address";a:2:{i:0;s:14:"Höfðatúni 2";i:1;s:17:"IS-105 Reykjavík";}}}s:8:"regyinfo";a:4:{s:8:"referrer";s:19:"http://www.isnic.is";s:9:"registrar";s:5:"ISNIC";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"is.whois-servers.net";s:4:"args";s:8:"isnic.is";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"nic.li";a:2:{s:8:"regrinfo";a:4:{s:6:"domain";a:1:{s:4:"name";s:6:"nic.li";}s:5:"owner";a:3:{s:8:"language";s:6:"German";s:4:"name";s:6:"SWITCH";s:7:"address";a:5:{i:0;s:18:"D'Alessandro Marco";i:1;s:14:"Marketing & PR";i:2;s:13:"Werdstrasse 2";i:3;s:15:"CH-8004 Zürich";i:4;s:11:"Switzerland";}}s:4:"tech";a:2:{s:4:"name";s:55:"SWITCH - Teleinformatikdienste für Lehre und Forschung";s:7:"address";a:5:{i:0;s:14:"Hostmaster .CH";i:1;s:7:"Network";i:2;s:13:"Werdstrasse 2";i:3;s:15:"CH-8004 Zürich";i:4;s:11:"Switzerland";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.nic.ch";s:9:"registrar";s:31:"SWITCH Domain Name Registration";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"li.whois-servers.net";s:4:"args";s:6:"nic.li";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"dns.lu";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:4:{s:4:"name";s:6:"dns.lu";s:6:"status";s:6:"ACTIVE";s:7:"nserver";a:5:{s:10:"ns1.dns.lu";s:12:"158.64.229.2";s:8:"k.dns.lu";s:10:"194.0.1.13";s:8:"i.dns.lu";s:14:"194.146.106.66";s:8:"g.dns.lu";s:10:"194.0.23.5";s:8:"p.dns.lu";s:11:"194.0.42.42";}s:7:"created";s:10:"1995-05-31";}s:5:"owner";a:3:{s:4:"type";s:12:"ORGANISATION";s:12:"organization";s:17:"Fondation RESTENA";s:7:"address";a:4:{i:0;s:25:"6, rue Coudenhove-Kalergi";s:5:"pcode";s:4:"1359";s:4:"city";s:10:"Luxembourg";s:7:"country";s:2:"LU";}}s:5:"admin";a:3:{s:4:"name";s:15:"Antoine Barthel";s:7:"address";a:5:{i:0;s:17:"Fondation RESTENA";i:1;s:25:"6, rue Coudenhove-Kalergi";s:5:"pcode";s:4:"1359";s:4:"city";s:10:"Luxembourg";s:7:"country";s:2:"LU";}s:5:"email";s:16:"admin@restena.lu";}s:4:"tech";a:3:{s:4:"name";s:13:"Gilles Massen";s:7:"address";a:5:{i:0;s:17:"Fondation RESTENA";i:1;s:25:"6, rue Coudenhove-Kalergi";s:5:"pcode";s:4:"1359";s:4:"city";s:10:"Luxembourg";s:7:"country";s:2:"LU";}s:5:"email";s:24:"gilles.massen@restena.lu";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.dns.lu";s:9:"registrar";s:6:"DNS-LU";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"lu.whois-servers.net";s:4:"args";s:6:"dns.lu";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:9:"domreg.lt";a:2:{s:8:"regrinfo";a:3:{s:6:"domain";a:4:{s:6:"status";s:10:"registered";s:7:"created";s:10:"1999-10-17";s:4:"name";s:9:"domreg.lt";s:7:"nserver";a:3:{s:13:"ns1.domreg.lt";s:12:"195.8.218.44";s:13:"ns3.domreg.lt";s:14:"195.182.72.237";s:13:"ns2.domreg.lt";s:10:"83.171.8.8";}}s:5:"owner";a:2:{s:5:"email";s:20:"hostmaster@domreg.lt";s:4:"name";s:51:"KTU Informacinių technologijų plėtros institutas";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:20:"http://www.domreg.lt";s:9:"registrar";s:9:"DOMREG.LT";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"lt.whois-servers.net";s:4:"args";s:9:"domreg.lt";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"nic.mx";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:6:{s:7:"created";s:10:"1997-01-15";s:7:"expires";s:10:"2013-01-14";s:7:"changed";s:10:"2009-11-01";s:7:"sponsor";s:12:"Registry .MX";s:7:"nserver";a:6:{s:10:"m.mx-ns.mx";s:12:"200.94.176.1";s:10:"e.mx-ns.mx";s:13:"189.201.244.1";s:10:"x.mx-ns.mx";s:13:"201.131.252.1";s:10:"i.mx-ns.mx";s:12:"207.248.68.1";s:10:"c.mx-ns.mx";s:13:"192.100.224.1";s:10:"o.mx-ns.mx";s:10:"200.23.1.1";}s:4:"name";s:6:"nic.mx";}s:5:"owner";a:2:{s:4:"name";s:37:"Network Information Center Mexico SC";s:7:"address";a:3:{s:4:"city";s:9:"Monterrey";s:5:"state";s:10:"Nuevo Leon";s:7:"country";s:6:"Mexico";}}s:5:"admin";a:2:{s:4:"name";s:37:"Network Information Center Mexico SC";s:7:"address";a:3:{s:4:"city";s:9:"Monterrey";s:5:"state";s:10:"Nuevo Leon";s:7:"country";s:6:"Mexico";}}s:4:"tech";a:2:{s:4:"name";s:37:"Network Information Center Mexico SC";s:7:"address";a:3:{s:4:"city";s:9:"Monterrey";s:5:"state";s:10:"Nuevo Leon";s:7:"country";s:6:"Mexico";}}s:7:"billing";a:2:{s:4:"name";s:37:"Network Information Center Mexico SC";s:7:"address";a:3:{s:4:"city";s:9:"Monterrey";s:5:"state";s:10:"Nuevo Leon";s:7:"country";s:6:"Mexico";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:10:"NIC Mexico";s:8:"referrer";s:18:"http://www.nic.mx/";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"mx.whois-servers.net";s:4:"args";s:6:"nic.mx";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:18:"domain-registry.nl";a:2:{s:8:"regrinfo";a:2:{s:6:"domain";a:4:{s:4:"name";s:18:"domain-registry.nl";s:6:"status";s:6:"active";s:7:"sponsor";a:4:{i:0;s:46:"Stichting Internet Domeinregistratie Nederland";i:1;s:11:"Meander 501";i:2;s:13:"6825MD ARNHEM";i:3;s:11:"Netherlands";}s:7:"nserver";a:4:{s:11:"ns1.sidn.nl";s:13:"94.198.152.68";s:11:"ns2.sidn.nl";s:12:"194.171.17.5";s:9:"ns.nl.net";s:12:"193.78.240.1";s:14:"ns1.surfnet.nl";s:14:"192.87.106.101";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:29:"http://www.domain-registry.nl";s:9:"registrar";s:39:"Stichting Internet Domeinregistratie NL";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:24:"whois.domain-registry.nl";s:4:"args";s:18:"domain-registry.nl";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:10:"nunames.nu";a:2:{s:8:"regrinfo";a:2:{s:6:"domain";a:5:{s:7:"changed";s:10:"2011-08-10";s:7:"created";s:10:"1997-05-30";s:6:"status";s:6:"Active";s:7:"nserver";a:3:{s:14:"lns0.ma.nic.nu";s:11:"69.25.75.71";s:17:"lns0.telia.nic.nu";s:12:"212.181.91.5";s:14:"lns0.de.nic.nu";s:11:"62.4.64.117";}s:4:"name";s:10:"nunames.nu";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:5:{s:5:"whois";s:12:"whois.nic.nu";s:8:"referrer";s:21:"http://www.nunames.nu";s:9:"registrar";s:15:".NU Domain, Ltd";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"nu.whois-servers.net";s:4:"args";s:10:"nunames.nu";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"nic.pl";a:2:{s:8:"regrinfo";a:2:{s:6:"domain";a:5:{s:7:"created";s:10:"2011-02-09";s:7:"changed";s:10:"2012-02-20";s:7:"sponsor";a:5:{i:0;s:29:"Warsaw Data Center sp. z o.o.";i:1;s:13:"ul. Boduena 4";i:2;s:15:"00-011 Warszawa";i:3;s:13:"Polska/Poland";i:4;s:19:"info@domains.wdc.pl";}s:4:"name";s:6:"nic.pl";s:7:"nserver";a:2:{s:15:"ns1.netnames.pl";s:11:"62.181.1.10";s:15:"ns2.netnames.pl";s:11:"62.181.0.10";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:36:"http://www.dns.pl/english/index.html";s:9:"registrar";s:4:"NASK";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"pl.whois-servers.net";s:4:"args";s:6:"nic.pl";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:9:"nic-se.se";a:2:{s:8:"regrinfo";a:3:{s:6:"domain";a:5:{s:6:"status";a:2:{i:0;s:6:"active";i:1;s:2:"ok";}s:4:"name";s:9:"nic-se.se";s:7:"created";s:10:"1997-10-11";s:7:"expires";s:10:"2012-12-31";s:7:"nserver";a:3:{s:9:"ns.nic.se";s:13:"212.247.7.228";s:10:"ns3.nic.se";s:13:"212.247.8.152";s:10:"ns2.nic.se";s:12:"194.17.45.54";}}s:5:"owner";a:1:{s:6:"handle";s:16:"stifte0702-00242";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:20:"http://www.nic-se.se";s:9:"registrar";s:6:"NIC-SE";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"se.whois-servers.net";s:4:"args";s:9:"nic-se.se";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:11:"olsns.co.uk";a:2:{s:8:"regrinfo";a:3:{s:5:"owner";a:3:{s:12:"organization";s:27:"On-Line Services 2000, S.L.";s:4:"type";a:1:{i:0;s:7:"Unknown";}s:7:"address";a:4:{i:0;s:17:"Trafalgar 78 2 2B";i:1;s:7:"Unknown";i:2;s:5:"08010";i:3;s:5:"Spain";}}s:6:"domain";a:7:{s:7:"sponsor";s:42:"On-Line Services 2000, S.L. [Tag = OLS-ES]";s:7:"created";s:10:"2001-02-21";s:7:"expires";s:10:"2013-02-21";s:7:"changed";s:10:"2011-02-25";s:6:"status";a:1:{i:0;s:30:"Registered until renewal date.";}s:7:"nserver";a:2:{s:16:"a.ns.olsns.co.uk";s:13:"78.129.233.52";s:16:"b.ns.olsns.co.uk";s:13:"82.98.162.142";}s:4:"name";s:11:"olsns.co.uk";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:25:"http://www.nominet.org.uk";s:9:"registrar";s:10:"Nominet UK";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:23:"co.uk.whois-servers.net";s:4:"args";s:11:"olsns.co.uk";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:10:"neustar.us";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:4:"name";s:10:"neustar.us";s:6:"handle";s:10:"D670499-US";s:7:"sponsor";s:18:"REGISTRY REGISTRAR";s:6:"status";a:5:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"serverDeleteProhibited";i:3;s:24:"serverTransferProhibited";i:4;s:22:"serverUpdateProhibited";}s:7:"nserver";a:2:{s:18:"gdns1.ultradns.net";s:12:"204.74.110.1";s:18:"gdns2.ultradns.net";s:12:"204.74.111.1";}s:7:"created";s:10:"2002-04-18";s:7:"expires";s:10:"2012-04-17";s:7:"changed";s:10:"2011-06-02";}s:5:"owner";a:6:{s:6:"handle";s:7:"NEUSTAR";s:4:"name";s:13:"Neustar, Inc.";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:22:"46000 Center Oak Plaza";}s:4:"city";s:8:"Sterling";s:5:"state";s:2:"VA";s:5:"pcode";s:5:"20166";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.5714345757";s:3:"fax";s:13:"+1.5714345758";s:5:"email";s:18:"support@neustar.us";}s:5:"admin";a:6:{s:6:"handle";s:7:"NEUSTAR";s:4:"name";s:13:"Neustar, Inc.";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:22:"46000 Center Oak Plaza";}s:4:"city";s:8:"Sterling";s:5:"state";s:2:"VA";s:5:"pcode";s:5:"20166";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.5714345757";s:3:"fax";s:13:"+1.5714345758";s:5:"email";s:18:"support@neustar.us";}s:7:"billing";a:6:{s:6:"handle";s:7:"NEUSTAR";s:4:"name";s:13:"Neustar, Inc.";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:22:"46000 Center Oak Plaza";}s:4:"city";s:8:"Sterling";s:5:"state";s:2:"VA";s:5:"pcode";s:5:"20166";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.5714345757";s:3:"fax";s:13:"+1.5714345758";s:5:"email";s:18:"support@neustar.us";}s:4:"tech";a:6:{s:6:"handle";s:7:"NEUSTAR";s:4:"name";s:13:"Neustar, Inc.";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:22:"46000 Center Oak Plaza";}s:4:"city";s:8:"Sterling";s:5:"state";s:2:"VA";s:5:"pcode";s:5:"20166";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.5714345757";s:3:"fax";s:13:"+1.5714345758";s:5:"email";s:18:"support@neustar.us";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:21:"http://www.neustar.us";s:9:"registrar";s:12:"NEUSTAR INC.";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"us.whois-servers.net";s:4:"args";s:10:"neustar.us";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:11:"samoanic.ws";a:2:{s:8:"regrinfo";a:4:{s:6:"domain";a:5:{s:4:"name";s:11:"samoanic.ws";s:7:"sponsor";s:25:"Computer Services Limited";s:7:"created";s:10:"2000-03-09";s:7:"changed";s:10:"2010-02-16";s:7:"nserver";a:4:{s:12:"ns4.ncsdi.ws";s:13:"67.221.178.51";s:12:"ns2.ncsdi.ws";s:11:"64.70.19.89";s:12:"ns5.ncsdi.ws";s:11:"64.70.19.79";s:12:"ns3.ncsdi.ws";s:13:"67.221.178.50";}}s:5:"owner";a:2:{s:12:"organization";s:3:"CSL";s:5:"email";s:3:"---";}s:5:"admin";a:2:{s:5:"email";s:32:"Use registrar whois listed below";s:5:"phone";s:32:"Use registrar whois listed below";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:22:"http://www.samoanic.ws";s:9:"registrar";s:9:"Samoa Nic";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:20:"ws.whois-servers.net";s:4:"args";s:11:"samoanic.ws";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:30:"http://samoanic.ws/whois.dhtml";s:4:"args";s:11:"samoanic.ws";s:4:"port";i:80;}}s:4:"type";s:6:"domain";}}s:14:"alldomains.com";a:2:{s:8:"regrinfo";a:2:{s:6:"domain";a:6:{s:4:"name";s:14:"alldomains.com";s:7:"nserver";a:5:{s:18:"ns1.alldomains.com";s:12:"64.124.14.32";s:18:"ns2.alldomains.com";s:14:"204.228.234.15";s:18:"ns3.alldomains.com";s:14:"208.75.133.194";s:18:"ns4.alldomains.com";s:15:"217.199.176.204";s:18:"ns5.alldomains.com";s:14:"123.242.230.66";}s:6:"status";a:3:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2011-06-13";s:7:"created";s:10:"1996-06-13";s:7:"expires";s:10:"2012-06-12";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:17:"ALLINDOMAINS, LLC";s:8:"referrer";s:27:"http://www.allindomains.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:22:"domain =alldomains.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:22:"whois.allindomains.com";s:4:"args";s:14:"alldomains.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:9:"ascio.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:9:"ascio.com";s:7:"nserver";a:4:{s:13:"ns1.ascio.net";s:13:"62.128.146.41";s:13:"ns2.ascio.net";s:14:"80.237.153.102";s:13:"ns3.ascio.net";s:13:"64.34.211.132";s:13:"ns4.ascio.net";s:13:"72.32.149.232";}s:6:"status";a:6:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";i:3;s:22:"serverDeleteProhibited";i:4;s:24:"serverTransferProhibited";i:5;s:22:"serverUpdateProhibited";}s:7:"changed";s:10:"2012-02-01";s:7:"created";s:10:"2005-03-01";s:7:"expires";s:10:"2012-05-31";}s:5:"owner";a:2:{s:4:"name";s:38:"ASCIO Technologies Inc. (ASCIOTEC1364)";s:7:"address";a:3:{i:0;s:17:"Islands Brygge 55";i:1;s:19:"Copenhagen, S, 2300";i:2;s:2:"DK";}}s:4:"tech";a:5:{s:5:"email";s:23:"hostmaster@netnames.net";s:3:"fax";s:14:"+44.2070159375";s:5:"phone";s:14:"+44.2070159370";s:4:"name";s:31:"Hostmaster, Netnames (NH323743)";s:7:"address";a:5:{i:0;s:9:"Group NBT";i:1;s:24:"3rd Floor Prospero House";i:2;s:20:"241 Borough High St.";i:3;s:15:"London, SE1 1GA";i:4;s:2:"GB";}}s:5:"admin";a:5:{s:5:"email";s:25:"hostmaster@speednames.com";s:3:"fax";s:12:"+45.33886301";s:5:"phone";s:12:"+45.33886300";s:4:"name";s:30:"Hostmaster, Technical (TH6437)";s:7:"address";a:4:{i:0;s:10:"Speednames";i:1;s:13:"Rejsbygade 8a";i:2;s:20:"Copenhagen, DK, 1759";i:3;s:2:"DK";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:24:"ASCIO TECHNOLOGIES, INC.";s:8:"referrer";s:20:"http://www.ascio.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:17:"domain =ascio.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:15:"whois.ascio.com";s:4:"args";s:9:"ascio.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:13:"naturebox.com";a:2:{s:8:"regrinfo";a:4:{s:6:"domain";a:8:{s:4:"name";s:13:"naturebox.com";s:7:"nserver";a:2:{s:25:"ns2.interimnameserver.com";s:14:"206.225.91.125";s:25:"ns1.interimnameserver.com";s:15:"207.170.243.233";}s:6:"status";s:6:"ACTIVE";s:10:"epp_status";a:1:{i:0;s:2:"ok";}s:7:"changed";s:10:"2005-06-29";s:7:"created";s:10:"2005-06-29";s:7:"expires";s:10:"2006-06-29";s:7:"sponsor";s:7:"CHINESE";}s:10:"registered";s:3:"yes";s:5:"admin";a:6:{i:0;s:38:"Preston, Paul ppreston@sitedomain.net";i:1;s:17:"CyberSurfers Inc.";i:2;s:26:"712 West Broad St, Ste B-1";i:3;s:23:"Falls Church, VA 22046";i:4;s:2:"US";i:5;s:13:"+1.7035347761";}s:4:"tech";a:6:{i:0;s:38:"Preston, Paul ppreston@sitedomain.net";i:1;s:17:"CyberSurfers Inc.";i:2;s:26:"712 West Broad St, Ste B-1";i:3;s:23:"Falls Church, VA 22046";i:4;s:2:"US";i:5;s:13:"+1.7035347761";}}s:8:"regyinfo";a:6:{s:9:"registrar";s:19:"CHINESEDOMAINS, LLC";s:5:"whois";s:22:"whois.chinesedomain.cn";s:8:"referrer";s:27:"http://www.chinesedomain.cn";s:4:"args";s:14:"=naturebox.com";s:4:"port";i:43;s:4:"type";s:6:"domain";}}s:14:"buydomains.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:14:"buydomains.com";s:7:"nserver";a:2:{s:18:"ns3.buydomains.com";s:11:"64.95.64.94";s:18:"ns4.buydomains.com";s:11:"64.95.64.97";}s:6:"status";a:1:{i:0;s:24:"clientTransferProhibited";}s:7:"changed";s:10:"2012-01-27";s:7:"created";s:10:"1997-03-30";s:7:"expires";s:10:"2017-03-31";}s:5:"owner";a:5:{s:5:"email";s:24:"brokerage@buydomains.com";s:4:"name";s:9:"RN WebReg";s:5:"phone";s:15:"+1.866.822.9073";s:3:"fax";s:15:"+1.781.839.2801";s:7:"address";a:4:{i:0;s:15:"Rarenames, Inc.";i:2;s:21:"738 Main Street, #389";i:3;s:17:"Waltham, MA 02451";i:4;s:2:"US";}}s:5:"admin";a:5:{s:5:"email";s:24:"brokerage@buydomains.com";s:4:"name";s:9:"RN WebReg";s:5:"phone";s:15:"+1.866.822.9073";s:3:"fax";s:15:"+1.781.839.2801";s:7:"address";a:7:{i:0;s:15:"Rarenames, Inc.";i:2;s:21:"738 Main Street, #389";i:3;s:17:"Waltham, MA 02451";i:4;s:2:"US";i:7;s:32:"Domain servers in listed order::";i:8;s:18:"ns3.buydomains.com";i:9;s:18:"ns4.buydomains.com";}}s:4:"tech";a:5:{s:5:"email";s:24:"brokerage@buydomains.com";s:4:"name";s:9:"RN WebReg";s:5:"phone";s:15:"+1.866.822.9073";s:3:"fax";s:15:"+1.781.839.2801";s:7:"address";a:7:{i:0;s:15:"Rarenames, Inc.";i:2;s:21:"738 Main Street, #389";i:3;s:17:"Waltham, MA 02451";i:4;s:2:"US";i:7;s:32:"Domain servers in listed order::";i:8;s:18:"ns3.buydomains.com";i:9;s:18:"ns4.buydomains.com";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:28:"DOMAINADMINISTRATION.COM LLC";s:8:"referrer";s:35:"http://www.domainadministration.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:22:"domain =buydomains.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:18:"whois.afternic.com";s:4:"args";s:14:"buydomains.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:19:"domaincontender.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:19:"domaincontender.com";s:7:"nserver";a:2:{s:16:"ns1.assorted.com";s:13:"74.117.217.76";s:16:"ns2.assorted.com";s:13:"74.117.222.28";}s:6:"status";a:4:{i:0;s:22:"clientDeleteProhibited";i:1;s:10:"clientHold";i:2;s:24:"clientTransferProhibited";i:3;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2011-10-19";s:7:"created";s:10:"2003-08-09";s:7:"expires";s:10:"2011-08-09";}s:5:"owner";a:3:{s:5:"phone";s:12:"504-274-4800";s:4:"name";s:16:"Domain Contender";s:7:"address";a:4:{i:0;s:14:"650 Poydras St";i:1;s:10:"Suite 1150";i:2;s:21:"New Orleans, LA 70130";i:3;s:2:"US";}}s:5:"admin";a:4:{s:5:"email";s:28:"registry@domaincontender.com";s:4:"name";s:16:"Solares, Sigmund";s:5:"phone";s:12:"504-274-4800";s:7:"address";a:4:{i:1;s:14:"650 Poydras St";i:2;s:10:"Suite 1150";i:3;s:21:"New Orleans, LA 70130";i:4;s:2:"US";}}s:4:"tech";a:4:{s:5:"email";s:28:"registry@domaincontender.com";s:4:"name";s:16:"Solares, Sigmund";s:5:"phone";s:12:"504-274-4800";s:7:"address";a:4:{i:1;s:14:"650 Poydras St";i:2;s:10:"Suite 1150";i:3;s:21:"New Orleans, LA 70130";i:4;s:2:"US";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:13:"ASSORTED, LTD";s:8:"referrer";s:23:"http://www.assorted.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:27:"domain =domaincontender.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:18:"whois.assorted.com";s:4:"args";s:19:"domaincontender.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:11:"corenic.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:4:"name";s:11:"corenic.com";s:7:"nserver";a:3:{s:15:"dns.globvill.de";s:12:"212.20.191.2";s:12:"ns2.knipp.de";s:12:"195.253.6.52";s:12:"ns3.knipp.de";s:13:"194.64.105.66";}s:6:"status";a:3:{i:0;s:2:"ok";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2001-08-14";s:7:"created";s:10:"1997-09-21";s:7:"expires";s:10:"2012-09-13";s:6:"handle";s:12:"D3040399-CNO";s:7:"sponsor";s:48:"CORE-901 (Axone/Secretariat Maintenance Account)";}s:5:"owner";a:5:{s:6:"handle";s:8:"COCO-354";s:4:"name";s:16:"CORE ASSOCIATION";s:12:"organization";s:45:"INTERNET COUNCIL OF REGISTRARS - Werner Staub";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:1:"-";}s:4:"city";s:6:"Geneva";s:5:"state";s:2:"GE";s:5:"pcode";s:7:"CH-1215";s:7:"country";s:2:"CH";}s:5:"email";s:23:"secretariat@corenic.org";}s:5:"admin";a:5:{s:6:"handle";s:8:"COCO-354";s:4:"name";s:16:"CORE ASSOCIATION";s:12:"organization";s:45:"INTERNET COUNCIL OF REGISTRARS - Werner Staub";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:1:"-";}s:4:"city";s:6:"Geneva";s:5:"state";s:2:"GE";s:5:"pcode";s:7:"CH-1215";s:7:"country";s:2:"CH";}s:5:"email";s:23:"secretariat@corenic.org";}s:4:"tech";a:5:{s:6:"handle";s:8:"COCO-354";s:4:"name";s:16:"CORE ASSOCIATION";s:12:"organization";s:45:"INTERNET COUNCIL OF REGISTRARS - Werner Staub";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:1:"-";}s:4:"city";s:6:"Geneva";s:5:"state";s:2:"GE";s:5:"pcode";s:7:"CH-1215";s:7:"country";s:2:"CH";}s:5:"email";s:23:"secretariat@corenic.org";}s:4:"zone";a:5:{s:6:"handle";s:8:"COCO-354";s:4:"name";s:16:"CORE ASSOCIATION";s:12:"organization";s:45:"INTERNET COUNCIL OF REGISTRARS - Werner Staub";s:7:"address";a:4:{s:4:"city";s:6:"Geneva";s:5:"state";s:2:"GE";s:5:"pcode";s:7:"CH-1215";s:7:"country";s:2:"CH";}s:5:"email";s:23:"secretariat@corenic.org";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:35:"CORE INTERNET COUNCIL OF REGISTRARS";s:8:"referrer";s:22:"http://www.corenic.net";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:19:"domain =corenic.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:17:"whois.corenic.net";s:4:"args";s:11:"corenic.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:12:"antiquea.com";a:2:{s:8:"regrinfo";a:2:{s:6:"domain";a:6:{s:4:"name";s:12:"antiquea.com";s:7:"nserver";a:2:{s:16:"ns1.webmailer.de";s:12:"81.169.146.7";s:16:"ns2.webmailer.de";s:12:"85.214.0.251";}s:6:"status";a:1:{i:0;s:2:"ok";}s:7:"changed";s:10:"2011-06-09";s:7:"created";s:10:"2000-06-08";s:7:"expires";s:10:"2012-06-08";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:9:"CRONON AG";s:8:"referrer";s:21:"http://www.cronon.net";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:20:"domain =antiquea.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:16:"whois.cronon.net";s:4:"args";s:12:"antiquea.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:13:"directnic.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:13:"directnic.com";s:7:"nserver";a:2:{s:17:"ns0.directnic.com";s:13:"74.117.217.20";s:17:"ns1.directnic.com";s:13:"74.117.222.20";}s:6:"status";a:3:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2011-09-01";s:7:"created";s:10:"2000-02-10";s:7:"expires";s:10:"2016-02-09";}s:5:"owner";a:4:{s:5:"phone";s:10:"5043550081";s:3:"fax";s:11:"18006074911";s:4:"name";s:17:"DNC Holdings, Inc";s:7:"address";a:4:{i:0;s:21:"3500 N. Causeway Blvd";i:1;s:9:"Suite 160";i:2;s:18:"Metairie, LA 70002";i:3;s:2:"US";}}s:5:"admin";a:5:{s:5:"email";s:24:"hostmaster@directnic.com";s:4:"name";s:21:"Administrator, Domain";s:5:"phone";s:10:"5043550081";s:3:"fax";s:11:"18006074911";s:7:"address";a:4:{i:1;s:21:"3500 N. Causeway Blvd";i:2;s:9:"Suite 160";i:3;s:18:"Metairie, LA 70002";i:4;s:2:"US";}}s:4:"tech";a:5:{s:5:"email";s:24:"hostmaster@directnic.com";s:4:"name";s:21:"Administrator, Domain";s:5:"phone";s:10:"5043550081";s:3:"fax";s:11:"18006074911";s:7:"address";a:4:{i:1;s:21:"3500 N. Causeway Blvd";i:2;s:9:"Suite 160";i:3;s:18:"Metairie, LA 70002";i:4;s:2:"US";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:14:"DIRECTNIC, LTD";s:8:"referrer";s:24:"http://www.directnic.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:21:"domain =directnic.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:19:"whois.directnic.com";s:4:"args";s:13:"directnic.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:14:"domainbank.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:4:"name";s:14:"domainbank.com";s:7:"nserver";a:2:{s:19:"dns1.domainbank.com";s:14:"216.52.121.235";s:19:"dns2.domainbank.com";s:14:"66.150.161.153";}s:6:"status";a:3:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2008-05-19";s:7:"created";s:10:"1998-07-28";s:7:"expires";s:10:"2012-07-27";s:7:"sponsor";s:10:"DOMAINBANK";}s:10:"registered";s:3:"yes";s:5:"owner";a:2:{s:4:"name";s:12:"Dotster Inc.";s:7:"address";a:4:{i:0;s:18:"8100 NE Parkway DR";i:1;s:9:"Suite 300";i:2;s:20:"Vancouver, WA 98662";i:3;s:2:"US";}}s:5:"admin";a:5:{s:5:"email";s:17:"legal@dotster.com";s:4:"name";s:13:"Domain Admin,";s:5:"phone";s:12:"360-253-2210";s:3:"fax";s:12:"360-253-4234";s:7:"address";a:5:{i:1;s:12:"Dotster Inc.";i:2;s:18:"8100 NE Parkway DR";i:3;s:9:"Suite 300";i:4;s:20:"Vancouver, WA 98662";i:5;s:2:"US";}}s:4:"tech";a:5:{s:5:"email";s:17:"legal@dotster.com";s:4:"name";s:13:"Domain Admin,";s:5:"phone";s:12:"360-253-2210";s:3:"fax";s:12:"360-253-4234";s:7:"address";a:5:{i:1;s:12:"Dotster Inc.";i:2;s:18:"8100 NE Parkway DR";i:3;s:9:"Suite 300";i:4;s:20:"Vancouver, WA 98662";i:5;s:2:"US";}}}s:8:"regyinfo";a:4:{s:9:"registrar";s:45:"DSTR ACQUISITION PA I, LLC DBA DOMAINBANK.COM";s:8:"referrer";s:22:"http://www.dotster.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:22:"domain =domainbank.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:17:"whois.dotster.com";s:4:"args";s:14:"domainbank.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:16:"dotregistrar.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:4:"name";s:16:"dotregistrar.com";s:7:"nserver";a:2:{s:20:"ns1.dotregistrar.net";s:13:"64.94.117.217";s:20:"ns2.dotregistrar.net";s:12:"63.251.83.80";}s:6:"status";a:3:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2012-01-26";s:7:"created";s:10:"1999-02-10";s:7:"expires";s:10:"2013-02-10";s:7:"sponsor";s:12:"DOTREGISTRAR";}s:5:"owner";a:2:{s:4:"name";s:18:"RegistrarAds, Inc.";s:7:"address";a:3:{i:0;s:32:"8100 NE Parkway Drive, Suite 300";i:1;s:20:"Vancouver, WA 98662";i:2;s:2:"US";}}s:5:"admin";a:5:{s:5:"email";s:21:"buysdomains@gmail.com";s:4:"name";s:13:"Admin, Domain";s:5:"phone";s:12:"360-253-2210";s:3:"fax";s:12:"360-253-4234";s:7:"address";a:4:{i:1;s:18:"RegistrarAds, Inc.";i:2;s:32:"8100 NE Parkway Drive, Suite 300";i:3;s:20:"Vancouver, WA 98662";i:4;s:2:"US";}}s:4:"tech";a:5:{s:5:"email";s:21:"buysdomains@gmail.com";s:4:"name";s:13:"Admin, Domain";s:5:"phone";s:12:"360-253-2210";s:3:"fax";s:12:"360-253-4234";s:7:"address";a:4:{i:1;s:18:"RegistrarAds, Inc.";i:2;s:32:"8100 NE Parkway Drive, Suite 300";i:3;s:20:"Vancouver, WA 98662";i:4;s:2:"US";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:18:"DOTREGISTRAR, LLC.";s:8:"referrer";s:22:"http://www.dotster.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:24:"domain =dotregistrar.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:17:"whois.dotster.com";s:4:"args";s:16:"dotregistrar.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:11:"dotster.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:4:"name";s:11:"dotster.com";s:7:"nserver";a:2:{s:15:"ns1.dotster.com";s:14:"66.150.161.146";s:15:"ns2.dotster.com";s:12:"63.251.83.72";}s:6:"status";a:3:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2011-05-12";s:7:"created";s:10:"1999-12-29";s:7:"expires";s:10:"2020-12-12";s:7:"sponsor";s:7:"DOTSTER";}s:5:"owner";a:2:{s:4:"name";s:15:"c/o DOTSTER.COM";s:7:"address";a:3:{i:0;s:15:"P.O. Box 821650";i:1;s:20:"Vancouver, WA 98682";i:2;s:2:"US";}}s:5:"admin";a:4:{s:5:"email";s:22:"PzmCvj@privacypost.com";s:5:"phone";s:15:"+1.360-449-5933";s:4:"name";s:15:"c/o DOTSTER.COM";s:7:"address";a:3:{i:0;s:15:"P.O. Box 821650";i:1;s:20:"Vancouver, WA 98682";i:2;s:2:"US";}}s:4:"tech";a:4:{s:5:"email";s:22:"9DpAga@privacypost.com";s:5:"phone";s:15:"+1.360-449-5933";s:4:"name";s:15:"c/o DOTSTER.COM";s:7:"address";a:3:{i:0;s:15:"P.O. Box 821650";i:1;s:20:"Vancouver, WA 98682";i:2;s:2:"US";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:13:"DOTSTER, INC.";s:8:"referrer";s:22:"http://www.dotster.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:19:"domain =dotster.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:17:"whois.dotster.com";s:4:"args";s:11:"dotster.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:8:"enom.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:8:"enom.com";s:7:"nserver";a:3:{s:14:"dns11.enom.com";s:12:"98.124.227.1";s:14:"dns12.enom.com";s:12:"98.124.228.1";s:14:"dns13.enom.com";s:12:"98.124.229.1";}s:6:"status";s:6:"Locked";s:7:"changed";s:10:"2011-09-09";s:7:"created";s:10:"1997-10-24";s:7:"expires";s:10:"2013-09-21";}s:5:"admin";a:5:{s:5:"email";s:34:"qxjstwqcqp@whoisprivacyprotect.com";s:4:"name";s:11:"Whois Agent";s:5:"phone";s:13:"+1.4252740657";s:3:"fax";s:13:"+1.4259744730";s:7:"address";a:5:{i:0;s:38:"Whois Privacy Protection Service, Inc.";i:4;s:30:"PMB 368, 14150 NE 20th St - F1";i:5;s:12:"C/O enom.com";i:6;s:18:"Bellevue, WA 98007";i:7;s:2:"US";}}s:4:"tech";a:5:{s:5:"email";s:34:"qxjstwqcqp@whoisprivacyprotect.com";s:4:"name";s:11:"Whois Agent";s:5:"phone";s:13:"+1.4252740657";s:3:"fax";s:13:"+1.4259744730";s:7:"address";a:5:{i:0;s:38:"Whois Privacy Protection Service, Inc.";i:4;s:30:"PMB 368, 14150 NE 20th St - F1";i:5;s:12:"C/O enom.com";i:6;s:18:"Bellevue, WA 98007";i:7;s:2:"US";}}s:5:"owner";a:2:{s:4:"name";s:38:"Whois Privacy Protection Service, Inc.";s:7:"address";a:5:{i:0;s:14:"Whois Agent ()";i:1;s:30:"PMB 368, 14150 NE 20th St - F1";i:2;s:12:"C/O enom.com";i:3;s:18:"Bellevue, WA 98007";i:4;s:2:"US";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:10:"ENOM, INC.";s:8:"referrer";s:19:"http://www.enom.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:16:"domain =enom.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:14:"whois.enom.com";s:4:"args";s:8:"enom.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:12:"adultlaw.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:4:"name";s:12:"adultlaw.com";s:7:"nserver";a:2:{s:14:"ns1.apgood.com";s:13:"63.231.16.185";s:16:"ns1.carpelaw.com";s:13:"63.231.16.187";}s:6:"status";s:6:"Locked";s:7:"changed";s:10:"2006-10-28";s:7:"created";s:10:"1999-11-08";s:7:"expires";s:10:"2007-11-08";s:7:"sponsor";s:10:"eNom, Inc.";}s:10:"registered";s:3:"yes";s:5:"owner";a:6:{s:5:"email";s:16:"rob@carpelaw.com";s:4:"name";s:13:"Robert Apgood";s:12:"organization";s:13:"CarpeLaw PLLC";s:5:"phone";s:13:"+1.2066242379";s:3:"fax";s:13:"+1.2067846305";s:7:"address";a:3:{i:4;s:27:"2400 NW 80th Street Ste 130";i:5;s:22:"Seattle, WA 98117-4449";i:6;s:2:"US";}}s:5:"admin";a:6:{s:5:"email";s:16:"rob@carpelaw.com";s:4:"name";s:13:"Robert Apgood";s:12:"organization";s:13:"CarpeLaw PLLC";s:5:"phone";s:13:"+1.2066242379";s:3:"fax";s:13:"+1.2067846305";s:7:"address";a:3:{i:4;s:27:"2400 NW 80th Street Ste 130";i:5;s:22:"Seattle, WA 98117-4449";i:6;s:2:"US";}}s:4:"tech";a:6:{s:5:"email";s:16:"rob@carpelaw.com";s:4:"name";s:13:"Robert Apgood";s:12:"organization";s:13:"CarpeLaw PLLC";s:5:"phone";s:13:"+1.2066242379";s:3:"fax";s:13:"+1.2067846305";s:7:"address";a:3:{i:4;s:27:"2400 NW 80th Street Ste 130";i:5;s:22:"Seattle, WA 98117-4449";i:6;s:2:"US";}}}s:8:"regyinfo";a:6:{s:9:"registrar";s:10:"ENOM, INC.";s:5:"whois";s:14:"whois.enom.com";s:8:"referrer";s:19:"http://www.enom.com";s:4:"args";s:13:"=adultlaw.com";s:4:"port";i:43;s:4:"type";s:6:"domain";}}s:11:"godaddy.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:4:"name";s:11:"godaddy.com";s:7:"nserver";a:3:{s:21:"cns1.secureserver.net";s:15:"208.109.255.100";s:21:"cns2.secureserver.net";s:14:"216.69.185.100";s:21:"cns3.secureserver.net";s:13:"64.202.167.31";}s:6:"status";a:4:{i:0;s:22:"clientDeleteProhibited";i:1;s:21:"clientRenewProhibited";i:2;s:24:"clientTransferProhibited";i:3;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2011-11-01";s:7:"created";s:10:"1999-03-02";s:7:"expires";s:10:"2021-11-01";s:7:"sponsor";s:41:"GoDaddy.com, LLC (http://www.godaddy.com)";}s:5:"owner";a:2:{s:4:"name";s:8:"Go Daddy";s:7:"address";a:3:{i:0;s:27:"14455 N Hayden Rd Suite 219";i:1;s:25:"Scottsdale, Arizona 85260";i:2;s:13:"United States";}}s:5:"admin";a:6:{s:5:"email";s:13:"dns@jomax.net";s:4:"name";s:18:"Go Daddy, Go Daddy";s:3:"fax";s:15:"- +1.4805058844";s:5:"phone";s:13:"+1.4805058800";s:12:"organization";s:8:"Go Daddy";s:7:"address";a:3:{i:0;s:27:"14455 N Hayden Rd Suite 219";i:1;s:25:"Scottsdale, Arizona 85260";i:2;s:13:"United States";}}s:4:"tech";a:6:{s:5:"email";s:13:"dns@jomax.net";s:4:"name";s:18:"Go Daddy, Go Daddy";s:3:"fax";s:15:"- +1.4805058844";s:5:"phone";s:13:"+1.4805058800";s:12:"organization";s:8:"Go Daddy";s:7:"address";a:3:{i:0;s:27:"14455 N Hayden Rd Suite 219";i:1;s:25:"Scottsdale, Arizona 85260";i:2;s:13:"United States";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:16:"GODADDY.COM, LLC";s:8:"referrer";s:28:"http://registrar.godaddy.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:19:"domain =godaddy.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:17:"whois.godaddy.com";s:4:"args";s:11:"godaddy.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:11:"example.com";a:2:{s:8:"regrinfo";a:3:{s:6:"domain";a:7:{s:4:"name";s:11:"example.com";s:7:"nserver";a:2:{s:18:"a.iana-servers.net";s:13:"199.43.132.53";s:18:"b.iana-servers.net";s:13:"199.43.133.53";}s:6:"status";a:3:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2011-08-14";s:7:"created";s:10:"1992-01-01";s:7:"expires";s:10:"2012-08-13";s:6:"source";s:4:"IANA";}s:5:"owner";a:1:{s:12:"organization";s:35:"Internet Assigned Numbers Authority";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:44:"RESERVED-INTERNET ASSIGNED NUMBERS AUTHORITY";s:8:"referrer";s:23:"http://res-dom.iana.org";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:19:"domain =example.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:14:"whois.iana.org";s:4:"args";s:11:"example.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:10:"sexido.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:6:{s:4:"name";s:10:"sexido.com";s:7:"nserver";a:2:{s:21:"sk.s1.ns104.cnomy.com";s:13:"209.85.51.104";s:21:"sk.s2.ns104.cnomy.com";s:14:"209.62.105.104";}s:6:"status";a:1:{i:0;s:24:"clientTransferProhibited";}s:7:"changed";s:10:"2007-09-24";s:7:"created";s:10:"2002-09-24";s:7:"expires";s:10:"2008-09-24";}s:10:"registered";s:3:"yes";s:5:"owner";a:5:{s:5:"email";s:27:"RfhpmfLjBWv@securewhois.com";s:5:"phone";s:13:"+1.4165385428";s:3:"fax";s:13:"+1.4163520113";s:4:"name";s:17:"SecureWhois, Inc.";s:7:"address";a:3:{i:0;s:17:"SecureWhois, Inc.";i:1;s:8:"96 Mowat";i:2;s:22:"Toronto, ON M6K 3M1 CA";}}s:5:"admin";a:5:{s:5:"email";s:27:"VpFDMjMCqyQ@securewhois.com";s:5:"phone";s:13:"+1.4165385428";s:3:"fax";s:13:"+1.4163520113";s:4:"name";s:17:"SecureWhois, Inc.";s:7:"address";a:3:{i:0;s:17:"SecureWhois, Inc.";i:1;s:8:"96 Mowat";i:2;s:22:"Toronto, ON M6K 3M1 CA";}}s:7:"billing";a:5:{s:5:"email";s:27:"VpFDMjMCqyQ@securewhois.com";s:5:"phone";s:13:"+1.4165385428";s:3:"fax";s:13:"+1.4163520113";s:4:"name";s:17:"SecureWhois, Inc.";s:7:"address";a:3:{i:0;s:17:"SecureWhois, Inc.";i:1;s:8:"96 Mowat";i:2;s:22:"Toronto, ON M6K 3M1 CA";}}s:4:"tech";a:5:{s:5:"email";s:27:"VpFDMjMCqyQ@securewhois.com";s:5:"phone";s:13:"+1.4165385428";s:3:"fax";s:13:"+1.4163520113";s:4:"name";s:17:"SecureWhois, Inc.";s:7:"address";a:3:{i:0;s:17:"SecureWhois, Inc.";i:1;s:8:"96 Mowat";i:2;s:22:"Toronto, ON M6K 3M1 CA";}}}s:8:"regyinfo";a:4:{s:9:"registrar";s:39:"INNERWISE, INC. D/B/A ITSYOURDOMAIN.COM";s:8:"referrer";s:28:"http://www.itsyourdomain.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:18:"domain =sexido.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:23:"whois.itsyourdomain.com";s:4:"args";s:10:"sexido.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:16:"interdominio.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:16:"interdominio.com";s:7:"nserver";a:2:{s:19:"ns1.interdomain.net";s:15:"212.170.240.180";s:19:"ns2.interdomain.net";s:15:"212.170.240.181";}s:6:"status";a:2:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";}s:7:"changed";s:10:"2012-01-02";s:7:"created";s:10:"1997-02-10";s:7:"expires";s:10:"2018-02-11";}s:5:"owner";a:5:{s:6:"handle";s:18:"PROP-33338-1394717";s:4:"name";s:15:"Interdomain SAU";s:7:"address";a:5:{s:6:"street";s:21:"C/ Doctor Esquerdo 61";s:4:"city";s:6:"Madrid";s:5:"state";s:6:"Madrid";s:5:"pcode";s:5:"28007";s:7:"country";s:2:"ES";}s:5:"phone";s:13:"+34.915848780";s:5:"email";s:20:"info@interdomain.org";}s:5:"admin";a:7:{s:6:"handle";s:13:"1052-00023552";s:4:"name";s:16:"INTERDOMAIN S.A.";s:12:"organization";s:16:"INTERDOMAIN S.A.";s:7:"address";a:5:{s:6:"street";s:41:"GENERAL PERON 38 EDIFICIO MASTER II 8º";s:4:"city";s:6:"MADRID";s:5:"state";s:6:"MADRID";s:5:"pcode";s:5:"28020";s:7:"country";s:2:"ES";}s:5:"phone";s:13:"+34.915848780";s:3:"fax";s:13:"+34.915569793";s:5:"email";s:20:"info@INTERDOMAIN.ORG";}s:4:"tech";a:6:{s:6:"handle";s:13:"4248-00044919";s:4:"name";s:18:"RESPONSABLE DE DNS";s:12:"organization";s:18:"RESPONSABLE DE DNS";s:7:"address";a:5:{s:6:"street";s:19:"JULIAN CAMARILLO, 6";s:4:"city";s:6:"MADRID";s:5:"state";s:6:"MADRID";s:5:"pcode";s:5:"28013";s:7:"country";s:2:"ES";}s:5:"phone";s:13:"+34.913752300";s:5:"email";s:27:"tsp.dnsadmin@telefonica.net";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:17:"INTERDOMAIN, S.A.";s:8:"referrer";s:25:"http://www.interdomain.es";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:24:"domain =interdominio.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:21:"whois.interdomain.net";s:4:"args";s:16:"interdominio.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:8:"inww.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:8:"inww.com";s:7:"nserver";a:2:{s:19:"ns1.melbourneit.com";s:13:"203.27.227.50";s:19:"ns2.melbourneit.com";s:14:"203.31.199.135";}s:6:"status";a:1:{i:0;s:24:"clientTransferProhibited";}s:7:"changed";s:10:"2011-10-04";s:7:"created";s:10:"2000-03-30";s:7:"expires";s:10:"2012-11-18";}s:5:"owner";a:2:{s:4:"name";s:16:"Melbourne IT Ltd";s:7:"address";a:5:{i:0;s:24:"Level 2, 120 King Street";i:1;s:9:"Melbourne";i:2;s:4:"3000";i:3;s:3:"Vic";i:4;s:9:"AUSTRALIA";}}s:5:"admin";a:4:{s:4:"name";s:15:"Account Manager";s:7:"address";a:5:{i:0;s:24:"Level 2, 120 King Street";i:1;s:9:"Melbourne";i:2;s:4:"3000";i:3;s:3:"Vic";i:4;s:9:"AUSTRALIA";}s:5:"email";s:19:"cdm@melbourneit.com";s:5:"phone";s:13:"+61.386242465";}s:4:"tech";a:4:{s:4:"name";s:15:"Account Manager";s:7:"address";a:5:{i:0;s:24:"Level 2, 120 King Street";i:1;s:9:"Melbourne";i:2;s:4:"3000";i:3;s:3:"Vic";i:4;s:9:"AUSTRALIA";}s:5:"email";s:19:"cdm@melbourneit.com";s:5:"phone";s:13:"+61.386242465";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:49:"MELBOURNE IT, LTD. D/B/A INTERNET NAMES WORLDWIDE";s:8:"referrer";s:26:"http://www.melbourneit.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:16:"domain =inww.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:21:"whois.melbourneit.com";s:4:"args";s:8:"inww.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:9:"joker.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:4:"name";s:9:"joker.com";s:7:"nserver";a:3:{s:14:"j.ns.joker.com";s:15:"184.172.157.218";s:14:"k.ns.joker.com";s:12:"159.25.49.66";s:14:"l.ns.joker.com";s:10:"66.252.5.5";}s:6:"status";s:4:"lock";s:7:"changed";s:10:"2011-11-03";s:7:"created";s:10:"1994-11-27";s:7:"expires";s:10:"2014-08-03";s:7:"sponsor";a:3:{i:0;s:36:"CSL Computer Service Langenbach GmbH";i:1;s:20:"Duesseldorf, Germany";i:2;s:34:"Visit www.joker.com to get Domains";}s:12:"query-source";s:11:"88.18.53.29";}s:10:"registered";s:3:"yes";s:5:"admin";a:6:{s:6:"handle";s:7:"CCOM-58";s:4:"name";s:3:"n/a";s:12:"organization";s:36:"CSL Computer Service Langenbach GmbH";s:5:"email";s:15:"admin@joker.com";s:7:"address";a:4:{s:6:"street";s:18:"Hansaallee 191-193";s:4:"city";s:11:"Duesseldorf";s:5:"pcode";s:5:"40549";s:7:"country";s:2:"DE";}s:5:"phone";s:13:"+49.211867670";}s:4:"tech";a:6:{s:6:"handle";s:10:"CCOM-53728";s:4:"name";s:21:"Hostmaster of the day";s:12:"organization";s:35:"CSL Computerservice Langenbach GmbH";s:5:"email";s:20:"hostmaster@joker.com";s:7:"address";a:5:{s:6:"street";s:18:"Hansaallee 191-193";s:4:"city";s:11:"Duesseldorf";s:5:"state";s:3:"NRW";s:5:"pcode";s:5:"40549";s:7:"country";s:2:"DE";}s:5:"phone";s:13:"+49.211867670";}s:7:"billing";a:6:{s:6:"handle";s:10:"CCOM-53728";s:4:"name";s:21:"Hostmaster of the day";s:12:"organization";s:35:"CSL Computerservice Langenbach GmbH";s:5:"email";s:20:"hostmaster@joker.com";s:7:"address";a:5:{s:6:"street";s:18:"Hansaallee 191-193";s:4:"city";s:11:"Duesseldorf";s:5:"state";s:3:"NRW";s:5:"pcode";s:5:"40549";s:7:"country";s:2:"DE";}s:5:"phone";s:13:"+49.211867670";}s:5:"owner";a:5:{s:4:"name";s:3:"n/a";s:12:"organization";s:36:"CSL Computer Service Langenbach GmbH";s:5:"email";s:15:"admin@joker.com";s:5:"phone";s:13:"+49.211867670";s:7:"address";a:4:{s:6:"street";s:18:"Hansaallee 191-193";s:4:"city";s:11:"Duesseldorf";s:5:"pcode";s:5:"40549";s:7:"country";s:2:"DE";}}}s:8:"regyinfo";a:4:{s:9:"registrar";s:52:"CSL COMPUTER SERVICE LANGENBACH GMBH D/B/A JOKER.COM";s:8:"referrer";s:20:"http://www.joker.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:17:"domain =joker.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:15:"whois.joker.com";s:4:"args";s:9:"joker.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:11:"moniker.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:6:{s:4:"name";s:11:"moniker.com";s:7:"nserver";a:4:{s:15:"ns1.moniker.com";s:13:"208.73.210.41";s:15:"ns2.moniker.com";s:13:"208.73.211.42";s:15:"ns3.moniker.com";s:11:"50.57.11.89";s:15:"ns4.moniker.com";s:11:"50.57.11.88";}s:6:"status";a:3:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2012-02-23";s:7:"created";s:10:"2004-03-18";s:7:"expires";s:10:"2015-03-04";}s:5:"owner";a:3:{s:5:"email";s:19:"domains@moniker.com";s:4:"name";s:14:"Domain Manager";s:7:"address";a:7:{i:1;s:28:"Moniker Online Services, LLC";i:2;s:15:"20 SW 27th Ave.";i:3;s:9:"Suite 201";i:4;s:13:"Pompano Beach";i:5;s:2:"FL";i:6;s:5:"33069";i:7;s:2:"US";}}s:5:"admin";a:5:{s:5:"email";s:19:"domains@moniker.com";s:4:"name";s:14:"Domain Manager";s:5:"phone";s:13:"+1.9549848445";s:3:"fax";s:13:"+1.9549699155";s:7:"address";a:7:{i:1;s:28:"Moniker Online Services, LLC";i:2;s:15:"20 SW 27th Ave.";i:3;s:9:"Suite 201";i:4;s:13:"Pompano Beach";i:5;s:2:"FL";i:6;s:5:"33069";i:7;s:2:"US";}}s:7:"billing";a:5:{s:5:"email";s:19:"domains@moniker.com";s:4:"name";s:14:"Domain Manager";s:5:"phone";s:13:"+1.9549848445";s:3:"fax";s:13:"+1.9549699155";s:7:"address";a:7:{i:1;s:28:"Moniker Online Services, LLC";i:2;s:15:"20 SW 27th Ave.";i:3;s:9:"Suite 201";i:4;s:13:"Pompano Beach";i:5;s:2:"FL";i:6;s:5:"33069";i:7;s:2:"US";}}s:4:"tech";a:5:{s:5:"email";s:19:"domains@moniker.com";s:4:"name";s:14:"Domain Manager";s:5:"phone";s:13:"+1.9549848445";s:3:"fax";s:13:"+1.9549699155";s:7:"address";a:7:{i:1;s:28:"Moniker Online Services, LLC";i:2;s:15:"20 SW 27th Ave.";i:3;s:9:"Suite 201";i:4;s:13:"Pompano Beach";i:5;s:2:"FL";i:6;s:5:"33069";i:7;s:2:"US";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:29:"MONIKER ONLINE SERVICES, INC.";s:8:"referrer";s:22:"http://www.moniker.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:19:"domain =moniker.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:17:"whois.moniker.com";s:4:"args";s:11:"moniker.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:13:"namejuice.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:4:"name";s:13:"namejuice.com";s:7:"nserver";a:4:{s:22:"dns1.nameresolvers.com";s:13:"216.13.106.28";s:22:"dns2.nameresolvers.com";s:13:"216.13.106.29";s:22:"dns3.nameresolvers.com";s:12:"64.34.231.21";s:22:"dns4.nameresolvers.com";s:12:"64.34.231.22";}s:6:"status";a:2:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";}s:7:"changed";s:10:"2011-03-08";s:7:"created";s:10:"2003-10-09";s:7:"expires";s:10:"2013-10-09";s:7:"sponsor";s:26:"Domain Registry of America";}s:5:"owner";a:6:{s:5:"phone";s:13:"+1.9054152681";s:3:"fax";s:13:"+1.9054152682";s:5:"email";s:23:"registrar@namejuice.com";s:4:"name";s:19:"Domain Registrar";s:12:"organization";s:35:"Brandon Gray Internet Services Inc.";s:7:"address";a:4:{i:0;s:15:"7100 Warden Ave";i:1;s:6:"Unit 8";i:2;s:7:"Markham";i:3;s:19:"ON, L3R 8B5 CA";}}s:5:"admin";a:6:{s:5:"phone";s:13:"+1.9054152681";s:3:"fax";s:13:"+1.9054152682";s:5:"email";s:23:"registrar@namejuice.com";s:4:"name";s:19:"Domain Registrar";s:12:"organization";s:35:"Brandon Gray Internet Services Inc.";s:7:"address";a:4:{i:0;s:15:"7100 Warden Ave";i:1;s:6:"Unit 8";i:2;s:7:"Markham";i:3;s:19:"ON, L3R 8B5 CA";}}s:4:"tech";a:6:{s:5:"phone";s:13:"+1.9054152681";s:3:"fax";s:13:"+1.9054152682";s:5:"email";s:23:"registrar@namejuice.com";s:4:"name";s:19:"Domain Registrar";s:12:"organization";s:35:"Brandon Gray Internet Services Inc.";s:7:"address";a:4:{i:0;s:15:"7100 Warden Ave";i:1;s:6:"Unit 8";i:2;s:7:"Markham";i:3;s:19:"ON, L3R 8B5 CA";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:54:"BRANDON GRAY INTERNET SERVICES, INC. DBA NAMEJUICE.COM";s:8:"referrer";s:24:"http://www.namejuice.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:21:"domain =namejuice.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:19:"whois.namejuice.com";s:4:"args";s:13:"namejuice.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:15:"namesdirect.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:4:"name";s:15:"namesdirect.com";s:7:"nserver";a:2:{s:19:"ns1.namesdirect.com";s:13:"64.94.117.194";s:19:"ns2.namesdirect.com";s:12:"63.251.83.81";}s:6:"status";a:3:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2011-09-27";s:7:"created";s:10:"2002-06-12";s:7:"expires";s:10:"2012-10-27";s:7:"sponsor";s:11:"NAMESDIRECT";}s:5:"owner";a:2:{s:4:"name";s:12:"Dotster Inc.";s:7:"address";a:4:{i:0;s:18:"8100 NE Parkway DR";i:1;s:9:"Suite 300";i:2;s:20:"Vancouver, WA 98662";i:3;s:2:"US";}}s:5:"admin";a:5:{s:5:"email";s:17:"legal@dotster.com";s:4:"name";s:13:"Domain Admin,";s:5:"phone";s:12:"360-253-2210";s:3:"fax";s:12:"360-253-4234";s:7:"address";a:5:{i:1;s:12:"Dotster Inc.";i:2;s:18:"8100 NE Parkway DR";i:3;s:9:"Suite 300";i:4;s:20:"Vancouver, WA 98662";i:5;s:2:"US";}}s:4:"tech";a:5:{s:5:"email";s:17:"legal@dotster.com";s:4:"name";s:13:"Domain Admin,";s:5:"phone";s:12:"360-253-2210";s:3:"fax";s:12:"360-253-4234";s:7:"address";a:5:{i:1;s:12:"Dotster Inc.";i:2;s:18:"8100 NE Parkway DR";i:3;s:9:"Suite 300";i:4;s:20:"Vancouver, WA 98662";i:5;s:2:"US";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:14:"MYDOMAIN, INC.";s:8:"referrer";s:22:"http://www.dotster.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:23:"domain =namesdirect.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:17:"whois.dotster.com";s:4:"args";s:15:"namesdirect.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:20:"networksolutions.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:20:"networksolutions.com";s:7:"nserver";a:3:{s:14:"ns1.netsol.com";s:15:"205.178.190.164";s:14:"ns2.netsol.com";s:14:"206.188.199.44";s:14:"ns3.netsol.com";s:15:"205.178.190.165";}s:6:"status";a:6:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";i:3;s:22:"serverDeleteProhibited";i:4;s:24:"serverTransferProhibited";i:5;s:22:"serverUpdateProhibited";}s:7:"changed";s:10:"2012-02-07";s:7:"created";s:10:"1998-04-27";s:7:"expires";s:10:"2021-04-27";}s:5:"owner";a:3:{s:4:"name";s:21:"LLC, networksolutions";s:12:"organization";s:21:"Network Solutions LLC";s:7:"address";a:3:{i:0;s:37:"13861 Sunrise Valley Drive, Suite 300";i:1;s:17:"HERNDON, VA 20171";i:2;s:2:"US";}}s:5:"admin";a:6:{s:5:"email";s:34:"nocsupervisor@networksolutions.com";s:4:"name";s:21:"LLC, networksolutions";s:3:"fax";s:12:"703-668-5817";s:5:"phone";s:12:"703-668-4900";s:12:"organization";s:21:"Network Solutions LLC";s:7:"address";a:3:{i:0;s:37:"13861 Sunrise Valley Drive, Suite 300";i:1;s:17:"HERNDON, VA 20171";i:2;s:2:"US";}}s:4:"tech";a:6:{s:5:"email";s:34:"nocsupervisor@networksolutions.com";s:4:"name";s:21:"LLC, networksolutions";s:3:"fax";s:12:"703-668-5817";s:5:"phone";s:12:"703-668-4900";s:12:"organization";s:21:"Network Solutions LLC";s:7:"address";a:3:{i:0;s:37:"13861 Sunrise Valley Drive, Suite 300";i:1;s:17:"HERNDON, VA 20171";i:2;s:2:"US";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:23:"NETWORK SOLUTIONS, LLC.";s:8:"referrer";s:38:"http://www.networksolutions.com/en_US/";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:28:"domain =networksolutions.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:26:"whois.networksolutions.com";s:4:"args";s:20:"networksolutions.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:11:"nicline.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:11:"nicline.com";s:7:"nserver";a:2:{s:16:"dns1.nicline.com";s:14:"217.76.128.230";s:16:"dns2.nicline.com";s:14:"217.76.129.230";}s:6:"status";a:1:{i:0;s:24:"clientTransferProhibited";}s:7:"changed";s:10:"2010-11-16";s:7:"created";s:10:"2000-03-13";s:7:"expires";s:10:"2015-03-13";}s:5:"owner";a:4:{s:5:"email";s:19:"nicline@nicline.com";s:5:"phone";s:13:"+34 659950222";s:4:"name";s:28:"Nic Line, S.L. (SROW-69539)";s:7:"address";a:3:{i:0;s:53:"C/ Circunde nº 16, Polígono Industrial La Portalada";i:1;s:18:"Logrono La Rioja";i:2;s:10:"26006 ES";}}s:5:"admin";a:5:{s:5:"phone";s:9:"-2708304)";s:5:"email";s:19:"nicline@nicline.com";s:3:"fax";s:13:"+34 659950222";s:4:"name";s:22:"Nic Line, S.L. (SRCO";s:7:"address";a:4:{i:0;s:14:"Nic Line, S.L.";i:1;s:53:"C/ Circunde nº 16, Polígono Industrial La Portalada";i:2;s:19:"Logroño La Rioja";i:3;s:10:"26006 ES";}}s:4:"tech";a:5:{s:5:"phone";s:9:"-2708304)";s:5:"email";s:19:"nicline@nicline.com";s:3:"fax";s:13:"+34 659950222";s:4:"name";s:22:"Nic Line, S.L. (SRCO";s:7:"address";a:4:{i:0;s:14:"Nic Line, S.L.";i:1;s:53:"C/ Circunde nº 16, Polígono Industrial La Portalada";i:2;s:19:"Logroño La Rioja";i:3;s:10:"26006 ES";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:38:"ARSYS INTERNET, S.L. D/B/A NICLINE.COM";s:8:"referrer";s:22:"http://www.nicline.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:19:"domain =nicline.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:17:"whois.nicline.com";s:4:"args";s:11:"nicline.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:13:"nominalia.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:13:"nominalia.com";s:7:"nserver";a:2:{s:18:"dns1.nominalia.com";s:12:"81.88.57.102";s:18:"dns2.nominalia.com";s:13:"62.193.205.63";}s:6:"status";a:1:{i:0;s:24:"clientTransferProhibited";}s:7:"changed";s:10:"2009-12-23";s:7:"created";s:10:"1997-06-24";s:7:"expires";s:10:"2013-11-30";}s:5:"owner";a:2:{s:4:"name";s:23:"NOMINALIA INTERNET S.L.";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:45:"Josep Pla, 2. Torres Diagonal Litoral, B3, 3D";}s:4:"city";s:9:"Barcelona";s:5:"pcode";s:8:"ES-08019";s:7:"country";s:2:"ES";}}s:5:"admin";a:6:{s:12:"organization";s:23:"Nominalia Internet S.L.";s:4:"name";s:16:"Claudio Corbetta";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:45:"Josep Pla, 2. Torres Diagonal Litoral, B3, 3D";}s:4:"city";s:9:"Barcelona";s:5:"pcode";s:5:"08019";s:7:"country";s:2:"ES";}s:5:"email";s:24:"gestiontld@nominalia.com";s:5:"phone";s:14:"+34 935 074360";s:3:"fax";s:14:"+34 933 102360";}s:4:"tech";a:5:{s:12:"organization";s:24:"Nominalia Internet, S.L.";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:62:"Josep Pla, 2. Torres Diagonal Litoral. Edificio B3, planta 3-D";}s:4:"city";s:9:"Barcelona";s:5:"pcode";s:7:"E-08019";s:7:"country";s:2:"ES";}s:5:"email";s:21:"payment@nominalia.com";s:5:"phone";s:13:"+34.935074360";s:3:"fax";s:13:"+34.933102360";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:23:"NOMINALIA INTERNET S.L.";s:8:"referrer";s:24:"http://www.nominalia.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:21:"domain =nominalia.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:19:"whois.nominalia.com";s:4:"args";s:13:"nominalia.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:10:"tucows.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:4:"name";s:10:"tucows.com";s:7:"nserver";a:3:{s:14:"ns1.tucows.com";s:12:"216.40.47.20";s:14:"ns2.tucows.com";s:12:"64.98.148.15";s:14:"ns3.tucows.com";s:11:"64.99.96.32";}s:6:"status";a:5:{i:0;s:24:"clientTransferProhibited";i:1;s:22:"clientUpdateProhibited";i:2;s:22:"serverDeleteProhibited";i:3;s:24:"serverTransferProhibited";i:4;s:22:"serverUpdateProhibited";}s:7:"changed";s:10:"2011-08-07";s:7:"created";s:10:"1995-09-07";s:7:"expires";s:10:"2012-09-06";s:7:"sponsor";s:12:"TUCOWS, INC.";}s:5:"owner";a:2:{s:4:"name";s:13:"Tucows.com Co";s:7:"address";a:3:{i:0;s:15:"96 Mowat Avenue";i:1;s:23:"Toronto, Ontario M6K3M1";i:2;s:2:"CA";}}s:5:"admin";a:4:{s:5:"email";s:19:"dnsadmin@tucows.com";s:4:"name";s:18:"Administrator, DNS";s:5:"phone";s:18:"+1.4165350123x0000";s:7:"address";a:3:{i:1;s:15:"96 Mowat Avenue";i:2;s:23:"Toronto, Ontario M6K3M1";i:3;s:2:"CA";}}s:4:"tech";a:4:{s:5:"email";s:19:"dnsadmin@tucows.com";s:4:"name";s:18:"Administrator, DNS";s:5:"phone";s:18:"+1.4165350123x0000";s:7:"address";a:3:{i:1;s:15:"96 Mowat Avenue";i:2;s:23:"Toronto, Ontario M6K3M1";i:3;s:2:"CA";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:14:"TUCOWS.COM CO.";s:8:"referrer";s:29:"http://domainhelp.opensrs.net";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:18:"domain =tucows.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:16:"whois.tucows.com";s:4:"args";s:10:"tucows.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:12:"register.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:8:{s:4:"name";s:12:"register.com";s:7:"nserver";a:6:{s:16:"ns1.register.com";s:13:"216.21.227.10";s:16:"ns2.register.com";s:13:"216.21.227.11";s:16:"ns3.register.com";s:13:"216.21.227.12";s:16:"ns4.register.com";s:13:"216.21.227.13";s:16:"ns5.register.com";s:13:"216.21.230.11";s:16:"ns6.register.com";s:13:"216.21.230.12";}s:6:"status";a:6:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";i:3;s:22:"serverDeleteProhibited";i:4;s:24:"serverTransferProhibited";i:5;s:22:"serverUpdateProhibited";}s:7:"changed";s:10:"2010-09-14";s:7:"created";s:10:"1994-11-01";s:7:"expires";s:10:"2019-08-04";s:7:"sponsor";s:12:"Register.com";s:8:"referrer";s:16:"www.register.com";}s:5:"owner";a:4:{s:5:"phone";s:13:"+1.9027492701";s:5:"email";s:28:"domainregistrar@register.com";s:4:"name";s:18:"Register.Com, Inc.";s:7:"address";a:4:{i:0;s:16:"Domain Registrar";i:1;s:14:"575 8th Avenue";i:2;s:18:"New York, NY 10018";i:3;s:2:"US";}}s:5:"admin";a:4:{s:5:"phone";s:13:"+1.9027492701";s:5:"email";s:28:"domainregistrar@register.com";s:4:"name";s:18:"Register.Com, Inc.";s:7:"address";a:4:{i:0;s:16:"Domain Registrar";i:1;s:14:"575 8th Avenue";i:2;s:18:"New York, NY 10018";i:3;s:2:"US";}}s:4:"tech";a:4:{s:5:"phone";s:13:"+1.9027492701";s:5:"email";s:28:"domainregistrar@register.com";s:4:"name";s:18:"Register.Com, Inc.";s:7:"address";a:4:{i:0;s:16:"Domain Registrar";i:1;s:14:"575 8th Avenue";i:2;s:18:"New York, NY 10018";i:3;s:2:"US";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:18:"REGISTER.COM, INC.";s:8:"referrer";s:23:"http://www.register.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:20:"domain =register.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:18:"whois.register.com";s:4:"args";s:12:"register.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:11:"schlund.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:6:{s:4:"name";s:11:"schlund.com";s:7:"nserver";a:4:{s:19:"ns-1and1.ui-dns.biz";s:14:"217.160.81.200";s:19:"ns-1and1.ui-dns.com";s:14:"217.160.82.200";s:18:"ns-1and1.ui-dns.de";s:14:"217.160.80.200";s:19:"ns-1and1.ui-dns.org";s:14:"217.160.83.200";}s:6:"status";s:26:"CLIENT-TRANSFER-PROHIBITED";s:7:"changed";s:10:"2011-10-09";s:7:"created";s:10:"1996-10-10";s:7:"expires";s:10:"2012-10-09";}s:5:"owner";a:5:{s:4:"name";a:2:{s:5:"first";s:6:"Markus";s:4:"last";s:4:"Huhn";}s:12:"organization";s:15:"1&1 Internet AG";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:19:"Elgendorfer Str. 57";}s:5:"pcode";s:5:"56410";s:4:"city";s:9:"Montabaur";s:7:"country";s:2:"DE";}s:5:"phone";s:11:"+49.2602960";s:5:"email";s:19:"hostmaster@1und1.de";}s:5:"admin";a:5:{s:4:"name";a:2:{s:5:"first";s:6:"Markus";s:4:"last";s:4:"Huhn";}s:12:"organization";s:15:"1&1 Internet AG";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:19:"Elgendorfer Str. 57";}s:5:"pcode";s:5:"56410";s:4:"city";s:9:"Montabaur";s:7:"country";s:2:"DE";}s:5:"phone";s:11:"+49.2602960";s:5:"email";s:19:"hostmaster@1und1.de";}s:4:"tech";a:5:{s:4:"name";a:2:{s:5:"first";s:10:"Hostmaster";s:4:"last";s:11:"EINSUNDEINS";}s:12:"organization";s:15:"1&1 Internet AG";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:13:"Brauerstr. 48";}s:5:"pcode";s:5:"76135";s:4:"city";s:9:"Karlsruhe";s:7:"country";s:2:"DE";}s:5:"phone";s:16:"+49.721913747660";s:5:"email";s:19:"hostmaster@1und1.de";}s:7:"billing";a:5:{s:4:"name";a:2:{s:5:"first";s:10:"Hostmaster";s:4:"last";s:11:"EINSUNDEINS";}s:12:"organization";s:15:"1&1 Internet AG";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:13:"Brauerstr. 48";}s:5:"pcode";s:5:"76135";s:4:"city";s:9:"Karlsruhe";s:7:"country";s:2:"DE";}s:5:"phone";s:16:"+49.721913747660";s:5:"email";s:19:"hostmaster@1und1.de";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:17:"1 & 1 INTERNET AG";s:8:"referrer";s:29:"http://REGISTRAR.SCHLUND.INFO";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:19:"domain =schlund.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:18:"whois.schlund.info";s:4:"args";s:11:"schlund.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:9:"olsns.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:6:{s:4:"name";s:9:"olsns.com";s:7:"nserver";a:2:{s:14:"a.ns.olsns.com";s:12:"78.129.148.2";s:14:"b.ns.olsns.com";s:13:"82.98.162.142";}s:6:"status";a:1:{i:0;s:24:"clientTransferProhibited";}s:7:"changed";s:10:"2012-02-17";s:7:"created";s:10:"2001-02-21";s:7:"expires";s:10:"2013-02-21";}s:5:"owner";a:5:{s:5:"email";s:13:"domreg@ols.es";s:4:"name";s:27:"On-Line Services 2000, S.L.";s:5:"phone";s:11:"34902502975";s:12:"organization";s:27:"On-Line Services 2000, S.L.";s:7:"address";a:3:{i:0;s:16:"Pintor Vayreda 1";i:1;s:33:"Palau-Solita i Plegamans, 08184";i:2;s:2:"ES";}}s:5:"admin";a:5:{s:5:"email";s:13:"domreg@ols.es";s:4:"name";s:10:"David Saez";s:5:"phone";s:13:"+34 902502975";s:12:"organization";s:27:"On-Line Services 2000, S.L.";s:7:"address";a:3:{i:0;s:16:"Pintor Vayreda 1";i:1;s:37:"Palau-Solita i Plegamans, NONE 08184";i:2;s:2:"ES";}}s:4:"tech";a:5:{s:5:"email";s:13:"domreg@ols.es";s:4:"name";s:10:"David Saez";s:5:"phone";s:13:"+34 902502975";s:12:"organization";s:27:"On-Line Services 2000, S.L.";s:7:"address";a:3:{i:0;s:16:"Pintor Vayreda 1";i:1;s:37:"Palau-Solita i Plegamans, NONE 08184";i:2;s:2:"ES";}}s:7:"billing";a:5:{s:5:"email";s:13:"domreg@ols.es";s:4:"name";s:10:"David Saez";s:5:"phone";s:13:"+34 902502975";s:12:"organization";s:27:"On-Line Services 2000, S.L.";s:7:"address";a:3:{i:0;s:16:"Pintor Vayreda 1";i:1;s:37:"Palau-Solita i Plegamans, NONE 08184";i:2;s:2:"ES";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:21:"TLDS, LLC DBA SRSPLUS";s:8:"referrer";s:22:"http://www.srsplus.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:17:"domain =olsns.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:17:"whois.srsplus.com";s:4:"args";s:9:"olsns.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:12:"stargate.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:6:{s:4:"name";s:12:"stargate.com";s:7:"nserver";a:2:{s:20:"dns1.stargateinc.net";s:11:"67.96.171.4";s:20:"dns2.stargateinc.net";s:11:"67.96.171.6";}s:6:"status";s:6:"LOCKED";s:7:"changed";s:10:"2008-04-29";s:7:"created";s:10:"1986-08-05";s:7:"expires";s:10:"2015-08-04";}s:10:"registered";s:3:"yes";s:5:"owner";a:6:{s:5:"email";s:24:"tchaffin@stargateinc.com";s:4:"name";s:23:"Stargate Holdings Corp.";s:5:"phone";s:13:"+1.6303691651";s:3:"fax";s:13:"+1.6303694663";s:12:"organization";s:14:"Not Applicable";s:7:"address";a:4:{i:0;s:14:"40 Shuman Blvd";i:1;s:10:"Naperville";i:2;s:8:"IL,60563";i:3;s:2:"US";}}s:5:"admin";a:6:{s:5:"email";s:17:"tomc@stargate.com";s:4:"name";s:5:"Tom C";s:5:"phone";s:13:"+1.6303691651";s:3:"fax";s:13:"+1.6303694663";s:12:"organization";s:14:"Not Applicable";s:7:"address";a:4:{i:0;s:14:"40 Shuman Blvd";i:1;s:10:"Naperville";i:2;s:8:"IL,60563";i:3;s:2:"US";}}s:4:"tech";a:6:{s:5:"email";s:17:"tomc@stargate.com";s:4:"name";s:5:"Tom C";s:5:"phone";s:13:"+1.6303691651";s:3:"fax";s:13:"+1.6303694663";s:12:"organization";s:14:"Not Applicable";s:7:"address";a:4:{i:0;s:14:"40 Shuman Blvd";i:1;s:10:"Naperville";i:2;s:8:"IL,60563";i:3;s:2:"US";}}s:7:"billing";a:6:{s:5:"email";s:17:"tomc@stargate.com";s:4:"name";s:5:"Tom C";s:5:"phone";s:13:"+1.6303691651";s:3:"fax";s:13:"+1.6303694663";s:12:"organization";s:14:"Not Applicable";s:7:"address";a:4:{i:0;s:14:"40 Shuman Blvd";i:1;s:10:"Naperville";i:2;s:8:"IL,60563";i:3;s:2:"US";}}}s:8:"regyinfo";a:4:{s:9:"registrar";s:23:"STARGATE HOLDINGS CORP.";s:8:"referrer";s:26:"http://www.stargateinc.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:20:"domain =stargate.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:21:"whois.stargateinc.com";s:4:"args";s:12:"stargate.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"sex.tv";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:6:"sex.tv";s:7:"nserver";a:2:{s:18:"dns1.colosseum.com";s:12:"216.95.249.3";s:18:"dns2.colosseum.com";s:12:"216.95.249.4";}s:6:"status";s:22:"CLIENT-XFER-PROHIBITED";s:7:"changed";s:10:"2004-12-16";s:7:"created";s:10:"2002-07-23";s:7:"expires";s:10:"2022-07-23";}s:10:"registered";s:3:"yes";s:5:"owner";a:5:{s:5:"email";s:11:"info@sex.tv";s:4:"name";s:12:"Annetta Penn";s:12:"organization";s:24:"Blue Door Ventures, Inc.";s:5:"phone";s:15:"005999 734 1000";s:7:"address";a:3:{i:2;s:22:"Pasea Estate,Road Town";i:3;s:14:"Tortola, 0000";i:4;s:2:"VG";}}s:5:"admin";a:5:{s:5:"email";s:31:"info@sunsettradinglicensing.com";s:4:"name";s:63:"SUNSET TRADING AND LICENSING BV SUNSET TRADING AND LICENSING BV";s:12:"organization";s:31:"SUNSET TRADING AND LICENSING BV";s:5:"phone";s:17:"0031 20 640 96 06";s:7:"address";a:3:{i:2;s:18:"Startbaan 5A Suite";i:3;s:20:"Amstelveen, XP 1185";i:4;s:2:"NL";}}s:4:"tech";a:5:{s:5:"email";s:11:"info@sex.tv";s:4:"name";s:12:"Annetta Penn";s:12:"organization";s:24:"Blue Door Ventures, Inc.";s:5:"phone";s:15:"005999 734 1000";s:7:"address";a:3:{i:2;s:22:"Pasea Estate,Road Town";i:3;s:14:"Tortola, 0000";i:4;s:2:"VG";}}}s:8:"regyinfo";a:6:{s:9:"registrar";s:14:"TV CORPORATION";s:5:"whois";s:12:"whois.www.tv";s:8:"referrer";s:13:"http://www.tv";s:4:"args";s:6:"sex.tv";s:4:"port";i:43;s:4:"type";s:6:"domain";}}s:8:"nic.aero";a:2:{s:8:"regyinfo";a:4:{s:8:"referrer";s:19:"http://www.nic.aero";s:9:"registrar";s:61:"Societe Internationale de Telecommunications Aeronautiques SC";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:22:"aero.whois-servers.net";s:4:"args";s:8:"nic.aero";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}s:8:"regrinfo";a:6:{s:6:"domain";a:7:{s:6:"handle";s:9:"D122-AERO";s:4:"name";s:8:"nic.aero";s:7:"created";s:10:"2002-03-08";s:7:"sponsor";s:11:"SITA (9999)";s:6:"status";a:1:{i:0;s:2:"OK";}s:7:"referer";s:20:"http://www.sita.aero";s:7:"nserver";a:5:{s:25:"ns1.ams1.afilias-nst.info";s:12:"199.19.48.79";s:25:"ns1.hkg1.afilias-nst.info";s:12:"199.19.51.79";s:25:"ns1.mia1.afilias-nst.info";s:12:"199.19.52.79";s:25:"ns1.sea1.afilias-nst.info";s:12:"199.19.50.79";s:25:"ns1.yyz1.afilias-nst.info";s:12:"199.19.49.79";}}s:5:"owner";a:7:{s:6:"handle";s:12:"C223523-AERO";s:4:"name";s:12:".aero Office";s:12:"organization";s:7:"SITA SC";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:22:"26 chemin de Joinville";}s:4:"city";s:6:"Geneva";s:5:"state";s:2:"GE";s:5:"pcode";s:7:"CH-1216";s:7:"country";s:2:"CH";}s:5:"phone";s:13:"+41.227476000";s:3:"fax";s:13:"+41.227476333";s:5:"email";s:24:"aero.enquiries@sita.aero";}s:5:"admin";a:7:{s:6:"handle";s:12:"C223523-AERO";s:4:"name";s:12:".aero Office";s:12:"organization";s:7:"SITA SC";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:22:"26 chemin de Joinville";}s:4:"city";s:6:"Geneva";s:5:"state";s:2:"GE";s:5:"pcode";s:7:"CH-1216";s:7:"country";s:2:"CH";}s:5:"phone";s:13:"+41.227476000";s:3:"fax";s:13:"+41.227476333";s:5:"email";s:24:"aero.enquiries@sita.aero";}s:7:"billing";a:7:{s:6:"handle";s:12:"C223523-AERO";s:4:"name";s:12:".aero Office";s:12:"organization";s:7:"SITA SC";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:22:"26 chemin de Joinville";}s:4:"city";s:6:"Geneva";s:5:"state";s:2:"GE";s:5:"pcode";s:7:"CH-1216";s:7:"country";s:2:"CH";}s:5:"phone";s:13:"+41.227476000";s:3:"fax";s:13:"+41.227476333";s:5:"email";s:24:"aero.enquiries@sita.aero";}s:4:"tech";a:7:{s:6:"handle";s:13:"C7433457-AERO";s:4:"name";s:15:"Afilias Limited";s:12:"organization";s:15:"Afilias Limited";s:7:"address";a:4:{s:6:"street";a:3:{i:0;s:10:"Office 107";i:1;s:15:"3013 Lake Drive";i:2;s:8:"CityWest";}s:4:"city";s:6:"Dublin";s:5:"pcode";s:9:"Dublin 24";s:7:"country";s:2:"IE";}s:5:"phone";s:13:"+1.2157065700";s:3:"fax";s:13:"+1.2157065701";s:5:"email";s:20:"support@afilias.info";}s:10:"registered";s:3:"yes";}}s:12:"neulevel.biz";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:4:"name";s:12:"neulevel.biz";s:6:"handle";s:8:"D592-BIZ";s:7:"sponsor";s:18:"REGISTRY REGISTRAR";s:6:"status";a:6:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";i:3;s:22:"serverDeleteProhibited";i:4;s:24:"serverTransferProhibited";i:5;s:22:"serverUpdateProhibited";}s:7:"nserver";a:6:{s:18:"pdns1.ultradns.net";s:12:"204.74.108.1";s:18:"pdns2.ultradns.net";s:12:"204.74.109.1";s:18:"pdns3.ultradns.org";s:10:"199.7.68.1";s:18:"pdns4.ultradns.org";s:10:"199.7.69.1";s:19:"pdns5.ultradns.info";s:12:"204.74.114.1";s:20:"pdns6.ultradns.co.uk";s:12:"204.74.115.1";}s:7:"created";s:10:"2001-11-07";s:7:"expires";s:10:"2012-11-06";s:7:"changed";s:10:"2011-12-22";}s:5:"owner";a:7:{s:6:"handle";s:9:"NEULEVEL1";s:4:"name";s:13:"NeuStar, Inc.";s:12:"organization";s:13:"NeuStar, Inc.";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:19:"Loudoun Tech Center";i:1;s:22:"45980 Center Oak Plaza";}s:4:"city";s:8:"Sterling";s:5:"state";s:8:"Virginia";s:5:"pcode";s:5:"20166";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.5714345757";s:3:"fax";s:13:"+1.5714345758";s:5:"email";s:19:"support@NeuStar.biz";}s:5:"admin";a:7:{s:6:"handle";s:9:"NEULEVEL1";s:4:"name";s:13:"NeuStar, Inc.";s:12:"organization";s:13:"NeuStar, Inc.";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:19:"Loudoun Tech Center";i:1;s:22:"45980 Center Oak Plaza";}s:4:"city";s:8:"Sterling";s:5:"state";s:8:"Virginia";s:5:"pcode";s:5:"20166";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.5714345757";s:3:"fax";s:13:"+1.5714345758";s:5:"email";s:19:"support@NeuStar.biz";}s:7:"billing";a:7:{s:6:"handle";s:9:"NEULEVEL1";s:4:"name";s:13:"NeuStar, Inc.";s:12:"organization";s:13:"NeuStar, Inc.";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:19:"Loudoun Tech Center";i:1;s:22:"45980 Center Oak Plaza";}s:4:"city";s:8:"Sterling";s:5:"state";s:8:"Virginia";s:5:"pcode";s:5:"20166";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.5714345757";s:3:"fax";s:13:"+1.5714345758";s:5:"email";s:19:"support@NeuStar.biz";}s:4:"tech";a:7:{s:6:"handle";s:9:"NEULEVEL1";s:4:"name";s:13:"NeuStar, Inc.";s:12:"organization";s:13:"NeuStar, Inc.";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:19:"Loudoun Tech Center";i:1;s:22:"45980 Center Oak Plaza";}s:4:"city";s:8:"Sterling";s:5:"state";s:8:"Virginia";s:5:"pcode";s:5:"20166";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.5714345757";s:3:"fax";s:13:"+1.5714345758";s:5:"email";s:19:"support@NeuStar.biz";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:23:"http://www.neulevel.biz";s:9:"registrar";s:8:"NEULEVEL";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:21:"biz.whois-servers.net";s:4:"args";s:12:"neulevel.biz";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:8:"sex.coop";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:6:"handle";s:11:"33393D-COOP";s:4:"name";s:8:"sex.coop";s:7:"expires";s:10:"2007-09-15";s:6:"status";s:24:"clientTransferProhibited";s:7:"sponsor";s:16:"Domain Bank Inc.";s:7:"created";s:10:"2004-09-15";s:7:"changed";s:10:"2006-08-23";s:7:"nserver";a:2:{s:19:"dns3.domainbank.net";s:11:"64.94.31.73";s:19:"dns4.domainbank.net";s:13:"64.94.117.211";}}s:10:"registered";s:3:"yes";s:5:"owner";a:7:{s:6:"handle";s:11:"22379C-COOP";s:4:"name";s:14:"Chris Anderson";s:12:"organization";s:18:"Chris Anderson CPA";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:26:"5373 S. Green Street, #550";}s:4:"city";s:14:"Salt Lake City";s:5:"state";s:2:"UT";s:5:"pcode";s:5:"84123";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.8012321149";s:3:"fax";s:13:"+1.8012748543";s:5:"email";s:19:"chris@moneymind.com";}s:4:"tech";a:7:{s:6:"handle";s:11:"22381C-COOP";s:4:"name";s:14:"Chris Anderson";s:12:"organization";s:18:"Chris Anderson CPA";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:26:"5373 S. Green Street, #550";}s:4:"city";s:14:"Salt Lake City";s:5:"state";s:2:"UT";s:5:"pcode";s:5:"84123";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.8012321149";s:3:"fax";s:13:"+1.8012748543";s:5:"email";s:19:"chris@moneymind.com";}s:5:"admin";a:7:{s:6:"handle";s:11:"22380C-COOP";s:4:"name";s:14:"Chris Anderson";s:12:"organization";s:18:"Chris Anderson CPA";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:26:"5373 S. Green Street, #550";}s:4:"city";s:14:"Salt Lake City";s:5:"state";s:2:"UT";s:5:"pcode";s:5:"84123";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.8012321149";s:3:"fax";s:13:"+1.8012748543";s:5:"email";s:19:"chris@moneymind.com";}s:7:"billing";a:7:{s:6:"handle";s:11:"22382C-COOP";s:4:"name";s:14:"Chris Anderson";s:12:"organization";s:18:"Chris Anderson CPA";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:26:"5373 S. Green Street, #550";}s:4:"city";s:14:"Salt Lake City";s:5:"state";s:2:"UT";s:5:"pcode";s:5:"84123";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.8012321149";s:3:"fax";s:13:"+1.8012748543";s:5:"email";s:19:"chris@moneymind.com";}}s:8:"regyinfo";a:2:{s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:22:"coop.whois-servers.net";s:4:"args";s:8:"sex.coop";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:8:"nic.coop";a:2:{s:8:"regrinfo";a:3:{s:6:"domain";a:2:{s:4:"name";s:8:"nic.coop";s:7:"nserver";a:5:{s:16:"ns4.mydyndns.org";s:12:"91.198.22.76";s:16:"ns5.mydyndns.org";s:13:"203.62.195.76";s:16:"ns2.mydyndns.org";s:13:"204.13.249.76";s:16:"ns1.mydyndns.org";s:13:"204.13.248.76";s:16:"ns3.mydyndns.org";s:12:"208.78.69.76";}}s:10:"registered";s:3:"yes";s:5:"owner";a:5:{s:4:"name";s:10:"Neil Homer";s:12:"organization";s:24:"Midcounties Co-operative";s:7:"address";a:4:{s:6:"street";a:2:{i:0;s:17:"New Barclay House";i:1;s:11:"Botley Road";}s:4:"city";s:6:"Oxford";s:5:"pcode";s:6:"OX20HP";s:7:"country";s:14:"United Kingdom";}s:5:"phone";s:14:"+44.1865256297";s:5:"email";s:16:"support@nic.coop";}}s:8:"regyinfo";a:4:{s:8:"referrer";s:19:"http://www.nic.coop";s:9:"registrar";s:14:".coop registry";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:22:"coop.whois-servers.net";s:4:"args";s:8:"nic.coop";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:12:"berkeley.edu";a:2:{s:8:"regrinfo";a:5:{s:5:"owner";a:2:{s:4:"name";s:36:"University of California at Berkeley";s:7:"address";a:4:{i:0;s:32:"Information Systems & Technology";i:1;s:40:"Telecommunications - 2484 Shattuck #4894";i:2;s:23:"Berkeley, CA 94720-4894";i:3;s:13:"UNITED STATES";}}s:5:"admin";a:4:{s:5:"phone";s:14:"(510) 642-0866";s:5:"email";s:20:"noc@nak.berkeley.edu";s:4:"name";s:7:"UCB NOC";s:7:"address";a:5:{i:0;s:34:"University of California, Berkeley";i:1;s:22:"IST-Telecommunications";i:2;s:24:"2484 Shattuck Ave, #4894";i:3;s:23:"Berkeley, CA 94720-4894";i:4;s:13:"UNITED STATES";}}s:4:"tech";a:4:{s:5:"phone";s:14:"(510) 642-0866";s:5:"email";s:20:"noc@nak.berkeley.edu";s:4:"name";s:7:"UCB NOC";s:7:"address";a:5:{i:0;s:34:"University of California, Berkeley";i:1;s:22:"IST-Telecommunications";i:2;s:24:"2484 Shattuck Ave, #4894";i:3;s:23:"Berkeley, CA 94720-4894";i:4;s:13:"UNITED STATES";}}s:6:"domain";a:4:{s:7:"nserver";a:6:{s:18:"adns1.berkeley.edu";s:12:"128.32.136.3";s:18:"adns2.berkeley.edu";s:13:"128.32.136.14";s:18:"phloem.uoregon.edu";s:13:"128.223.32.35";s:18:"ns.v6.berkeley.edu";s:12:"128.32.136.6";s:14:"sns-pb.isc.org";s:9:"192.5.4.1";s:19:"aodns1.berkeley.edu";s:14:"192.35.225.133";}s:7:"created";s:10:"1985-04-24";s:7:"changed";s:10:"2012-03-06";s:4:"name";s:12:"berkeley.edu";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:25:"http://whois.educause.net";s:9:"registrar";s:7:"EDUCASE";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:21:"edu.whois-servers.net";s:4:"args";s:12:"berkeley.edu";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:12:"afilias.info";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:6:"handle";s:9:"D217-LRMS";s:4:"name";s:12:"afilias.info";s:7:"created";s:10:"2001-07-25";s:7:"changed";s:10:"2011-07-25";s:7:"expires";s:10:"2021-07-25";s:7:"sponsor";s:24:"Afilias Ltd. (R145-LRMS)";s:6:"status";a:1:{i:0;s:2:"OK";}s:7:"nserver";a:5:{s:25:"ns1.ams1.afilias-nst.info";s:12:"199.19.48.79";s:25:"ns1.mia1.afilias-nst.info";s:12:"199.19.52.79";s:25:"ns1.sea1.afilias-nst.info";s:12:"199.19.50.79";s:25:"ns1.yyz1.afilias-nst.info";s:12:"199.19.49.79";s:25:"ns1.hkg1.afilias-nst.info";s:12:"199.19.51.79";}}s:5:"owner";a:7:{s:6:"handle";s:9:"C270-LRMS";s:4:"name";s:15:"Afilias Limited";s:12:"organization";s:12:"Afilias Ltd.";s:7:"address";a:4:{s:6:"street";a:3:{i:0;s:15:"3013 Lake Drive";i:1;s:10:"Office 107";i:2;s:8:"CityWest";}s:4:"city";s:6:"Dublin";s:5:"pcode";s:2:"24";s:7:"country";s:2:"IE";}s:5:"phone";s:16:"+011.35314693700";s:3:"fax";s:13:"+1.2157065701";s:5:"email";s:20:"support@afilias.info";}s:5:"admin";a:7:{s:6:"handle";s:9:"C270-LRMS";s:4:"name";s:15:"Afilias Limited";s:12:"organization";s:12:"Afilias Ltd.";s:7:"address";a:4:{s:6:"street";a:3:{i:0;s:15:"3013 Lake Drive";i:1;s:10:"Office 107";i:2;s:8:"CityWest";}s:4:"city";s:6:"Dublin";s:5:"pcode";s:2:"24";s:7:"country";s:2:"IE";}s:5:"phone";s:16:"+011.35314693700";s:3:"fax";s:13:"+1.2157065701";s:5:"email";s:20:"support@afilias.info";}s:7:"billing";a:7:{s:6:"handle";s:9:"C270-LRMS";s:4:"name";s:15:"Afilias Limited";s:12:"organization";s:12:"Afilias Ltd.";s:7:"address";a:4:{s:6:"street";a:3:{i:0;s:15:"3013 Lake Drive";i:1;s:10:"Office 107";i:2;s:8:"CityWest";}s:4:"city";s:6:"Dublin";s:5:"pcode";s:2:"24";s:7:"country";s:2:"IE";}s:5:"phone";s:16:"+011.35314693700";s:3:"fax";s:13:"+1.2157065701";s:5:"email";s:20:"support@afilias.info";}s:4:"tech";a:7:{s:6:"handle";s:9:"C270-LRMS";s:4:"name";s:15:"Afilias Limited";s:12:"organization";s:12:"Afilias Ltd.";s:7:"address";a:4:{s:6:"street";a:3:{i:0;s:15:"3013 Lake Drive";i:1;s:10:"Office 107";i:2;s:8:"CityWest";}s:4:"city";s:6:"Dublin";s:5:"pcode";s:2:"24";s:7:"country";s:2:"IE";}s:5:"phone";s:16:"+011.35314693700";s:3:"fax";s:13:"+1.2157065701";s:5:"email";s:20:"support@afilias.info";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:25:"http://whois.afilias.info";s:9:"registrar";s:32:"Afilias Global Registry Services";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:22:"info.whois-servers.net";s:4:"args";s:12:"afilias.info";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:7:"who.int";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:5:{s:4:"name";s:7:"who.int";s:7:"nserver";a:5:{s:17:"ext-dns-2.cern.ch";s:13:"192.91.245.85";s:16:"ns1.wpro.who.int";s:13:"123.176.64.11";s:15:"whqdns1.who.int";s:12:"158.232.12.5";s:15:"whqdns2.who.int";s:12:"158.232.12.6";s:15:"whqdns3.who.int";s:14:"193.220.114.96";}s:7:"created";s:10:"1998-06-05";s:7:"changed";s:10:"2007-06-22";s:6:"source";s:4:"IANA";}s:5:"owner";a:2:{s:12:"organization";s:31:"World Health Organization (WHO)";s:7:"address";a:1:{s:6:"street";a:4:{i:0;s:16:"20, Avenue Appia";i:1;s:9:"Geneva 27";i:2;s:21:"Geneva Geneva CH-1211";i:3;s:11:"Switzerland";}}}s:5:"admin";a:5:{s:4:"name";s:23:"WHO-HQ-NOC (at ITS/NTS)";s:7:"address";a:1:{s:6:"street";a:4:{i:0;s:16:"20, Avenue Appia";i:1;s:9:"Geneva 27";i:2;s:15:"Geneva CH-1211";i:3;s:11:"Switzerland";}}s:5:"phone";s:15:"+41 22 791 2411";s:3:"fax";s:15:"+41 22 791 4779";s:5:"email";s:18:"hostmaster@who.int";}s:4:"tech";a:5:{s:4:"name";s:23:"WHO-HQ-NOC (at ITS/NTS)";s:7:"address";a:1:{s:6:"street";a:4:{i:0;s:16:"20, Avenue Appia";i:1;s:9:"Geneva 27";i:2;s:15:"Geneva CH-1211";i:3;s:11:"Switzerland";}}s:5:"phone";s:15:"+41 22 791 2411";s:3:"fax";s:15:"+41 22 791 4779";s:5:"email";s:18:"hostmaster@who.int";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:35:"http://www.iana.org/int-dom/int.htm";s:9:"registrar";s:35:"Internet Assigned Numbers Authority";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:21:"int.whois-servers.net";s:4:"args";s:7:"who.int";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:10:"nic.museum";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:6:"handle";s:15:"D6137640-MUSEUM";s:4:"name";s:10:"nic.museum";s:7:"sponsor";s:19:"CORE-904 (Musedoma)";s:7:"created";s:10:"2005-04-02";s:7:"expires";s:10:"2015-04-02";s:7:"referer";s:22:"http://musedoma.museum";s:6:"status";a:1:{i:0;s:2:"ok";}s:7:"nserver";a:2:{s:12:"nic.icom.org";s:16:"(DOES NOT EXIST)";s:10:"nic.frd.se";s:11:"46.21.104.9";}}s:5:"owner";a:5:{s:6:"handle";s:11:"C728-MUSEUM";s:4:"name";s:9:"Cary Karp";s:12:"organization";s:36:"Museum Domain Management Association";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:17:"Frescativaegen 40";}s:4:"city";s:9:"Stockholm";s:5:"pcode";s:6:"104 05";s:7:"country";s:2:"SE";}s:5:"email";s:13:"ck@nic.museum";}s:5:"admin";a:5:{s:6:"handle";s:11:"C728-MUSEUM";s:4:"name";s:9:"Cary Karp";s:12:"organization";s:36:"Museum Domain Management Association";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:17:"Frescativaegen 40";}s:4:"city";s:9:"Stockholm";s:5:"pcode";s:6:"104 05";s:7:"country";s:2:"SE";}s:5:"email";s:13:"ck@nic.museum";}s:4:"tech";a:5:{s:6:"handle";s:11:"C728-MUSEUM";s:4:"name";s:9:"Cary Karp";s:12:"organization";s:36:"Museum Domain Management Association";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:17:"Frescativaegen 40";}s:4:"city";s:9:"Stockholm";s:5:"pcode";s:6:"104 05";s:7:"country";s:2:"SE";}s:5:"email";s:13:"ck@nic.museum";}s:7:"billing";a:5:{s:6:"handle";s:11:"C728-MUSEUM";s:4:"name";s:9:"Cary Karp";s:12:"organization";s:36:"Museum Domain Management Association";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:17:"Frescativaegen 40";}s:4:"city";s:9:"Stockholm";s:5:"pcode";s:6:"104 05";s:7:"country";s:2:"SE";}s:5:"email";s:13:"ck@nic.museum";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:22:"http://musedoma.museum";s:9:"registrar";s:36:"Museum Domain Management Association";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:24:"museum.whois-servers.net";s:4:"args";s:10:"nic.museum";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:17:"peter.morgan.name";a:2:{s:8:"regrinfo";a:2:{s:6:"domain";a:2:{s:4:"name";s:17:"peter.morgan.name";s:6:"status";a:1:{i:0;s:2:"ok";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:20:"http://www.nic.name/";s:9:"registrar";s:20:"Global Name Registry";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:22:"name.whois-servers.net";s:4:"args";s:17:"peter.morgan.name";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:11:"example.org";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:8:{s:6:"handle";s:13:"D2328855-LROR";s:4:"name";s:11:"example.org";s:7:"created";s:10:"1995-08-31";s:7:"changed";s:10:"2010-07-27";s:7:"expires";s:10:"2010-08-30";s:7:"sponsor";s:54:"Internet Assigned Numbers Authority (IANA) (R193-LROR)";s:6:"status";a:4:{i:0;s:17:"DELETE PROHIBITED";i:1;s:16:"RENEW PROHIBITED";i:2;s:19:"TRANSFER PROHIBITED";i:3;s:17:"UPDATE PROHIBITED";}s:7:"nserver";a:2:{s:18:"a.iana-servers.net";s:13:"199.43.132.53";s:18:"b.iana-servers.net";s:13:"199.43.133.53";}}s:5:"owner";a:7:{s:6:"handle";s:4:"IANA";s:4:"name";s:35:"Internet Assigned Numbers Authority";s:12:"organization";s:42:"Internet Assigned Numbers Authority (IANA)";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:18:"4676 Admiralty Way";i:1;s:9:"Suite 330";}s:4:"city";s:14:"Marina del Rey";s:5:"state";s:2:"CA";s:5:"pcode";s:5:"92092";s:7:"country";s:2:"US";}s:5:"phone";s:13:"+1.3108239358";s:3:"fax";s:13:"+1.3108238649";s:5:"email";s:16:"res-dom@iana.org";}s:5:"admin";a:7:{s:6:"handle";s:4:"IANA";s:4:"name";s:35:"Internet Assigned Numbers Authority";s:12:"organization";s:42:"Internet Assigned Numbers Authority (IANA)";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:18:"4676 Admiralty Way";i:1;s:9:"Suite 330";}s:4:"city";s:14:"Marina del Rey";s:5:"state";s:2:"CA";s:5:"pcode";s:5:"92092";s:7:"country";s:2:"US";}s:5:"phone";s:13:"+1.3108239358";s:3:"fax";s:13:"+1.3108238649";s:5:"email";s:16:"res-dom@iana.org";}s:4:"tech";a:7:{s:6:"handle";s:4:"IANA";s:4:"name";s:35:"Internet Assigned Numbers Authority";s:12:"organization";s:42:"Internet Assigned Numbers Authority (IANA)";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:18:"4676 Admiralty Way";i:1;s:9:"Suite 330";}s:4:"city";s:14:"Marina del Rey";s:5:"state";s:2:"CA";s:5:"pcode";s:5:"92092";s:7:"country";s:2:"US";}s:5:"phone";s:13:"+1.3108239358";s:3:"fax";s:13:"+1.3108238649";s:5:"email";s:16:"res-dom@iana.org";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:19:"http://www.pir.org/";s:9:"registrar";s:24:"Public Interest Registry";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:21:"org.whois-servers.net";s:4:"args";s:11:"example.org";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:15:"registrypro.pro";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:8:{s:6:"handle";s:10:"DN2341-RSC";s:4:"name";s:15:"registrypro.pro";s:7:"created";s:10:"2004-08-18";s:7:"changed";s:10:"2009-01-16";s:7:"expires";s:10:"2016-01-26";s:7:"sponsor";s:49:"Registry Services Corporation, d.b.a. RegistryPro";s:6:"status";a:1:{i:0;s:22:"serverDeleteProhibited";}s:7:"nserver";a:4:{s:10:"a.gtld.pro";s:13:"192.149.62.10";s:10:"b.gtld.pro";s:13:"192.149.63.10";s:10:"c.gtld.pro";s:13:"192.149.64.10";s:10:"d.gtld.pro";s:13:"192.149.66.10";}}s:5:"owner";a:6:{s:6:"handle";s:5:"RSC-1";s:4:"name";s:15:"Afilias Limited";s:12:"organization";s:15:"Afilias Limited";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:17:"2 La Touche House";}s:4:"city";s:6:"Dublin";s:5:"state";s:2:"IL";s:5:"pcode";s:1:"1";s:7:"country";s:2:"IE";}s:5:"phone";s:13:"+353.14310511";s:5:"email";s:24:"domainadmin@afilias.info";}s:5:"admin";a:6:{s:6:"handle";s:5:"RSC-1";s:4:"name";s:15:"Afilias Limited";s:12:"organization";s:15:"Afilias Limited";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:17:"2 La Touche House";}s:4:"city";s:6:"Dublin";s:5:"state";s:2:"IL";s:5:"pcode";s:1:"1";s:7:"country";s:2:"IE";}s:5:"phone";s:13:"+353.14310511";s:5:"email";s:24:"domainadmin@afilias.info";}s:4:"tech";a:6:{s:6:"handle";s:5:"RSC-1";s:4:"name";s:15:"Afilias Limited";s:12:"organization";s:15:"Afilias Limited";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:17:"2 La Touche House";}s:4:"city";s:6:"Dublin";s:5:"state";s:2:"IL";s:5:"pcode";s:1:"1";s:7:"country";s:2:"IE";}s:5:"phone";s:13:"+353.14310511";s:5:"email";s:24:"domainadmin@afilias.info";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:26:"http://www.registrypro.pro";s:9:"registrar";s:11:"RegistryPRO";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:18:"whois.registry.pro";s:4:"args";s:15:"registrypro.pro";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:12:"whois.travel";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:4:"name";s:12:"whois.travel";s:6:"handle";s:13:"D24097-TRAVEL";s:7:"sponsor";s:15:"NEUSTAR GATEWAY";s:6:"status";a:6:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";i:3;s:22:"serverDeleteProhibited";i:4;s:24:"serverTransferProhibited";i:5;s:22:"serverUpdateProhibited";}s:7:"nserver";a:6:{s:18:"pdns4.ultradns.org";s:10:"199.7.69.1";s:18:"pdns3.ultradns.org";s:10:"199.7.68.1";s:18:"pdns2.ultradns.net";s:12:"204.74.109.1";s:18:"pdns1.ultradns.net";s:12:"204.74.108.1";s:20:"pdns6.ultradns.co.uk";s:12:"204.74.115.1";s:19:"pdns5.ultradns.info";s:12:"204.74.114.1";}s:7:"created";s:10:"2004-10-00";s:7:"expires";s:10:"2003-10-00";s:7:"changed";s:10:"2022-11-00";}s:5:"owner";a:5:{s:6:"handle";s:10:"TRALLIANCE";s:4:"name";s:22:"Tralliance Corporation";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:33:"110 East Broward Blvd, 14th floor";}s:4:"city";s:15:"Fort Lauderdale";s:5:"state";s:2:"FL";s:5:"pcode";s:5:"33301";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.9547695999";s:5:"email";s:22:"info@tralliance.travel";}s:5:"admin";a:5:{s:6:"handle";s:10:"TRALLIANCE";s:4:"name";s:22:"Tralliance Corporation";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:33:"110 East Broward Blvd, 14th floor";}s:4:"city";s:15:"Fort Lauderdale";s:5:"state";s:2:"FL";s:5:"pcode";s:5:"33301";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.9547695999";s:5:"email";s:22:"info@tralliance.travel";}s:7:"billing";a:5:{s:6:"handle";s:10:"TRALLIANCE";s:4:"name";s:22:"Tralliance Corporation";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:33:"110 East Broward Blvd, 14th floor";}s:4:"city";s:15:"Fort Lauderdale";s:5:"state";s:2:"FL";s:5:"pcode";s:5:"33301";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.9547695999";s:5:"email";s:22:"info@tralliance.travel";}s:4:"tech";a:5:{s:6:"handle";s:10:"TRALLIANCE";s:4:"name";s:22:"Tralliance Corporation";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:33:"110 East Broward Blvd, 14th floor";}s:4:"city";s:15:"Fort Lauderdale";s:5:"state";s:2:"FL";s:5:"pcode";s:5:"33301";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.9547695999";s:5:"email";s:22:"info@tralliance.travel";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:22:"http://www.nic.travel/";s:9:"registrar";s:22:"Tralliance Corporation";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:24:"travel.whois-servers.net";s:4:"args";s:12:"whois.travel";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:10:"66.18.70.6";a:2:{s:8:"regrinfo";a:5:{s:10:"registered";s:3:"yes";s:5:"admin";a:7:{s:4:"name";s:13:"Nonge Maxwell";s:6:"handle";s:11:"NM9-AFRINIC";s:7:"address";a:5:{i:0;s:16:"Private Bag X06,";i:1;s:9:"Honeydew,";i:2;s:4:"2040";i:3;s:17:"Johannesburg 2040";i:4;s:12:"South Africa";}s:5:"email";a:2:{i:0;s:22:"netadmin@sentechsa.net";i:1;s:20:"nongem@sentech.co.za";}s:5:"phone";s:14:"+2711 471 4534";s:3:"fax";s:14:"+2711 471 4717";s:6:"source";s:18:"AFRINIC # Filtered";}s:4:"tech";a:7:{s:4:"name";s:13:"Nonge Maxwell";s:6:"handle";s:11:"NM9-AFRINIC";s:7:"address";a:5:{i:0;s:16:"Private Bag X06,";i:1;s:9:"Honeydew,";i:2;s:4:"2040";i:3;s:17:"Johannesburg 2040";i:4;s:12:"South Africa";}s:5:"email";a:2:{i:0;s:22:"netadmin@sentechsa.net";i:1;s:20:"nongem@sentech.co.za";}s:5:"phone";s:14:"+2711 471 4534";s:3:"fax";s:14:"+2711 471 4717";s:6:"source";s:18:"AFRINIC # Filtered";}s:7:"network";a:7:{s:7:"inetnum";s:25:"66.18.70.0 - 66.18.70.255";s:4:"name";s:15:"SENTECH-ISP9-ZA";s:7:"country";s:2:"ZA";s:6:"status";s:11:"ASSIGNED PA";s:6:"mnt-by";s:30:"TF-66-18-64-0-66-18-95-255-MNT";s:6:"source";s:18:"AFRINIC # Filtered";s:6:"parent";s:25:"66.18.64.0 - 66.18.95.255";}s:5:"owner";a:1:{s:12:"organization";s:22:"Sentech Ltd - ISP Mail";}}s:8:"regyinfo";a:3:{s:9:"registrar";s:34:"African Network Information Center";s:4:"type";s:2:"ip";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:14:"whois.arin.net";s:4:"args";s:12:"n 66.18.70.6";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:17:"whois.afrinic.net";s:4:"args";s:10:"66.18.70.6";s:4:"port";i:43;}}}}s:15:"218.165.121.114";a:2:{s:8:"regrinfo";a:5:{s:10:"registered";s:3:"yes";s:5:"admin";a:11:{s:4:"name";s:17:"HINET Network-Adm";s:7:"address";a:3:{i:0;s:32:"CHTD, Chunghwa Telecom Co., Ltd.";i:1;s:29:"No. 21, Sec. 21, Hsin-Yi Rd.,";i:2;s:17:"Taipei Taiwan 100";}s:7:"country";s:2:"TW";s:5:"phone";a:3:{i:0;s:16:"+886 2 2322 3495";i:1;s:16:"+886 2 2322 3442";i:2;s:16:"+886 2 2344 3007";}s:3:"fax";a:2:{i:0;s:16:"+886 2 2344 2513";i:1;s:16:"+886 2 2395 5671";}s:5:"email";s:21:"network-adm@hinet.net";s:6:"handle";s:7:"HN27-AP";s:7:"remarks";s:33:"same as TWNIC nic-handle HN184-TW";s:6:"mnt-by";s:14:"MAINT-TW-TWNIC";s:7:"changed";s:10:"2011-08-22";s:6:"source";s:5:"APNIC";}s:4:"tech";a:11:{s:4:"name";s:20:"HINET Network-Center";s:7:"address";a:3:{i:0;s:32:"CHTD, Chunghwa Telecom Co., Ltd.";i:1;s:45:"Data-Bldg. 6F, No. 21, Sec. 21, Hsin-Yi Rd.,";i:2;s:17:"Taipei Taiwan 100";}s:7:"country";s:2:"TW";s:5:"phone";a:3:{i:0;s:16:"+886 2 2322 3495";i:1;s:16:"+886 2 2322 3442";i:2;s:16:"+886 2 2344 3007";}s:3:"fax";a:2:{i:0;s:16:"+886 2 2344 2513";i:1;s:16:"+886 2 2395 5671";}s:5:"email";s:24:"network-center@hinet.net";s:6:"handle";s:7:"HN28-AP";s:7:"remarks";s:33:"same as TWNIC nic-handle HN185-TW";s:6:"mnt-by";s:14:"MAINT-TW-TWNIC";s:7:"changed";s:10:"2000-07-21";s:6:"source";s:5:"APNIC";}s:7:"network";a:8:{s:7:"inetnum";s:29:"218.160.0.0 - 218.175.255.255";s:4:"name";s:5:"HINET";s:7:"country";s:2:"TW";s:6:"mnt-by";s:14:"MAINT-TW-TWNIC";s:9:"mnt-lower";s:14:"MAINT-TW-TWNIC";s:7:"changed";s:10:"2002-10-09";s:6:"status";s:18:"ALLOCATED PORTABLE";s:6:"source";s:5:"APNIC";}s:5:"owner";a:2:{s:12:"organization";s:31:"CHTD, Chunghwa Telecom Co.,Ltd.";s:7:"address";a:2:{i:0;s:40:"Data-Bldg.6F, No.21, Sec.21, Hsin-Yi Rd.";i:1;s:17:"Taipei Taiwan 100";}}}s:8:"regyinfo";a:3:{s:9:"registrar";s:39:"Asia Pacific Network Information Centre";s:4:"type";s:2:"ip";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:14:"whois.arin.net";s:4:"args";s:17:"n 218.165.121.114";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:15:"whois.apnic.net";s:4:"args";s:15:"218.165.121.114";s:4:"port";i:43;}}}}s:14:"207.217.120.54";a:2:{s:8:"regrinfo";a:4:{s:7:"network";a:8:{s:7:"inetnum";s:29:"207.217.0.0 - 207.217.255.255";s:4:"name";s:14:"EARTHLINK-CIDR";s:6:"handle";s:17:"NET-207-217-0-0-1";s:6:"status";s:17:"Direct Allocation";s:7:"nserver";a:2:{s:19:"itchy.earthlink.net";s:14:"207.69.188.196";s:22:"scratchy.earthlink.net";s:14:"207.69.188.197";}s:4:"desc";a:1:{i:0;s:44:"ADDRESSES WITHIN THIS BLOCK ARE NON-PORTABLE";}s:7:"created";s:10:"2007-06-18";s:7:"changed";s:10:"2007-06-18";}s:5:"owner";a:3:{s:12:"organization";s:15:"EARTHLINK, Inc.";s:6:"handle";s:8:"EARTH-21";s:7:"address";a:5:{s:6:"street";s:7:"LEVEL A";s:4:"city";s:7:"ATLANTA";s:5:"state";s:2:"GA";s:5:"pcode";s:5:"30309";s:7:"country";s:2:"US";}}s:5:"abuse";a:4:{s:6:"handle";s:12:"ABUSE60-ARIN";s:4:"name";s:10:"ABUSE TEAM";s:5:"phone";s:15:"+1-404-815-0770";s:5:"email";s:25:"abuse@abuse.earthlink.net";}s:4:"tech";a:4:{s:6:"handle";s:9:"DAE4-ARIN";s:4:"name";s:35:"Domain Administrator, Administrator";s:5:"phone";s:15:"+1-404-815-0770";s:5:"email";s:26:"arinpoc@corp.earthlink.net";}}s:8:"regyinfo";a:3:{s:9:"registrar";s:45:"American Registry for Internet Numbers (ARIN)";s:4:"type";s:2:"ip";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:14:"whois.arin.net";s:4:"args";s:16:"n 207.217.120.54";s:4:"port";i:43;}}}}s:12:"70.84.47.210";a:2:{s:8:"regrinfo";a:4:{s:7:"network";a:6:{s:7:"inetnum";s:25:"70.84.0.0 - 70.87.255.255";s:4:"name";s:23:"NETBLK-THEPLANET-BLK-13";s:6:"handle";s:15:"NET-70-84-0-0-1";s:6:"status";s:17:"Direct Allocation";s:7:"created";s:10:"1999-08-31";s:7:"changed";s:10:"2010-10-13";}s:5:"owner";a:3:{s:12:"organization";s:37:"ThePlanet.com Internet Services, Inc.";s:6:"handle";s:4:"TPCM";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:11:"315 Capitol";i:1;s:9:"Suite 205";}s:4:"city";s:7:"Houston";s:5:"state";s:2:"TX";s:5:"pcode";s:5:"77002";s:7:"country";s:2:"US";}}s:4:"tech";a:4:{s:6:"handle";s:12:"TECHN33-ARIN";s:4:"name";s:17:"Technical Support";s:5:"phone";s:15:"+1-214-782-7800";s:5:"email";s:20:"admins@theplanet.com";}s:5:"abuse";a:4:{s:6:"handle";s:13:"ABUSE271-ARIN";s:4:"name";s:16:"The Planet Abuse";s:5:"phone";s:15:"+1-281-714-3560";s:5:"email";s:19:"abuse@theplanet.com";}}s:8:"regyinfo";a:3:{s:9:"registrar";s:45:"American Registry for Internet Numbers (ARIN)";s:4:"type";s:2:"ip";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:14:"whois.arin.net";s:4:"args";s:14:"n 70.84.47.210";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:20:"rwhois.theplanet.com";s:4:"args";s:12:"70.84.47.210";s:4:"port";s:4:"4321";}}}}s:14:"200.165.206.74";a:2:{s:8:"regrinfo";a:5:{s:10:"registered";s:3:"yes";s:5:"owner";a:5:{s:6:"handle";s:5:"HAOGO";s:4:"name";s:22:"Halliny Oliveira Gomes";s:5:"email";s:21:"thais.souza@oi.net.br";s:7:"created";s:10:"2006-06-20";s:7:"changed";s:10:"2002-12-20";}s:4:"tech";a:5:{s:6:"handle";s:5:"CGR13";s:4:"name";s:34:"Centro de Gerencia de Rede TELEMAR";s:5:"email";s:20:"abuse@telemar.net.br";s:7:"created";s:10:"2006-00-20";s:7:"changed";s:10:"2011-09-20";}s:5:"abuse";a:5:{s:6:"handle";s:5:"CGR13";s:4:"name";s:34:"Centro de Gerencia de Rede TELEMAR";s:5:"email";s:20:"abuse@telemar.net.br";s:7:"created";s:10:"2006-00-20";s:7:"changed";s:10:"2011-09-20";}s:7:"network";a:4:{s:7:"inetnum";s:10:"200.165/16";s:7:"nserver";a:2:{s:18:"ns4.telemar.net.br";s:12:"200.222.0.35";s:18:"ns2.telemar.net.br";s:14:"200.202.193.74";}s:7:"created";s:10:"2005-01-20";s:7:"changed";s:10:"2006-11-20";}}s:8:"regyinfo";a:3:{s:9:"registrar";s:57:"Latin American and Caribbean IP address Regional Registry";s:4:"type";s:2:"ip";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:14:"whois.arin.net";s:4:"args";s:16:"n 200.165.206.74";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:16:"whois.lacnic.net";s:4:"args";s:14:"200.165.206.74";s:4:"port";i:43;}}}}s:15:"210.178.148.129";a:2:{s:8:"regrinfo";a:4:{s:5:"owner";a:2:{s:12:"organization";s:20:"Korea Telecom-PUBNET";s:7:"address";a:1:{s:6:"street";s:30:"Jungja, Bundang-Gu, Sungnam-ci";}}s:5:"admin";a:3:{s:4:"name";s:16:"IP Administrator";s:5:"phone";s:14:"+82-2-500-6200";s:5:"email";s:14:"lyk1004@kt.com";}s:4:"tech";a:2:{s:4:"name";s:10:"IP Manager";s:5:"phone";s:14:"+82-2-500-6200";}s:5:"abuse";a:2:{s:4:"name";s:19:"Pubnet Abuse Manger";s:5:"phone";s:15:"+82-2-3674-5890";}}s:8:"regyinfo";a:3:{s:9:"registrar";s:33:"Korean Network Information Centre";s:4:"type";s:2:"ip";s:7:"servers";a:3:{i:0;a:3:{s:6:"server";s:14:"whois.arin.net";s:4:"args";s:17:"n 210.178.148.129";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:15:"whois.apnic.net";s:4:"args";s:15:"210.178.148.129";s:4:"port";i:43;}i:2;a:3:{s:6:"server";s:15:"whois.krnic.net";s:4:"args";s:15:"210.178.148.129";s:4:"port";i:43;}}}}s:12:"200.44.33.31";a:2:{s:8:"regrinfo";a:5:{s:10:"registered";s:3:"yes";s:5:"owner";a:7:{s:6:"handle";s:3:"LUM";s:4:"name";s:14:"Ramón Cabello";s:5:"email";s:17:"ipadmin@CANTV.NET";s:7:"address";a:3:{i:0;s:56:"Segunda Avenida de los Palos Grandes, Entre Av. Fr, 000,";i:1;s:19:"1060 - Caracas - MI";s:7:"country";s:2:"VE";}s:5:"phone";s:18:"+58 212 2095609 []";s:7:"created";s:10:"2009-02-20";s:7:"changed";s:10:"2002-11-20";}s:4:"tech";a:7:{s:6:"handle";s:3:"LUM";s:4:"name";s:14:"Ramón Cabello";s:5:"email";s:17:"ipadmin@CANTV.NET";s:7:"address";a:3:{i:0;s:56:"Segunda Avenida de los Palos Grandes, Entre Av. Fr, 000,";i:1;s:19:"1060 - Caracas - MI";s:7:"country";s:2:"VE";}s:5:"phone";s:18:"+58 212 2095609 []";s:7:"created";s:10:"2009-02-20";s:7:"changed";s:10:"2002-11-20";}s:5:"abuse";a:7:{s:6:"handle";s:3:"LUM";s:4:"name";s:14:"Ramón Cabello";s:5:"email";s:17:"ipadmin@CANTV.NET";s:7:"address";a:3:{i:0;s:56:"Segunda Avenida de los Palos Grandes, Entre Av. Fr, 000,";i:1;s:19:"1060 - Caracas - MI";s:7:"country";s:2:"VE";}s:5:"phone";s:18:"+58 212 2095609 []";s:7:"created";s:10:"2009-02-20";s:7:"changed";s:10:"2002-11-20";}s:7:"network";a:6:{s:7:"inetnum";s:9:"200.44/16";s:6:"status";s:9:"allocated";s:7:"nserver";a:2:{s:14:"dns1.cantv.net";s:12:"200.44.32.10";s:14:"dns2.cantv.net";s:13:"200.11.248.11";}s:7:"remarks";s:44:"ADDRESSES WITHIN THIS BLOCK ARE NON-PORTABLE";s:7:"created";s:10:"2003-19-98";s:7:"changed";s:10:"2001-02-20";}}s:8:"regyinfo";a:3:{s:9:"registrar";s:57:"Latin American and Caribbean IP address Regional Registry";s:4:"type";s:2:"ip";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:14:"whois.arin.net";s:4:"args";s:14:"n 200.44.33.31";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:16:"whois.lacnic.net";s:4:"args";s:12:"200.44.33.31";s:4:"port";i:43;}}}}s:13:"62.97.102.115";a:2:{s:8:"regrinfo";a:5:{s:10:"registered";s:3:"yes";s:5:"admin";a:6:{s:4:"name";s:11:"DAVID LOPEZ";s:7:"address";a:3:{i:0;s:15:"SHAKER BAND SL.";i:1;s:13:"C/ PANTOJA, 6";i:2;s:18:"Madrid,28002,Spain";}s:5:"phone";s:12:"+34915613719";s:6:"handle";s:11:"DL4016-RIPE";s:6:"mnt-by";s:15:"COLT-ESPANA-MNT";s:6:"source";s:15:"RIPE # Filtered";}s:4:"tech";a:6:{s:4:"name";s:11:"DAVID LOPEZ";s:7:"address";a:3:{i:0;s:15:"SHAKER BAND SL.";i:1;s:13:"C/ PANTOJA, 6";i:2;s:18:"Madrid,28002,Spain";}s:5:"phone";s:12:"+34915613719";s:6:"handle";s:11:"DL4016-RIPE";s:6:"mnt-by";s:15:"COLT-ESPANA-MNT";s:6:"source";s:15:"RIPE # Filtered";}s:7:"network";a:6:{s:7:"inetnum";s:29:"62.97.102.112 - 62.97.102.119";s:4:"name";s:21:"NET-ES-SHAKER-BAND-SL";s:7:"country";s:2:"ES";s:6:"status";s:11:"ASSIGNED PA";s:6:"mnt-by";s:15:"COLT-ESPANA-MNT";s:6:"source";s:15:"RIPE # Filtered";}s:5:"owner";a:1:{s:12:"organization";s:15:"SHAKER BAND SL.";}}s:8:"regyinfo";a:3:{s:9:"registrar";s:32:"RIPE Network Coordination Centre";s:4:"type";s:2:"ip";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:14:"whois.arin.net";s:4:"args";s:15:"n 62.97.102.115";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:14:"whois.ripe.net";s:4:"args";s:13:"62.97.102.115";s:4:"port";s:2:"43";}}}}s:5:"AS220";a:2:{s:8:"regrinfo";a:6:{s:5:"owner";a:3:{s:12:"organization";s:30:"754th Electronic Systems Group";s:6:"handle";s:4:"7ESG";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:18:"501 E. Moore Drive";}s:4:"city";s:17:"MAFB-Gunter Annex";s:5:"state";s:2:"AL";s:5:"pcode";s:5:"36114";s:7:"country";s:2:"US";}}s:4:"tech";a:4:{s:6:"handle";s:12:"REGIS10-ARIN";s:4:"name";s:12:"Registration";s:5:"phone";s:15:"+1-800-365-3642";s:5:"email";s:16:"registra@nic.mil";}s:5:"abuse";a:4:{s:6:"handle";s:12:"REGIS10-ARIN";s:4:"name";s:12:"Registration";s:5:"phone";s:15:"+1-800-365-3642";s:5:"email";s:16:"registra@nic.mil";}s:2:"AS";a:4:{s:4:"name";s:16:"OOALC-HOSTNET-AS";s:6:"handle";s:5:"AS220";s:7:"created";s:10:"2008-06-05";s:7:"changed";s:10:"2011-08-17";}s:6:"domain";a:1:{s:4:"name";s:5:"AS220";}s:10:"registered";s:7:"unknown";}s:8:"regyinfo";a:3:{s:9:"registrar";s:45:"American Registry for Internet Numbers (ARIN)";s:4:"type";s:2:"AS";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:14:"whois.arin.net";s:4:"args";s:5:"a 220";s:4:"port";i:43;}}}}s:16:"bulkregister.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:16:"bulkregister.com";s:7:"nserver";a:5:{s:22:"dns4.name-services.com";s:12:"64.74.96.242";s:22:"dns2.name-services.com";s:14:"216.52.184.230";s:22:"dns5.name-services.com";s:10:"70.42.37.1";s:22:"dns3.name-services.com";s:13:"63.251.92.193";s:22:"dns1.name-services.com";s:11:"69.25.142.1";}s:6:"status";s:24:"clientTransferProhibited";s:7:"changed";s:10:"2006-12-05";s:7:"created";s:10:"1999-09-08";s:7:"expires";s:10:"2012-09-08";}s:10:"registered";s:3:"yes";s:5:"admin";a:6:{s:5:"email";s:21:"paul.stahura@enom.com";s:4:"name";s:11:"DNS Manager";s:12:"organization";s:10:"eNom, Inc.";s:5:"phone";s:13:"+1.4258838860";s:3:"fax";s:13:"+1.4258833553";s:7:"address";a:4:{i:4;s:13:"P.O. Box 7449";i:5;s:30:"2002 156th Avenue NE, Ste. 300";i:6;s:18:"Bellevue, WA 98007";i:7;s:2:"US";}}s:4:"tech";a:6:{s:5:"email";s:21:"paul.stahura@enom.com";s:4:"name";s:11:"DNS Manager";s:12:"organization";s:10:"eNom, Inc.";s:5:"phone";s:13:"+1.4258838860";s:3:"fax";s:13:"+1.4258833553";s:7:"address";a:4:{i:4;s:13:"P.O. Box 7449";i:5;s:30:"2002 156th Avenue NE, Ste. 300";i:6;s:18:"Bellevue, WA 98007";i:7;s:2:"US";}}s:5:"owner";a:2:{s:4:"name";s:44:"Registration Service Provided By: eNom, Inc.";s:7:"address";a:1:{i:0;s:30:"Contact: paul.stahura@enom.com";}}}s:8:"regyinfo";a:6:{s:9:"registrar";s:18:"BULKREGISTER, LLC.";s:5:"whois";s:22:"whois.bulkregister.com";s:8:"referrer";s:27:"http://www.bulkregister.com";s:4:"args";s:17:"=bulkregister.com";s:4:"port";i:43;s:4:"type";s:6:"domain";}}s:11:"dominis.cat";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:6:"handle";s:11:"REG-D850193";s:4:"name";s:11:"dominis.cat";s:7:"sponsor";s:18:"R-2013 (InterNetX)";s:7:"created";s:10:"2011-06-14";s:7:"changed";s:10:"2011-10-08";s:7:"expires";s:10:"2012-06-14";s:6:"status";a:1:{i:0;s:24:"clientTransferProhibited";}s:7:"nserver";a:4:{s:20:"ns-244.awsdns-30.com";s:15:"205.251.192.244";s:23:"ns-1654.awsdns-14.co.uk";s:15:"205.251.198.118";s:20:"ns-837.awsdns-40.net";s:14:"205.251.195.69";s:21:"ns-1453.awsdns-53.org";s:15:"205.251.197.173";}}s:5:"owner";a:4:{s:6:"handle";s:13:"PSIU-11139880";s:4:"name";s:22:"Jordi Berrocoso Martin";s:12:"organization";s:11:"Dotbinc, SL";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:20:"AV/ Alfons XIII, 358";}s:4:"city";s:8:"Badalona";s:5:"state";s:2:"ES";s:5:"pcode";s:5:"08914";s:7:"country";s:2:"ES";}}s:5:"admin";a:4:{s:6:"handle";s:13:"PSIU-11139880";s:4:"name";s:22:"Jordi Berrocoso Martin";s:12:"organization";s:11:"Dotbinc, SL";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:20:"AV/ Alfons XIII, 358";}s:4:"city";s:8:"Badalona";s:5:"state";s:2:"ES";s:5:"pcode";s:5:"08914";s:7:"country";s:2:"ES";}}s:4:"tech";a:4:{s:6:"handle";s:13:"PSIU-11139880";s:4:"name";s:22:"Jordi Berrocoso Martin";s:12:"organization";s:11:"Dotbinc, SL";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:20:"AV/ Alfons XIII, 358";}s:4:"city";s:8:"Badalona";s:5:"state";s:2:"ES";s:5:"pcode";s:5:"08914";s:7:"country";s:2:"ES";}}s:7:"billing";a:4:{s:6:"handle";s:13:"PSIU-11139880";s:4:"name";s:22:"Jordi Berrocoso Martin";s:12:"organization";s:11:"Dotbinc, SL";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:20:"AV/ Alfons XIII, 358";}s:4:"city";s:8:"Badalona";s:5:"state";s:2:"ES";s:5:"pcode";s:5:"08914";s:7:"country";s:2:"ES";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:22:"http://www.domini.cat/";s:9:"registrar";s:15:"Domini punt CAT";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:21:"cat.whois-servers.net";s:4:"args";s:11:"dominis.cat";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:11:"directi.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:7:{s:4:"name";s:11:"directi.com";s:7:"nserver";a:8:{s:14:"asia1.akam.net";s:12:"96.7.251.129";s:13:"eur2.akam.net";s:12:"62.41.78.200";s:13:"eur4.akam.net";s:12:"195.10.36.46";s:13:"eur6.akam.net";s:13:"195.59.44.133";s:16:"ns1-106.akam.net";s:14:"193.108.91.106";s:16:"ns1-109.akam.net";s:14:"193.108.91.109";s:13:"usc4.akam.net";s:13:"96.17.144.195";s:13:"usc5.akam.net";s:14:"64.215.164.195";}s:6:"status";s:6:"LOCKED";s:7:"changed";s:10:"2012-02-17";s:7:"created";s:10:"1997-08-11";s:7:"expires";s:10:"2018-09-24";s:7:"sponsor";s:12:"RESELLERCLUB";}s:5:"owner";a:6:{s:5:"email";s:26:"domain.manager@directi.com";s:4:"name";s:14:"Domain Manager";s:5:"phone";s:14:"+91.2230797500";s:3:"fax";s:14:"+91.2230797508";s:12:"organization";s:36:"Directi Internet Solutions Pvt. Ltd.";s:7:"address";a:6:{i:0;s:11:"Directiplex";i:1;s:41:"Next to Andheri Subway, Old Nagardas Road";i:2;s:14:"Andheri (East)";i:3;s:6:"Mumbai";i:4;s:18:"Maharashtra,400069";i:5;s:2:"IN";}}s:5:"admin";a:6:{s:5:"email";s:26:"domain.manager@directi.com";s:4:"name";s:14:"Domain Manager";s:5:"phone";s:14:"+91.2230797500";s:3:"fax";s:14:"+91.2230797508";s:12:"organization";s:36:"Directi Internet Solutions Pvt. Ltd.";s:7:"address";a:6:{i:0;s:11:"Directiplex";i:1;s:41:"Next to Andheri Subway, Old Nagardas Road";i:2;s:14:"Andheri (East)";i:3;s:6:"Mumbai";i:4;s:18:"Maharashtra,400069";i:5;s:2:"IN";}}s:4:"tech";a:6:{s:5:"email";s:26:"domain.manager@directi.com";s:4:"name";s:14:"Domain Manager";s:5:"phone";s:14:"+91.2230797500";s:3:"fax";s:14:"+91.2230797508";s:12:"organization";s:36:"Directi Internet Solutions Pvt. Ltd.";s:7:"address";a:6:{i:0;s:11:"Directiplex";i:1;s:41:"Next to Andheri Subway, Old Nagardas Road";i:2;s:14:"Andheri (East)";i:3;s:6:"Mumbai";i:4;s:18:"Maharashtra,400069";i:5;s:2:"IN";}}s:7:"billing";a:6:{s:5:"email";s:26:"domain.manager@directi.com";s:4:"name";s:14:"Domain Manager";s:5:"phone";s:14:"+91.2230797500";s:3:"fax";s:14:"+91.2230797508";s:12:"organization";s:36:"Directi Internet Solutions Pvt. Ltd.";s:7:"address";a:6:{i:0;s:11:"Directiplex";i:1;s:41:"Next to Andheri Subway, Old Nagardas Road";i:2;s:14:"Andheri (East)";i:3;s:6:"Mumbai";i:4;s:18:"Maharashtra,400069";i:5;s:2:"IN";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:67:"DIRECTI INTERNET SOLUTIONS PVT. LTD. D/B/A PUBLICDOMAINREGISTRY.COM";s:8:"referrer";s:35:"http://www.PublicDomainRegistry.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:19:"domain =directi.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:30:"whois.PublicDomainRegistry.com";s:4:"args";s:11:"directi.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:10:"dnc.org.nz";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:4:"name";s:10:"dnc.org.nz";s:6:"status";s:10:"200 Active";s:7:"created";s:10:"2002-04-23";s:7:"expires";s:10:"2012-04-23";s:7:"changed";s:10:"2012-03-23";s:7:"sponsor";s:24:"Domain Name Commissioner";s:7:"nserver";a:3:{s:21:"ns1.internetnz.net.nz";s:13:"202.46.176.51";s:19:"ns3.catalyst.net.nz";s:13:"202.78.244.33";s:16:"ns1.serion.co.nz";s:11:"202.20.5.35";}}s:5:"owner";a:5:{s:4:"name";s:33:"Internet New Zealand Incorporated";s:7:"address";a:4:{s:7:"address";a:1:{i:0;s:13:"PO Box 11-881";}s:4:"city";s:10:"Wellington";s:5:"pcode";s:4:"6001";s:7:"country";s:16:"NZ (NEW ZEALAND)";}s:5:"phone";s:14:"+64 4 472 1600";s:3:"fax";s:14:"+64 4 495 2115";s:5:"email";s:25:"exe.dir@internetnz.net.nz";}s:5:"admin";a:5:{s:4:"name";s:18:"Executive Director";s:7:"address";a:4:{s:7:"address";a:2:{i:0;s:10:"InternetNZ";i:1;s:13:"PO Box 11-881";}s:4:"city";s:10:"Wellington";s:5:"pcode";s:4:"6001";s:7:"country";s:16:"NZ (NEW ZEALAND)";}s:5:"phone";s:14:"+64 4 472 1600";s:3:"fax";s:14:"+64 4 495 2115";s:5:"email";s:25:"exe.dir@internetnz.net.nz";}s:4:"tech";a:5:{s:4:"name";s:17:"Technical Manager";s:7:"address";a:4:{s:7:"address";a:1:{i:2;s:10:"InternetNZ";}s:4:"city";s:10:"Wellington";s:5:"pcode";s:4:"6001";s:7:"country";s:16:"NZ (NEW ZEALAND)";}s:5:"phone";s:14:"+64 4 472 1600";s:3:"fax";s:14:"+64 4 495 2115";s:5:"email";s:21:"soa@internetnz.net.nz";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:21:"http://www.dnc.org.nz";s:9:"registrar";s:40:"New Zealand Domain Name Registry Limited";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"nz.whois-servers.net";s:4:"args";s:10:"dnc.org.nz";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:8:"admin.sc";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:6:"handle";s:12:"D223056-LRCC";s:4:"name";s:8:"admin.sc";s:7:"created";s:10:"2006-01-19";s:7:"changed";s:10:"2009-01-19";s:7:"expires";s:10:"2010-01-19";s:7:"sponsor";s:20:"InternetX (R24-LRCC)";s:6:"status";s:2:"OK";s:7:"nserver";a:2:{s:14:"ns1.ns-srv.net";s:13:"87.106.14.107";s:14:"ns2.ns-srv.net";s:11:"91.121.82.6";}}s:5:"owner";a:7:{s:6:"handle";s:13:"INX-884387-SC";s:4:"name";s:13:"Domain Master";s:12:"organization";s:11:"KoyDoX Ltd.";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:23:"69 Great Hampton Street";}s:4:"city";s:10:"Birmingham";s:5:"state";s:2:"GB";s:5:"pcode";s:7:"B18 6EW";s:7:"country";s:3:":GB";}s:5:"phone";s:14:"+44.8712180718";s:3:"fax";s:14:"+44.8712180719";s:5:"email";s:21:"hostmaster@koydox.com";}s:5:"admin";a:7:{s:6:"handle";s:13:"INX-884387-SC";s:4:"name";s:13:"Domain Master";s:12:"organization";s:11:"KoyDoX Ltd.";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:23:"69 Great Hampton Street";}s:4:"city";s:10:"Birmingham";s:5:"state";s:2:"GB";s:5:"pcode";s:7:"B18 6EW";s:7:"country";s:2:"GB";}s:5:"phone";s:14:"+44.8712180718";s:3:"fax";s:14:"+44.8712180719";s:5:"email";s:21:"hostmaster@koydox.com";}s:7:"billing";a:7:{s:6:"handle";s:13:"INX-884387-SC";s:4:"name";s:13:"Domain Master";s:12:"organization";s:11:"KoyDoX Ltd.";s:7:"address";a:5:{s:6:"street";a:1:{i:1;s:23:"69 Great Hampton Street";}s:4:"city";s:10:"Birmingham";s:5:"state";s:2:"GB";s:5:"pcode";s:7:"B18 6EW";s:7:"country";s:2:"GB";}s:5:"phone";s:14:"+44.8712180718";s:3:"fax";s:14:"+44.8712180719";s:5:"email";s:21:"hostmaster@koydox.com";}s:4:"tech";a:7:{s:6:"handle";s:13:"INX-884388-SC";s:4:"name";s:13:"Domain Master";s:12:"organization";s:18:"XXX Solutions Ltd.";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:23:"69 Great Hampton Street";}s:4:"city";s:10:"Birmingham";s:5:"state";s:2:"GB";s:5:"pcode";s:7:"B18 6EW";s:7:"country";s:2:"GB";}s:5:"phone";s:14:"+44.7005806807";s:3:"fax";s:14:"+44.7005806808";s:5:"email";s:28:"hostmaster@xxx-solutions.net";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.nic.sc";s:9:"registrar";s:17:"VCS (Pty) Limited";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:22:"whois2.afilias-grs.net";s:4:"args";s:8:"admin.sc";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:9:"mtld.mobi";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:8:{s:6:"handle";s:9:"D166-MOBI";s:4:"name";s:9:"mtld.mobi";s:7:"created";s:10:"2006-05-11";s:7:"changed";s:10:"2011-02-08";s:7:"expires";s:10:"2012-05-11";s:7:"sponsor";s:22:"MarkMonitor Inc. (292)";s:6:"status";a:3:{i:0;s:24:"CLIENT DELETE PROHIBITED";i:1;s:26:"CLIENT TRANSFER PROHIBITED";i:2;s:24:"CLIENT UPDATE PROHIBITED";}s:7:"nserver";a:6:{s:25:"e.service.afiliasdns.info";s:14:"199.254.53.254";s:25:"a.service.afiliasdns.info";s:14:"199.254.31.254";s:24:"f.service.afiliasdns.net";s:14:"199.254.30.254";s:24:"d.service.afiliasdns.com";s:14:"199.254.30.254";s:24:"c.service.afiliasdns.net";s:14:"199.254.53.254";s:24:"b.service.afiliasdns.org";s:14:"199.254.56.254";}}s:5:"owner";a:7:{s:6:"handle";s:12:"mmr-14552653";s:4:"name";s:20:"Domain Administrator";s:12:"organization";s:26:"mTLD Top Level Domain, Ltd";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:17:"11 Exchange Place";i:1;s:4:"IFSC";}s:4:"city";s:6:"Dublin";s:5:"state";s:6:"Dublin";s:5:"pcode";s:1:"1";s:7:"country";s:2:"IE";}s:5:"phone";s:13:"+353.18541100";s:3:"fax";s:13:"+353.17918569";s:5:"email";s:18:"reserved@mtld.mobi";}s:5:"admin";a:7:{s:6:"handle";s:12:"mmr-14552653";s:4:"name";s:20:"Domain Administrator";s:12:"organization";s:26:"mTLD Top Level Domain, Ltd";s:7:"address";a:5:{s:6:"street";a:3:{i:0;s:22:"11 Exchange Place IFSC";i:1;s:17:"11 Exchange Place";i:2;s:4:"IFSC";}s:4:"city";s:6:"Dublin";s:5:"pcode";s:1:"1";s:7:"country";s:2:"IE";s:5:"state";s:6:"Dublin";}s:5:"phone";s:13:"+353.18541100";s:5:"email";s:18:"reserved@mtld.mobi";s:3:"fax";s:13:"+353.17918569";}s:4:"tech";a:7:{s:6:"handle";s:12:"mmr-14552653";s:4:"name";s:20:"Domain Administrator";s:12:"organization";s:26:"mTLD Top Level Domain, Ltd";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:17:"11 Exchange Place";i:1;s:4:"IFSC";}s:4:"city";s:6:"Dublin";s:5:"state";s:6:"Dublin";s:5:"pcode";s:1:"1";s:7:"country";s:2:"IE";}s:5:"phone";s:13:"+353.18541100";s:3:"fax";s:13:"+353.17918569";s:5:"email";s:18:"reserved@mtld.mobi";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:21:"http://www.mtld.mobi/";s:9:"registrar";s:17:"Dot Mobi Registry";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:25:"whois.dotmobiregistry.net";s:4:"args";s:9:"mtld.mobi";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:11:"registry.in";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:8:{s:6:"handle";s:10:"D8120-AFIN";s:4:"name";s:11:"registry.in";s:7:"created";s:10:"2004-12-16";s:7:"changed";s:10:"2012-03-30";s:7:"expires";s:10:"2012-12-30";s:7:"sponsor";s:46:"National Internet Exchange of India (R36-AFIN)";s:6:"status";a:4:{i:0;s:24:"CLIENT DELETE PROHIBITED";i:1;s:23:"CLIENT RENEW PROHIBITED";i:2;s:26:"CLIENT TRANSFER PROHIBITED";i:3;s:17:"DELETE PROHIBITED";}s:7:"nserver";a:5:{s:25:"ns1.ams1.afilias-nst.info";s:12:"199.19.48.79";s:25:"ns1.mia1.afilias-nst.info";s:12:"199.19.52.79";s:25:"ns1.sea1.afilias-nst.info";s:12:"199.19.50.79";s:25:"ns1.yyz1.afilias-nst.info";s:12:"199.19.49.79";s:25:"ns1.hkg1.afilias-nst.info";s:12:"199.19.51.79";}}s:5:"owner";a:6:{s:6:"handle";s:16:"FR-1187763823079";s:4:"name";s:35:"National Internet Exchange of India";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:27:"Incube Business Center,18 ,";i:1;s:11:"Nehru Palce";}s:4:"city";s:9:"New Delhi";s:5:"state";s:5:"Delhi";s:5:"pcode";s:6:"110019";s:7:"country";s:2:"IN";}s:5:"phone";s:14:"+91.1130614624";s:3:"fax";s:14:"+91.1130614629";s:5:"email";s:20:"registration@nixi.in";}s:5:"admin";a:6:{s:6:"handle";s:16:"FR-1187763823079";s:4:"name";s:35:"National Internet Exchange of India";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:27:"Incube Business Center,18 ,";i:1;s:11:"Nehru Palce";}s:4:"city";s:9:"New Delhi";s:5:"state";s:5:"Delhi";s:5:"pcode";s:6:"110019";s:7:"country";s:2:"IN";}s:5:"phone";s:14:"+91.1130614624";s:3:"fax";s:14:"+91.1130614629";s:5:"email";s:20:"registration@nixi.in";}s:4:"tech";a:6:{s:6:"handle";s:16:"FR-1187763823079";s:4:"name";s:35:"National Internet Exchange of India";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:27:"Incube Business Center,18 ,";i:1;s:11:"Nehru Palce";}s:4:"city";s:9:"New Delhi";s:5:"state";s:5:"Delhi";s:5:"pcode";s:6:"110019";s:7:"country";s:2:"IN";}s:5:"phone";s:14:"+91.1130614624";s:3:"fax";s:14:"+91.1130614629";s:5:"email";s:20:"registration@nixi.in";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:24:"http://whois.registry.in";s:9:"registrar";s:10:"INRegistry";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"in.whois-servers.net";s:4:"args";s:11:"registry.in";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:8:"nic.jobs";a:2:{s:8:"regrinfo";a:4:{s:6:"domain";a:6:{s:4:"name";s:8:"nic.jobs";s:7:"nserver";a:2:{s:17:"ns2.registry.jobs";s:14:"207.54.137.254";s:17:"ns1.registry.jobs";s:14:"207.54.136.251";}s:6:"status";a:1:{i:0;s:6:"ACTIVE";}s:7:"changed";s:10:"2009-02-20";s:7:"created";s:10:"2006-02-21";s:7:"expires";s:10:"2010-02-21";}s:10:"registered";s:3:"yes";s:8:"regrinfo";a:5:{s:6:"domain";a:1:{s:4:"name";s:8:"NIC.JOBS";}s:5:"owner";a:3:{s:4:"name";s:16:"Registry-Reserve";s:12:"organization";s:16:"Employ Media LLC";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:20:"3029 Prospect Avenue";}s:4:"city";s:9:"Cleveland";s:5:"state";s:2:"OH";s:5:"pcode";s:5:"44115";s:7:"country";s:13:"United States";}}s:5:"admin";a:6:{s:4:"name";s:16:"Registry-Reserve";s:12:"organization";s:16:"Employ Media LLC";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:20:"3029 Prospect Avenue";}s:4:"city";s:9:"Cleveland";s:5:"state";s:2:"OH";s:5:"pcode";s:5:"44115";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.2164261500";s:3:"fax";s:13:"+1.2165881558";s:5:"email";s:26:"registry-reserve@goto.jobs";}s:4:"tech";a:6:{s:4:"name";s:16:"Registry-Reserve";s:12:"organization";s:16:"Employ Media LLC";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:20:"3029 Prospect Avenue";}s:4:"city";s:9:"Cleveland";s:5:"state";s:2:"OH";s:5:"pcode";s:5:"44115";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.2164261500";s:3:"fax";s:13:"+1.2165881558";s:5:"email";s:26:"registry-reserve@goto.jobs";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:2:{s:8:"referrer";s:22:"http://www.encirca.biz";s:9:"registrar";s:7:"ENCIRCA";}}s:8:"regyinfo";a:4:{s:9:"registrar";s:12:"ENCIRCA, INC";s:8:"referrer";s:22:"http://www.encirca.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:26:"jobswhois.verisign-grs.com";s:4:"args";s:8:"nic.jobs";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:17:"whois.encirca.com";s:4:"args";s:8:"nic.jobs";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:10:"urllog.net";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:6:{s:4:"name";s:10:"urllog.net";s:7:"nserver";a:2:{s:19:"a.dns-rootserver.de";s:12:"213.83.21.97";s:19:"ns10.schlundtech.de";s:12:"85.236.36.52";}s:6:"status";s:4:"LOCK";s:7:"changed";s:10:"2011-09-23";s:7:"created";s:10:"2004-07-25";s:7:"expires";s:10:"2012-07-25";}s:5:"owner";a:5:{s:4:"name";a:2:{s:5:"first";s:8:"Philippe";s:4:"last";s:5:"Kueck";}s:7:"address";a:5:{s:6:"street";s:19:"Philipp-Reis-Str. 8";s:4:"city";s:11:"Bad Homburg";s:5:"pcode";s:5:"61352";s:7:"country";s:2:"DE";s:5:"state";s:2:"DE";}s:5:"phone";s:19:"+49-30-610900-59040";s:3:"fax";s:19:"+49-30-610900-59040";s:5:"email";s:60:"x198xmq.seyesg900phafpkyfup3x6lcnaza.1@protected.unixadm.org";}s:5:"admin";a:5:{s:4:"name";a:2:{s:5:"first";s:8:"Philippe";s:4:"last";s:5:"Kueck";}s:7:"address";a:5:{s:6:"street";s:19:"Philipp-Reis-Str. 8";s:4:"city";s:11:"Bad Homburg";s:5:"pcode";s:5:"61352";s:7:"country";s:2:"DE";s:5:"state";s:2:"DE";}s:5:"phone";s:19:"+49-30-610900-59040";s:3:"fax";s:19:"+49-30-610900-59040";s:5:"email";s:60:"x198xmq.seyesg900phafpkyfup3x6lcnaza.1@protected.unixadm.org";}s:4:"tech";a:5:{s:4:"name";a:2:{s:5:"first";s:8:"Philippe";s:4:"last";s:5:"Kueck";}s:7:"address";a:5:{s:6:"street";s:19:"Philipp-Reis-Str. 8";s:4:"city";s:11:"Bad Homburg";s:5:"pcode";s:5:"61352";s:7:"country";s:2:"DE";s:5:"state";s:2:"DE";}s:5:"phone";s:19:"+49-30-610900-59040";s:3:"fax";s:19:"+49-30-610900-59040";s:5:"email";s:60:"x198xmq.seyesg900phafpkyfup3x6lcnaza.1@protected.unixadm.org";}s:4:"zone";a:5:{s:4:"name";a:2:{s:5:"first";s:8:"Philippe";s:4:"last";s:5:"Kueck";}s:7:"address";a:5:{s:6:"street";s:19:"Philipp-Reis-Str. 8";s:4:"city";s:11:"Bad Homburg";s:5:"pcode";s:5:"61352";s:7:"country";s:2:"DE";s:5:"state";s:2:"DE";}s:5:"phone";s:19:"+49-30-610900-59040";s:3:"fax";s:19:"+49-30-610900-59040";s:5:"email";s:60:"x198xmq.seyesg900phafpkyfup3x6lcnaza.1@protected.unixadm.org";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:30:"PSI-USA, INC. DBA DOMAIN ROBOT";s:8:"referrer";s:23:"http://www.psi-usa.info";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"net.whois-servers.net";s:4:"args";s:18:"domain =urllog.net";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:18:"whois.psi-usa.info";s:4:"args";s:10:"urllog.net";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"www.tv";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:4:"name";s:6:"www.tv";s:7:"nserver";a:7:{s:12:"a4.nstld.com";s:12:"69.36.158.33";s:12:"f4.nstld.com";s:12:"192.35.51.33";s:12:"g4.nstld.com";s:12:"192.42.93.33";s:12:"h4.nstld.com";s:13:"192.54.112.33";s:12:"j4.nstld.com";s:12:"192.48.79.33";s:12:"l4.nstld.com";s:13:"192.41.162.33";s:12:"k4.nstld.com";s:13:"192.52.178.33";}s:6:"status";a:2:{i:0;s:22:"CLIENT-XFER-PROHIBITED";i:1;s:24:"CLIENT-UPDATE-PROHIBITED";}s:7:"changed";s:10:"2012-03-07";s:7:"created";s:10:"2000-05-01";s:7:"expires";s:10:"2038-01-19";s:7:"sponsor";s:12:"TUCOWS, INC.";}s:5:"owner";a:2:{s:4:"name";s:14:"VeriSign, Inc.";s:7:"address";a:3:{i:0;s:18:"12061 Bluemont Way";i:1;s:16:"Reston, VA 20190";i:2;s:2:"US";}}s:5:"admin";a:5:{s:5:"email";s:25:"vshostmaster@verisign.com";s:4:"name";s:21:"Hostmaster, VeriSign,";s:3:"fax";s:13:"+1.7039484331";s:5:"phone";s:13:"+1.7039484300";s:7:"address";a:3:{i:1;s:18:"12061 Bluemont Way";i:2;s:16:"Reston, VA 20190";i:3;s:2:"US";}}s:4:"tech";a:5:{s:5:"email";s:25:"vshostmaster@verisign.com";s:4:"name";s:21:"Hostmaster, VeriSign,";s:3:"fax";s:13:"+1.7039484331";s:5:"phone";s:13:"+1.7039484300";s:7:"address";a:3:{i:1;s:18:"12061 Bluemont Way";i:2;s:16:"Reston, VA 20190";i:3;s:2:"US";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:14:"TUCOWS.COM CO.";s:8:"referrer";s:29:"http://domainhelp.opensrs.net";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:20:"tv.whois-servers.net";s:4:"args";s:6:"www.tv";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:16:"whois.tucows.com";s:4:"args";s:6:"www.tv";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:8:"eurid.eu";a:2:{s:8:"regrinfo";a:4:{s:6:"domain";a:3:{s:4:"name";s:8:"eurid.eu";s:9:"registrar";a:2:{s:4:"name";s:14:"EURid vzw/asbl";s:3:"url";s:12:"www.eurid.eu";}s:7:"nserver";a:3:{s:12:"ns1.eurid.eu";s:14:"91.220.191.220";s:12:"ns2.eurid.eu";s:14:"195.234.53.220";s:12:"ns3.eurid.eu";s:10:"62.41.4.71";}}s:5:"owner";a:2:{i:0;s:14:"NOT DISCLOSED!";i:1;s:38:"Visit www.eurid.eu for webbased whois.";}s:4:"tech";a:5:{s:4:"name";s:30:"EURid vzw/asbl Technical staff";s:12:"organization";s:14:"EURid vzw/asbl";s:5:"phone";s:12:"+32.24012750";s:3:"fax";s:12:"+32.24012751";s:5:"email";s:13:"tech@eurid.eu";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:19:"http://www.eurid.eu";s:9:"registrar";s:5:"EURID";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"eu.whois-servers.net";s:4:"args";s:8:"eurid.eu";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:10:"sex.za.net";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:3:{s:4:"name";s:10:"sex.za.net";s:7:"created";s:10:"1998-09-15";s:7:"nserver";a:2:{s:15:"cyberhost.co.za";s:13:"196.41.124.12";s:24:"dinkytoy.cyberhost.co.za";s:16:"(DOES NOT EXIST)";}}s:5:"owner";a:1:{s:4:"name";s:18:"Cyberhost Internet";}s:5:"admin";a:5:{s:5:"email";s:21:"admin@cyberhost.co.za";s:4:"name";s:11:"Ian Ward <>";s:5:"phone";s:14:"+27 21 7628512";s:3:"fax";s:14:"+27 12 7628683";s:7:"address";a:6:{i:1;s:18:"Cyberhost Internet";i:2;s:18:"42c Goldbourne St.";i:3;s:10:"Kenilworth";i:4;s:2:"WC";i:5;s:4:"7700";i:6;s:2:"ZA";}}s:4:"tech";a:5:{s:5:"email";s:19:"dns@cyberhost.co.za";s:4:"name";s:11:"Ian Ward <>";s:5:"phone";s:14:"+27 21 7628512";s:3:"fax";s:14:"+27 12 7628683";s:7:"address";a:6:{i:1;s:18:"Cyberhost Internet";i:2;s:18:"42c Goldbourne St.";i:3;s:10:"Kenilworth";i:4;s:2:"WC";i:5;s:4:"7700";i:6;s:2:"ZA";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:18:"http://www.za.net/";s:9:"registrar";s:6:"ZA NiC";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:12:"whois.za.net";s:4:"args";s:10:"sex.za.net";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:11:"63.95.254.3";a:2:{s:8:"regrinfo";a:4:{s:7:"network";a:7:{s:7:"inetnum";s:27:"63.95.254.0 - 63.95.255.255";s:4:"name";s:15:"UU-63-95-254-D4";s:6:"handle";s:17:"NET-63-95-254-0-1";s:6:"status";s:11:"Reallocated";s:4:"desc";a:1:{i:0;s:45:"Addresses within this block are non-portable.";}s:7:"created";s:10:"2002-01-09";s:7:"changed";s:10:"2009-05-18";}s:5:"owner";a:3:{s:12:"organization";s:24:"GEORGIA PUBLIC WEB, INC.";s:6:"handle";s:3:"GPW";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:23:"1470 RIVER EDGE PARKWAY";}s:4:"city";s:7:"ATLANTA";s:5:"state";s:2:"GA";s:5:"pcode";s:5:"30328";s:7:"country";s:2:"US";}}s:4:"tech";a:4:{s:6:"handle";s:11:"NELSO2-ARIN";s:4:"name";s:15:"Nelson, Frank A";s:5:"phone";s:15:"+1-770-661-2783";s:5:"email";s:23:"fnelson@gapublicweb.net";}s:5:"abuse";a:4:{s:6:"handle";s:10:"GPWNO-ARIN";s:4:"name";s:6:"GPWNOC";s:5:"phone";s:15:"+1-888-662-6324";s:5:"email";s:26:"telecomnoc@gapublicweb.net";}}s:8:"regyinfo";a:3:{s:9:"registrar";s:45:"American Registry for Internet Numbers (ARIN)";s:4:"type";s:2:"ip";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:14:"whois.arin.net";s:4:"args";s:13:"n 63.95.254.3";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:22:"rwhois.gapublicweb.net";s:4:"args";s:11:"63.95.254.3";s:4:"port";s:4:"4321";}}}}s:10:"informe.ws";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:10:"informe.ws";s:7:"sponsor";s:23:"Intercosmos Media Group";s:7:"created";s:10:"2007-01-03";s:7:"changed";s:10:"2007-01-03";s:7:"expires";s:10:"2008-01-03";s:7:"nserver";a:2:{s:17:"ns0.directnic.com";s:14:"204.251.10.100";s:17:"ns1.directnic.com";s:13:"206.251.177.2";}}s:10:"registered";s:3:"yes";s:5:"owner";a:3:{s:5:"phone";s:9:"622211442";s:4:"name";s:7:"Informe";s:7:"address";a:3:{i:0;s:6:"Cuiper";i:1;s:18:"Spain, Spain 46134";i:2;s:2:"ES";}}s:5:"admin";a:4:{s:5:"email";s:16:"paisvlc@yahoo.es";s:4:"name";s:16:"Informe, Informe";s:5:"phone";s:9:"622211442";s:7:"address";a:3:{i:1;s:6:"Cuiper";i:2;s:18:"Spain, Spain 46134";i:3;s:2:"ES";}}s:4:"tech";a:4:{s:5:"email";s:16:"paisvlc@yahoo.es";s:4:"name";s:16:"Informe, Informe";s:5:"phone";s:9:"622211442";s:7:"address";a:3:{i:1;s:6:"Cuiper";i:2;s:18:"Spain, Spain 46134";i:3;s:2:"ES";}}}s:8:"regyinfo";a:4:{s:8:"referrer";s:22:"http://www.samoanic.ws";s:9:"registrar";s:9:"Samoa Nic";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:20:"ws.whois-servers.net";s:4:"args";s:10:"informe.ws";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:19:"whois.directnic.com";s:4:"args";s:10:"informe.ws";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:12:"alabanza.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:4:"name";s:12:"alabanza.com";s:7:"nserver";a:2:{s:15:"ns.alabanza.com";s:14:"209.239.47.252";s:16:"ns2.alabanza.com";s:14:"209.239.47.201";}s:6:"status";s:6:"Locked";s:7:"changed";s:10:"2007-02-16";s:7:"created";s:10:"1996-08-18";s:7:"expires";s:10:"2013-08-17";s:7:"sponsor";s:20:"Alabanza Corporation";}s:10:"registered";s:3:"yes";s:5:"owner";a:6:{s:5:"email";s:21:"momentum@alabanza.com";s:4:"name";s:18:"Alabanza Marketing";s:12:"organization";s:20:"Alabanza Corporation";s:5:"phone";s:10:"4107791400";s:3:"fax";s:13:"+1.4107791501";s:7:"address";a:3:{i:4;s:36:"10 East Baltimore Street, Suite 1000";i:5;s:19:"Baltimore, MD 21202";i:6;s:2:"US";}}s:5:"admin";a:6:{s:5:"email";s:21:"momentum@alabanza.com";s:4:"name";s:18:"Alabanza Marketing";s:12:"organization";s:20:"Alabanza Corporation";s:5:"phone";s:10:"4107791400";s:3:"fax";s:13:"+1.4107791501";s:7:"address";a:3:{i:4;s:36:"10 East Baltimore Street, Suite 1000";i:5;s:19:"Baltimore, MD 21202";i:6;s:2:"US";}}s:4:"tech";a:6:{s:5:"email";s:21:"momentum@alabanza.com";s:4:"name";s:18:"Alabanza Marketing";s:12:"organization";s:20:"Alabanza Corporation";s:5:"phone";s:10:"4107791400";s:3:"fax";s:13:"+1.4107791501";s:7:"address";a:3:{i:4;s:36:"10 East Baltimore Street, Suite 1000";i:5;s:19:"Baltimore, MD 21202";i:6;s:2:"US";}}}s:8:"regyinfo";a:6:{s:9:"registrar";s:10:"ENOM, INC.";s:5:"whois";s:14:"whois.enom.com";s:8:"referrer";s:19:"http://www.enom.com";s:4:"args";s:13:"=alabanza.com";s:4:"port";i:43;s:4:"type";s:6:"domain";}}s:6:"nic.ru";a:2:{s:8:"regrinfo";a:3:{s:6:"domain";a:6:{s:4:"name";s:6:"nic.ru";s:7:"nserver";a:2:{s:10:"ns5.nic.ru";s:13:"31.177.67.100";s:10:"ns7.nic.ru";s:13:"31.177.71.100";}s:6:"status";s:31:"REGISTERED, DELEGATED, VERIFIED";s:7:"created";s:10:"1997-11-28";s:7:"expires";s:10:"2012-12-01";s:6:"source";s:3:"TCI";}s:5:"owner";a:1:{s:12:"organization";s:15:"JSC 'RU-CENTER'";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:19:"http://www.ripn.net";s:9:"registrar";s:18:"RU-CENTER-REG-RIPN";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"ru.whois-servers.net";s:4:"args";s:6:"nic.ru";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:7:"ovh.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:7:{s:4:"name";s:7:"ovh.com";s:7:"nserver";a:4:{s:11:"dns.ovh.net";s:14:"213.186.33.102";s:13:"dns10.ovh.net";s:15:"213.251.188.129";s:10:"ns.ovh.net";s:15:"213.251.128.136";s:12:"ns10.ovh.net";s:15:"213.251.128.129";}s:6:"status";a:2:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";}s:7:"changed";s:10:"2011-08-06";s:7:"created";s:10:"2000-11-05";s:7:"expires";s:10:"2000-00-00";s:7:"sponsor";s:4:"OVH.";}s:5:"owner";a:5:{s:5:"phone";s:13:"+33.899701761";s:3:"fax";s:14:"+33.320200958)";s:5:"email";s:12:"oles@ovh.net";s:4:"name";s:3:"OVH";s:7:"address";a:5:{i:0;s:12:"Klaba Octave";i:1;s:16:"2 rue Kellermann";i:2;s:14:"Roubaix, 59100";i:3;s:2:"FR";i:4;s:1:"(";}}s:5:"admin";a:4:{s:5:"phone";s:13:"+33.899701761";s:5:"email";s:25:"stephane.lesimple@ovh.net";s:4:"name";s:3:"OVH";s:7:"address";a:4:{i:0;s:18:"Lesimple Stéphane";i:1;s:16:"2 Rue Kellermann";i:2;s:14:"ROUBAIX, 59100";i:3;s:2:"FR";}}s:4:"tech";a:5:{s:5:"phone";s:13:"+33.899701761";s:3:"fax";s:14:"+33.320200958)";s:5:"email";s:12:"oles@ovh.net";s:4:"name";s:3:"OVH";s:7:"address";a:5:{i:0;s:12:"Klaba Octave";i:1;s:16:"2 rue Kellermann";i:2;s:14:"Roubaix, 59100";i:3;s:2:"FR";i:4;s:1:"(";}}s:7:"billing";a:5:{s:5:"phone";s:13:"+33.899701761";s:3:"fax";s:14:"+33.320200958)";s:5:"email";s:12:"oles@ovh.net";s:4:"name";s:3:"OVH";s:7:"address";a:5:{i:0;s:12:"Klaba Octave";i:1;s:16:"2 rue Kellermann";i:2;s:14:"Roubaix, 59100";i:3;s:2:"FR";i:4;s:1:"(";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:3:"OVH";s:8:"referrer";s:18:"http://www.ovh.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:15:"domain =ovh.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:13:"whois.ovh.com";s:4:"args";s:7:"ovh.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:12:"rrpproxy.net";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:4:"name";s:12:"rrpproxy.net";s:7:"nserver";a:4:{s:18:"ns1.p20.dynect.net";s:12:"208.78.70.20";s:18:"ns2.p20.dynect.net";s:13:"204.13.250.20";s:18:"ns3.p20.dynect.net";s:12:"208.78.71.20";s:18:"ns4.p20.dynect.net";s:13:"204.13.251.20";}s:6:"status";a:1:{i:0;s:24:"clientTransferProhibited";}s:7:"changed";s:10:"2011-12-28";s:7:"created";s:10:"2001-04-19";s:7:"expires";s:10:"2020-04-19";s:7:"sponsor";s:20:"domaindiscount24.com";s:8:"referrer";s:119:"register your domain with http://www.domaindiscount24.com";}s:5:"owner";a:6:{s:12:"organization";s:16:"Key-Systems GmbH";s:4:"name";a:2:{s:5:"first";s:9:"Alexander";s:4:"last";s:7:"Siffrin";}s:7:"address";a:4:{s:6:"street";s:16:"Im Oberen Werk 1";s:4:"city";s:11:"St. Ingbert";s:5:"pcode";s:5:"66386";s:7:"country";s:2:"DE";}s:5:"phone";s:16:"+49 6894 9396850";s:3:"fax";s:16:"+49 6894 9396851";s:5:"email";s:23:"billing@key-systems.net";}s:5:"admin";a:6:{s:12:"organization";s:16:"Key-Systems GmbH";s:4:"name";a:2:{s:5:"first";s:9:"Alexander";s:4:"last";s:7:"Siffrin";}s:7:"address";a:4:{s:6:"street";s:16:"Im Oberen Werk 1";s:4:"city";s:11:"St. Ingbert";s:5:"pcode";s:5:"66386";s:7:"country";s:2:"DE";}s:5:"phone";s:16:"+49 6894 9396850";s:3:"fax";s:16:"+49 6894 9396851";s:5:"email";s:23:"billing@key-systems.net";}s:4:"tech";a:6:{s:12:"organization";s:16:"Key-Systems GmbH";s:4:"name";a:2:{s:5:"first";s:9:"Alexander";s:4:"last";s:7:"Siffrin";}s:7:"address";a:4:{s:6:"street";s:16:"Im Oberen Werk 1";s:4:"city";s:11:"St. Ingbert";s:5:"pcode";s:5:"66386";s:7:"country";s:2:"DE";}s:5:"phone";s:16:"+49 6894 9396850";s:3:"fax";s:16:"+49 6894 9396851";s:5:"email";s:23:"billing@key-systems.net";}s:7:"billing";a:6:{s:12:"organization";s:16:"Key-Systems GmbH";s:4:"name";a:2:{s:5:"first";s:9:"Alexander";s:4:"last";s:7:"Siffrin";}s:7:"address";a:4:{s:6:"street";s:16:"Im Oberen Werk 1";s:4:"city";s:11:"St. Ingbert";s:5:"pcode";s:5:"66386";s:7:"country";s:2:"DE";}s:5:"phone";s:16:"+49 6894 9396850";s:3:"fax";s:16:"+49 6894 9396851";s:5:"email";s:23:"billing@key-systems.net";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:16:"KEY-SYSTEMS GMBH";s:8:"referrer";s:26:"http://www.key-systems.net";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"net.whois-servers.net";s:4:"args";s:20:"domain =rrpproxy.net";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:18:"whois.rrpproxy.net";s:4:"args";s:12:"rrpproxy.net";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:19:"wildwestdomains.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:4:"name";s:19:"wildwestdomains.com";s:7:"nserver";a:3:{s:21:"cns1.secureserver.net";s:15:"208.109.255.100";s:21:"cns2.secureserver.net";s:14:"216.69.185.100";s:21:"cns3.secureserver.net";s:13:"64.202.167.31";}s:6:"status";a:4:{i:0;s:22:"clientDeleteProhibited";i:1;s:21:"clientRenewProhibited";i:2;s:24:"clientTransferProhibited";i:3;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2011-11-01";s:7:"created";s:10:"2000-08-22";s:7:"expires";s:10:"2021-11-01";s:7:"sponsor";s:13:"WWDomains.com";}s:5:"owner";a:2:{s:4:"name";s:17:"Wild West Domains";s:7:"address";a:3:{i:0;s:27:"14455 N Hayden Rd Suite 219";i:1;s:25:"Scottsdale, Arizona 85260";i:2;s:13:"United States";}}s:5:"admin";a:5:{s:5:"email";s:23:"dns@wildwestdomains.com";s:4:"name";s:36:"Wild West Domains, Wild West Domains";s:3:"fax";s:15:"- +1.4805058844";s:5:"phone";s:13:"+1.4805058800";s:7:"address";a:4:{i:1;s:17:"Wild West Domains";i:2;s:27:"14455 N Hayden Rd Suite 219";i:3;s:25:"Scottsdale, Arizona 85260";i:4;s:13:"United States";}}s:4:"tech";a:5:{s:5:"email";s:23:"dns@wildwestdomains.com";s:4:"name";s:36:"Wild West Domains, Wild West Domains";s:3:"fax";s:15:"- +1.4805058844";s:5:"phone";s:13:"+1.4805058800";s:7:"address";a:4:{i:1;s:17:"Wild West Domains";i:2;s:27:"14455 N Hayden Rd Suite 219";i:3;s:25:"Scottsdale, Arizona 85260";i:4;s:13:"United States";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:22:"WILD WEST DOMAINS, LLC";s:8:"referrer";s:30:"http://www.wildwestdomains.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:27:"domain =wildwestdomains.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:25:"whois.wildwestdomains.com";s:4:"args";s:19:"wildwestdomains.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:13:"onlinenic.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:6:{s:4:"name";s:13:"onlinenic.com";s:7:"nserver";a:2:{s:17:"ns1.onlinenic.net";s:14:"222.76.216.144";s:17:"ns5.onlinenic.net";s:14:"210.51.187.187";}s:6:"status";a:1:{i:0;s:2:"ok";}s:7:"changed";s:10:"2012-03-13";s:7:"created";s:10:"1999-08-26";s:7:"expires";s:10:"2016-08-26";}s:5:"owner";a:4:{s:5:"phone";s:27:"+1.5107698492 +1.5107698492";s:5:"email";s:20:"carrie@onlinenic.com";s:4:"name";s:13:"Carrie Arden";s:7:"address";a:3:{i:1;s:15:"OnlineNIC, Inc.";i:2;s:28:"909 Marina Village Pkwy #236";i:3;s:30:"Alameda,CA,United States 94501";}}s:5:"admin";a:6:{s:4:"name";s:13:"Carrie Arden";s:5:"phone";s:13:"+1.5107698492";s:5:"email";s:20:"carrie@onlinenic.com";s:3:"fax";s:13:"+1.5107698492";s:12:"organization";s:15:"OnlineNIC, Inc.";s:7:"address";a:4:{s:6:"street";s:28:"909 Marina Village Pkwy #236";s:4:"city";s:7:"Alameda";s:7:"country";s:13:"United States";s:5:"pcode";s:5:"94501";}}s:4:"tech";a:6:{s:4:"name";s:13:"Carrie Arden";s:5:"phone";s:13:"+1.5107698492";s:5:"email";s:20:"carrie@onlinenic.com";s:3:"fax";s:13:"+1.5107698492";s:12:"organization";s:15:"OnlineNIC, Inc.";s:7:"address";a:4:{s:6:"street";s:28:"909 Marina Village Pkwy #236";s:4:"city";s:7:"Alameda";s:7:"country";s:13:"United States";s:5:"pcode";s:5:"94501";}}s:7:"billing";a:6:{s:4:"name";s:15:"OnlineNIC, Inc.";s:5:"phone";s:13:"+1.5107698492";s:5:"email";s:20:"carrie@onlinenic.com";s:3:"fax";s:13:"+1.5107698492";s:12:"organization";s:15:"OnlineNIC, Inc.";s:7:"address";a:6:{s:6:"street";s:28:"909 Marina Village Pkwy #236";s:4:"city";s:7:"Alameda";s:7:"country";s:13:"United States";s:5:"pcode";s:5:"94501";i:0;s:30:"Registration Service Provider:";i:1;s:24:"web:http://onlinenic.com";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:15:"ONLINENIC, INC.";s:8:"referrer";s:24:"http://www.OnlineNIC.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:21:"domain =onlinenic.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:19:"whois.onlinenic.com";s:4:"args";s:13:"onlinenic.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:9:"nicco.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:9:"nicco.com";s:7:"nserver";a:2:{s:13:"ns1.nicco.com";s:13:"66.45.246.210";s:13:"ns2.nicco.com";s:12:"64.20.45.186";}s:6:"status";a:3:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2011-11-02";s:7:"created";s:10:"2000-11-01";s:7:"expires";s:10:"2011-11-01";}s:5:"owner";a:5:{s:12:"organization";s:10:"Nicco Ltd.";s:4:"name";s:13:"Administrator";s:7:"address";a:4:{s:4:"city";s:16:"Saint-Petersburg";s:6:"street";a:1:{i:0;s:33:"Dobrolubova prospect 11 Office 14";}s:7:"country";s:2:"RU";s:3:"zip";s:6:"197198";}s:5:"phone";s:16:"7 (921) 316-4209";s:5:"email";s:23:"accreditation@nicco.com";}s:4:"tech";a:5:{s:12:"organization";s:10:"Nicco Ltd.";s:4:"name";s:13:"Administrator";s:7:"address";a:4:{s:4:"city";s:16:"Saint-Petersburg";s:6:"street";a:1:{i:0;s:33:"Dobrolubova prospect 11 Office 14";}s:7:"country";s:2:"RU";s:3:"zip";s:6:"197198";}s:5:"phone";s:16:"7 (921) 316-4209";s:5:"email";s:23:"accreditation@nicco.com";}s:5:"admin";a:5:{s:12:"organization";s:10:"Nicco Ltd.";s:4:"name";s:13:"Administrator";s:7:"address";a:4:{s:4:"city";s:16:"Saint-Petersburg";s:6:"street";a:1:{i:0;s:33:"Dobrolubova prospect 11 Office 14";}s:7:"country";s:2:"RU";s:3:"zip";s:6:"197198";}s:5:"phone";s:16:"7 (921) 316-4209";s:5:"email";s:23:"accreditation@nicco.com";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:10:"NICCO LTD.";s:8:"referrer";s:20:"http://www.nicco.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:17:"domain =nicco.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:15:"whois.nicco.com";s:4:"args";s:9:"nicco.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:12:"nameking.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:7:{s:4:"name";s:12:"nameking.com";s:7:"nserver";a:2:{s:16:"ns1.nameking.com";s:12:"204.13.162.6";s:16:"ns2.nameking.com";s:13:"204.13.161.18";}s:6:"status";a:3:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2011-04-28";s:7:"created";s:10:"1999-05-07";s:7:"expires";s:10:"2012-05-07";s:7:"sponsor";s:13:"NAMEKING INC.";}s:5:"owner";a:5:{s:4:"name";s:11:"Host Master";s:12:"organization";s:11:"Oversee.net";s:5:"email";s:22:"hostmaster@oversee.net";s:7:"address";a:3:{s:6:"street";s:32:"515 S. Flower Street, Suite 4400";s:4:"city";s:30:"Los Angeles, California, 90071";s:7:"country";s:2:"US";}s:5:"phone";s:12:"1.2134080080";}s:5:"admin";a:5:{s:4:"name";s:11:"Host Master";s:12:"organization";s:11:"Oversee.net";s:5:"email";s:22:"hostmaster@oversee.net";s:7:"address";a:3:{s:6:"street";s:32:"515 S. Flower Street, Suite 4400";s:4:"city";s:30:"Los Angeles, California, 90071";s:7:"country";s:2:"US";}s:5:"phone";s:12:"1.2134080080";}s:7:"billing";a:5:{s:4:"name";s:11:"Host Master";s:12:"organization";s:11:"Oversee.net";s:5:"email";s:22:"hostmaster@oversee.net";s:7:"address";a:3:{s:6:"street";s:32:"515 S. Flower Street, Suite 4400";s:4:"city";s:30:"Los Angeles, California, 90071";s:7:"country";s:2:"US";}s:5:"phone";s:12:"1.2134080080";}s:4:"tech";a:5:{s:4:"name";s:11:"Host Master";s:12:"organization";s:11:"Oversee.net";s:5:"email";s:22:"hostmaster@oversee.net";s:7:"address";a:3:{s:6:"street";s:32:"515 S. Flower Street, Suite 4400";s:4:"city";s:30:"Los Angeles, California, 90071";s:7:"country";s:2:"US";}s:5:"phone";s:12:"1.2134080080";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:18:"NAMEKING.COM, INC.";s:8:"referrer";s:23:"http://www.nameking.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:20:"domain =nameking.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:18:"whois.nameking.com";s:4:"args";s:12:"nameking.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:12:"fabulous.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:6:{s:4:"name";s:12:"fabulous.com";s:7:"nserver";a:2:{s:19:"ns1.darkbluesea.com";s:14:"216.34.131.160";s:19:"ns2.darkbluesea.com";s:14:"216.34.131.169";}s:6:"status";a:2:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";}s:7:"changed";s:10:"2010-04-12";s:7:"created";s:10:"1997-03-16";s:7:"expires";s:10:"2016-12-07";}s:5:"owner";a:2:{s:4:"name";s:20:"Fabulous.com Pty Ltd";s:7:"address";a:2:{i:0;s:11:"P O Box 757";i:1;s:29:"Fortitude Valley, QLD 4006 AU";}}s:7:"billing";a:4:{s:5:"email";s:33:"domain_hostmaster@darkbluesea.com";s:5:"phone";s:13:"+617.30070070";s:4:"name";s:20:"Fabulous.com Pty Ltd";s:7:"address";a:3:{i:0;s:17:"Domain Hostmaster";i:1;s:11:"P O Box 757";i:2;s:29:"Fortitude Valley, QLD 4006 AU";}}s:4:"tech";a:4:{s:5:"email";s:33:"domain_hostmaster@darkbluesea.com";s:5:"phone";s:13:"+617.30070070";s:4:"name";s:20:"Fabulous.com Pty Ltd";s:7:"address";a:3:{i:0;s:17:"Domain Hostmaster";i:1;s:11:"P O Box 757";i:2;s:29:"Fortitude Valley, QLD 4006 AU";}}s:5:"admin";a:4:{s:5:"email";s:33:"domain_hostmaster@darkbluesea.com";s:5:"phone";s:13:"+617.30070070";s:4:"name";s:20:"Fabulous.com Pty Ltd";s:7:"address";a:3:{i:0;s:17:"Domain Hostmaster";i:1;s:11:"P O Box 757";i:2;s:29:"Fortitude Valley, QLD 4006 AU";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:21:"FABULOUS.COM PTY LTD.";s:8:"referrer";s:23:"http://www.fabulous.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:20:"domain =fabulous.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:18:"whois.fabulous.com";s:4:"args";s:12:"fabulous.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"nic.ae";a:2:{s:8:"regrinfo";a:4:{s:6:"domain";a:4:{s:4:"name";s:6:"nic.ae";s:7:"sponsor";s:8:"Etisalat";s:6:"status";s:2:"ok";s:7:"nserver";a:4:{s:19:"dxbans2.ecompany.ae";s:11:"194.170.1.7";s:19:"auhans1.ecompany.ae";s:12:"194.170.1.99";s:19:"dxbans1.ecompany.ae";s:11:"194.170.1.6";s:19:"auhans2.ecompany.ae";s:14:"195.229.237.52";}}s:5:"owner";a:2:{s:6:"handle";s:7:"R010741";s:4:"name";s:25:"ETISALAT DUBAI EIM OFFICE";}s:4:"tech";a:2:{s:6:"handle";s:7:"C006659";s:4:"name";s:16:"Sultan Al Shamsi";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.nic.ae";s:9:"registrar";s:6:"UAENIC";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:17:"whois.aeda.net.ae";s:4:"args";s:6:"nic.ae";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"dns.pt";a:2:{s:8:"regrinfo";a:4:{s:6:"domain";a:4:{s:4:"name";s:6:"dns.pt";s:7:"created";s:10:"1991-10-03";s:6:"status";s:6:"ACTIVE";s:7:"nserver";a:2:{s:6:"dns.pt";s:14:"193.137.196.42";s:9:"ns.dns.pt";s:11:"193.136.0.1";}}s:5:"owner";a:3:{s:5:"email";s:18:"secretaria@fccn.pt";s:4:"name";s:50:"Fundação para a Computação Cientifica Nacional";s:7:"address";a:3:{i:0;s:22:"Av. do Brasil, no. 101";i:1;s:6:"Lisboa";i:2;s:15:"1700-066 Lisboa";}}s:7:"billing";a:3:{s:5:"email";s:18:"secretaria@fccn.pt";s:4:"name";s:50:"Fundação para a Computação Cientifica Nacional";s:7:"address";a:1:{i:0;s:36:"Responsável Técnico / Tech Contact";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:18:"http://www.fccn.pt";s:9:"registrar";s:4:"FCCN";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"pt.whois-servers.net";s:4:"args";s:6:"dns.pt";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:9:"sex.co.za";a:2:{s:8:"regrinfo";a:3:{s:6:"domain";a:2:{s:4:"name";s:9:"sex.co.za";s:7:"nserver";a:2:{s:13:"ns1.peer1.net";s:10:"69.90.13.5";s:13:"ns2.peer1.net";s:10:"69.90.13.6";}}s:5:"owner";a:4:{s:7:"address";a:1:{s:7:"address";a:1:{i:0;s:44:"POBOX 15394,Boston, Massachusetts, 02215, US";}}s:5:"phone";s:13:"+1.5184691576";s:3:"fax";s:13:"+1.9542069066";s:5:"email";s:23:"info@durnicompanies.com";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:16:"http://www.co.za";s:9:"registrar";s:20:"UniForum Association";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:29:"http://co.za/cgi-bin/whois.sh";s:4:"args";s:16:"Domain=sex.co.za";s:4:"port";i:80;}}s:4:"type";s:6:"domain";}}s:10:"sex.org.za";a:2:{s:8:"regrinfo";a:6:{s:5:"owner";a:2:{s:4:"name";s:9:"FastPages";s:7:"address";a:1:{i:0;s:31:"PO Box 1264, Wingate Park, 0153";}}s:5:"admin";a:4:{s:5:"email";s:21:"admin@webonline.co.za";s:4:"name";s:25:"Admin Web Online <>";s:3:"fax";s:15:"+27 861 232 323";s:5:"phone";s:15:"+27 861 666 555";}s:4:"tech";a:4:{s:5:"email";s:23:"support@webonline.co.za";s:4:"name";s:27:"Support Web Online <>";s:3:"fax";s:15:"+27 861 232 323";s:5:"phone";s:15:"+27 861 666 555";}s:7:"billing";a:4:{s:5:"email";s:24:"accounts@webonline.co.za";s:4:"name";s:28:"Accounts Web Online <>";s:3:"fax";s:15:"+27 861 232 323";s:5:"phone";s:15:"+27 861 666 555";}s:6:"domain";a:5:{s:7:"changed";s:20:"27-Mar-2002 08:27:58";s:6:"status";s:6:"Active";s:7:"nserver";a:2:{s:20:"dns4.webonline.co.za";s:14:"160.124.112.68";s:20:"dns2.webonline.co.za";s:13:"196.25.84.199";}s:7:"handler";s:20:"SEX_1017210478_ORGZA";s:4:"name";s:10:"sex.org.za";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.org.za";s:9:"registrar";s:17:"The ORG.ZA Domain";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:32:"http://www.org.za/cgi-bin/rwhois";s:4:"args";s:29:"domain=sex.org.za&format=full";s:4:"port";i:80;}}s:4:"type";s:6:"domain";}}s:10:"smile.coop";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:6:"handle";s:10:"4636D-COOP";s:4:"name";s:10:"smile.coop";s:7:"expires";s:10:"2013-01-30";s:6:"status";s:2:"ok";s:7:"sponsor";s:12:"domains.coop";s:7:"created";s:10:"2001-07-10";s:7:"changed";s:10:"2010-12-22";s:7:"nserver";a:2:{s:16:"ns1.netnames.net";s:14:"204.74.108.253";s:16:"ns2.netnames.net";s:13:"62.128.146.40";}}s:10:"registered";s:3:"yes";s:5:"owner";a:7:{s:6:"handle";s:11:"77915C-COOP";s:4:"name";s:8:"NetNames";s:12:"organization";s:36:"Co operative Financial Services Ltd.";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:9:"1st Floor";i:1;s:13:"Miller Street";}s:4:"city";s:10:"Manchester";s:5:"state";s:18:"Manchester(Cityof)";s:5:"pcode";s:7:"M60 0AL";s:7:"country";s:14:"United Kingdom";}s:5:"phone";s:14:"+44.2070159316";s:3:"fax";s:14:"+44.8704589404";s:5:"email";s:31:"corporate-services@netnames.com";}s:4:"tech";a:7:{s:6:"handle";s:11:"77915C-COOP";s:4:"name";s:8:"NetNames";s:12:"organization";s:36:"Co operative Financial Services Ltd.";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:9:"1st Floor";i:1;s:13:"Miller Street";}s:4:"city";s:10:"Manchester";s:5:"state";s:18:"Manchester(Cityof)";s:5:"pcode";s:7:"M60 0AL";s:7:"country";s:14:"United Kingdom";}s:5:"phone";s:14:"+44.2070159316";s:3:"fax";s:14:"+44.8704589404";s:5:"email";s:31:"corporate-services@netnames.com";}s:5:"admin";a:7:{s:6:"handle";s:11:"77915C-COOP";s:4:"name";s:8:"NetNames";s:12:"organization";s:36:"Co operative Financial Services Ltd.";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:9:"1st Floor";i:1;s:13:"Miller Street";}s:4:"city";s:10:"Manchester";s:5:"state";s:18:"Manchester(Cityof)";s:5:"pcode";s:7:"M60 0AL";s:7:"country";s:14:"United Kingdom";}s:5:"phone";s:14:"+44.2070159316";s:3:"fax";s:14:"+44.8704589404";s:5:"email";s:31:"corporate-services@netnames.com";}s:7:"billing";a:7:{s:6:"handle";s:11:"77915C-COOP";s:4:"name";s:8:"NetNames";s:12:"organization";s:36:"Co operative Financial Services Ltd.";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:9:"1st Floor";i:1;s:13:"Miller Street";}s:4:"city";s:10:"Manchester";s:5:"state";s:18:"Manchester(Cityof)";s:5:"pcode";s:7:"M60 0AL";s:7:"country";s:14:"United Kingdom";}s:5:"phone";s:14:"+44.2070159316";s:3:"fax";s:14:"+44.8704589404";s:5:"email";s:31:"corporate-services@netnames.com";}}s:8:"regyinfo";a:4:{s:8:"referrer";s:19:"http://www.nic.coop";s:9:"registrar";s:14:".coop registry";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:22:"coop.whois-servers.net";s:4:"args";s:10:"smile.coop";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:9:"ficora.fi";a:2:{s:8:"regrinfo";a:3:{s:6:"domain";a:5:{s:4:"name";s:9:"ficora.fi";s:6:"status";s:7:"Granted";s:7:"created";s:10:"2001-06-29";s:7:"expires";s:10:"2012-08-31";s:7:"nserver";a:3:{s:14:"dns1.ficora.fi";s:13:"87.239.126.33";s:14:"dns2.ficora.fi";s:13:"87.239.126.66";s:21:"ns-secondary.funet.fi";s:15:"128.214.248.132";}}s:5:"owner";a:3:{s:4:"name";a:2:{i:0;s:16:"Viestintvirasto";i:1;s:8:"07090192";}s:7:"address";a:4:{i:0;s:14:"Tietotekniikka";i:1;s:6:"PL 313";i:2;s:5:"00181";i:3;s:8:"Helsinki";}s:5:"phone";s:10:"+358969661";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:25:"https://domain.ficora.fi/";s:9:"registrar";s:43:"Finnish Communications Regulatory Authority";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"fi.whois-servers.net";s:4:"args";s:9:"ficora.fi";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"nic.fr";a:2:{s:8:"regrinfo";a:6:{s:10:"registered";s:3:"yes";s:5:"admin";a:12:{s:6:"handle";s:10:"NFC1-FRNIC";s:4:"type";s:4:"ROLE";s:7:"contact";s:18:"NIC France Contact";s:7:"address";a:6:{i:0;s:5:"AFNIC";i:1;s:22:"immeuble international";i:2;s:17:"2, rue Stephenson";i:3;s:22:"Montigny le Bretonneux";i:4;s:37:"78181 Saint Quentin en Yvelines Cedex";s:7:"country";s:2:"FR";}s:5:"phone";s:17:"+33 1 39 30 83 00";s:5:"email";s:17:"hostmaster@nic.fr";s:7:"admin-c";s:10:"NFC1-FRNIC";s:6:"tech-c";a:9:{i:0;s:10:"PL12-FRNIC";i:1;s:8:"JP-FRNIC";i:2;s:12:"MS1887-FRNIC";i:3;s:8:"VL-FRNIC";i:4;s:12:"PR1249-FRNIC";i:5;s:11:"PV827-FRNIC";i:6;s:11:"GO661-FRNIC";i:7;s:8:"MS-FRNIC";i:8;s:9:"AI1-FRNIC";}s:7:"changed";s:10:"2005-08-23";s:9:"anonymous";s:2:"NO";s:9:"obsoleted";s:2:"NO";s:6:"source";s:5:"FRNIC";}s:4:"tech";a:12:{s:6:"handle";s:10:"NFC1-FRNIC";s:4:"type";s:4:"ROLE";s:7:"contact";s:18:"NIC France Contact";s:7:"address";a:6:{i:0;s:5:"AFNIC";i:1;s:22:"immeuble international";i:2;s:17:"2, rue Stephenson";i:3;s:22:"Montigny le Bretonneux";i:4;s:37:"78181 Saint Quentin en Yvelines Cedex";s:7:"country";s:2:"FR";}s:5:"phone";s:17:"+33 1 39 30 83 00";s:5:"email";s:17:"hostmaster@nic.fr";s:7:"admin-c";s:10:"NFC1-FRNIC";s:6:"tech-c";a:9:{i:0;s:10:"PL12-FRNIC";i:1;s:8:"JP-FRNIC";i:2;s:12:"MS1887-FRNIC";i:3;s:8:"VL-FRNIC";i:4;s:12:"PR1249-FRNIC";i:5;s:11:"PV827-FRNIC";i:6;s:11:"GO661-FRNIC";i:7;s:8:"MS-FRNIC";i:8;s:9:"AI1-FRNIC";}s:7:"changed";s:10:"2005-08-23";s:9:"anonymous";s:2:"NO";s:9:"obsoleted";s:2:"NO";s:6:"source";s:5:"FRNIC";}s:4:"zone";a:12:{s:6:"handle";s:10:"NFC1-FRNIC";s:4:"type";s:4:"ROLE";s:7:"contact";s:18:"NIC France Contact";s:7:"address";a:6:{i:0;s:5:"AFNIC";i:1;s:22:"immeuble international";i:2;s:17:"2, rue Stephenson";i:3;s:22:"Montigny le Bretonneux";i:4;s:37:"78181 Saint Quentin en Yvelines Cedex";s:7:"country";s:2:"FR";}s:5:"phone";s:17:"+33 1 39 30 83 00";s:5:"email";s:17:"hostmaster@nic.fr";s:7:"admin-c";s:10:"NFC1-FRNIC";s:6:"tech-c";a:9:{i:0;s:10:"PL12-FRNIC";i:1;s:8:"JP-FRNIC";i:2;s:12:"MS1887-FRNIC";i:3;s:8:"VL-FRNIC";i:4;s:12:"PR1249-FRNIC";i:5;s:11:"PV827-FRNIC";i:6;s:11:"GO661-FRNIC";i:7;s:8:"MS-FRNIC";i:8;s:9:"AI1-FRNIC";}s:7:"changed";s:10:"2005-08-23";s:9:"anonymous";s:2:"NO";s:9:"obsoleted";s:2:"NO";s:6:"source";s:5:"FRNIC";}s:5:"owner";a:10:{s:6:"handle";s:12:"AFNI21-FRNIC";s:4:"type";s:12:"ORGANIZATION";s:7:"contact";s:34:"ASS FRANC NOMMAGE INTERNET EN COOP";s:7:"address";a:4:{i:0;s:22:"immeuble international";i:1;s:17:"2, rue Stephenson";i:2;s:28:"78181 Montigny-le-Bretonneux";s:7:"country";s:2:"FR";}s:7:"changed";s:10:"2009-12-02";s:9:"anonymous";s:2:"NO";s:9:"obsoleted";s:2:"NO";s:10:"eligstatus";s:2:"ok";s:8:"eligdate";s:19:"01/01/1995 00:00:00";s:6:"source";s:5:"FRNIC";}s:6:"domain";a:10:{s:6:"status";s:6:"ACTIVE";s:4:"hold";s:2:"NO";s:6:"dsl-id";s:11:"SIGN6-FRNIC";s:7:"sponsor";s:14:"AFNIC registry";s:7:"created";s:10:"1995-01-01";s:7:"changed";s:10:"2012-02-15";s:6:"source";s:5:"FRNIC";s:6:"handle";s:14:"NSL53707-FRNIC";s:7:"nserver";a:6:{s:10:"ns1.nic.fr";s:11:"192.134.4.1";s:10:"ns2.nic.fr";s:10:"192.93.0.4";s:10:"ns3.nic.fr";s:12:"192.134.0.49";s:14:"ns1.ext.nic.fr";s:13:"193.51.208.13";s:14:"ns4.ext.nic.fr";s:9:"193.0.9.4";s:14:"ns6.ext.nic.fr";s:13:"130.59.211.10";}s:4:"name";s:6:"nic.fr";}}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.nic.fr";s:9:"registrar";s:5:"AFNIC";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"fr.whois-servers.net";s:4:"args";s:6:"nic.fr";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:11:"lemonade.fr";a:2:{s:8:"regrinfo";a:5:{s:10:"registered";s:3:"yes";s:5:"admin";a:10:{s:6:"handle";s:12:"ACN385-FRNIC";s:4:"type";s:6:"PERSON";s:7:"contact";s:22:"Admin-C Nettraffic. Fr";s:7:"address";a:4:{i:0;s:32:"5, avenue albert durand Aeropole";i:1;s:10:"batiment 1";i:2;s:13:"31700 Blagnac";s:7:"country";s:2:"FR";}s:5:"phone";s:17:"+33 9 70 46 73 11";s:5:"email";s:21:"contact@nettraffic.fr";s:7:"changed";s:10:"2009-12-23";s:9:"anonymous";s:2:"NO";s:9:"obsoleted";s:2:"NO";s:6:"source";s:5:"FRNIC";}s:4:"tech";a:11:{s:6:"handle";s:11:"ER507-FRNIC";s:4:"type";s:4:"ROLE";s:7:"contact";s:9:"EDNS ROLE";s:7:"address";a:4:{i:0;s:12:"EuroDNS S.A.";i:1;s:16:"41, z.a. am Bann";i:2;s:15:"3372 Leudelange";i:3;s:2:"LU";}s:5:"email";s:23:"dnsfr@admin.eurodns.com";s:7:"admin-c";s:12:"MM2096-FRNIC";s:6:"tech-c";s:10:"PYG1-FRNIC";s:7:"changed";s:10:"2006-05-15";s:9:"anonymous";s:2:"NO";s:9:"obsoleted";s:2:"NO";s:6:"source";s:5:"FRNIC";}s:5:"owner";a:12:{s:6:"handle";s:11:"N2591-FRNIC";s:4:"type";s:12:"ORGANIZATION";s:7:"contact";s:13:"NetTraffic.fr";s:7:"address";a:4:{i:0;s:32:"5, avenue albert durand Aeropole";i:1;s:10:"batiment 1";i:2;s:13:"31700 Blagnac";s:7:"country";s:2:"FR";}s:5:"phone";s:17:"+33 9 70 46 73 11";s:5:"email";s:21:"contact@nettraffic.fr";s:7:"changed";s:10:"2009-12-23";s:9:"anonymous";s:2:"NO";s:9:"obsoleted";s:2:"NO";s:10:"eligstatus";s:2:"ok";s:8:"eligdate";s:19:"31/07/2008 00:00:00";s:6:"source";s:5:"FRNIC";}s:6:"domain";a:9:{s:6:"status";s:6:"ACTIVE";s:4:"hold";s:2:"NO";s:7:"sponsor";s:12:"EURODNS S.A.";s:7:"created";s:10:"2007-08-29";s:7:"changed";s:10:"2011-09-20";s:6:"source";s:5:"FRNIC";s:6:"handle";s:13:"NSL9131-FRNIC";s:7:"nserver";a:2:{s:19:"ns1.sedoparking.com";s:14:"209.239.114.58";s:19:"ns2.sedoparking.com";s:11:"74.208.8.95";}s:4:"name";s:11:"lemonade.fr";}}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.nic.fr";s:9:"registrar";s:5:"AFNIC";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"fr.whois-servers.net";s:4:"args";s:11:"lemonade.fr";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"nic.it";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:5:{s:4:"name";s:6:"nic.it";s:6:"status";s:6:"ACTIVE";s:7:"expires";s:10:"2013-12-31";s:7:"nserver";a:6:{s:10:"dns.nic.it";s:12:"192.12.192.5";s:17:"nameserver.cnr.it";s:14:"194.119.192.34";s:8:"m.dns.it";s:11:"217.29.76.4";s:10:"ns2.nic.it";s:12:"192.12.192.3";s:8:"r.dns.it";s:14:"193.206.141.46";s:8:"c.dns.it";s:10:"194.0.1.22";}s:9:"registrar";a:3:{s:12:"organization";s:19:"ccTLD 'it' Registry";s:4:"name";s:12:"REGISTRY-MNT";s:3:"web";s:17:"http://www.nic.it";}}s:5:"owner";a:5:{s:4:"name";s:30:"ccTLD '.it' Registry - IIT/CNR";s:6:"handle";s:11:"CCTL1-ITNIC";s:7:"address";a:5:{i:0;s:22:"Via Giuseppe Moruzzi 1";i:1;s:4:"Pisa";i:2;s:5:"56124";i:3;s:2:"PI";i:4;s:2:"IT";}s:7:"created";s:10:"2007-03-01";s:7:"changed";s:10:"2008-04-01";}s:5:"admin";a:6:{s:4:"name";s:18:"Domenico Laforenza";s:12:"organization";s:67:"Istituto di Informatica e Telematica del CNR - ccTLD ".it" Registry";s:6:"handle";s:9:"DL1-ITNIC";s:7:"address";a:5:{i:0;s:23:"Via Giuseppe Moruzzi, 1";i:1;s:4:"Pisa";i:2;s:5:"56124";i:3;s:2:"PI";i:4;s:2:"IT";}s:7:"created";s:10:"2008-07-11";s:7:"changed";s:10:"2011-05-24";}s:4:"tech";a:6:{s:4:"name";s:19:"Maurizio Martinelli";s:12:"organization";s:67:"Istituto di Informatica e Telematica del CNR - ccTLD ".it" Registry";s:6:"handle";s:10:"MM13-ITNIC";s:7:"address";a:10:{i:0;s:23:"Via Giuseppe Moruzzi, 1";i:1;s:23:"Via Giuseppe Moruzzi, 1";i:2;s:4:"Pisa";i:3;s:5:"56124";i:4;s:2:"PI";i:5;s:2:"IT";i:6;s:4:"Pisa";i:7;s:5:"56124";i:8;s:2:"PI";i:9;s:2:"IT";}s:7:"created";s:10:"1998-04-14";s:7:"changed";s:10:"2011-02-02";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:6:"IT-Nic";s:8:"referrer";s:18:"http://www.nic.it/";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"it.whois-servers.net";s:4:"args";s:6:"nic.it";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:7:"news.su";a:2:{s:8:"regrinfo";a:3:{s:6:"domain";a:4:{s:4:"name";s:7:"news.su";s:6:"status";s:25:"REGISTERED, NOT DELEGATED";s:7:"created";s:10:"2003-06-27";s:7:"expires";s:10:"2012-06-27";}s:5:"owner";a:2:{s:4:"name";s:14:"Private Person";s:5:"email";s:12:"bag@demos.su";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:19:"http://www.ripn.net";s:9:"registrar";s:17:"RUCENTER-REG-RIPN";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"su.whois-servers.net";s:4:"args";s:7:"news.su";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"nic.ve";a:2:{s:8:"regrinfo";a:6:{s:5:"owner";a:5:{s:5:"email";s:24:"jhovalera@conatel.gob.ve";s:4:"name";s:27:"Jhonny Valera (nic.ve-dom)";s:3:"fax";s:13:"+582127718599";s:5:"phone";s:12:"0212-9090493";s:7:"address";a:3:{i:1;s:39:"Comision Nacional de Telecomunicaciones";i:2;s:59:"Av. Veracruz con calle Cali, Edif Aguila, Urb. Las Mercedes";i:3;s:29:"Caracas, Distrito Capital VE";}}s:6:"domain";a:5:{s:4:"name";s:6:"nic.ve";s:7:"changed";s:19:"2010-12-13 20:40:51";s:7:"created";s:19:"2005-11-15 14:50:14";s:6:"status";s:6:"ACTIVO";s:7:"nserver";a:2:{s:10:"ns1.nic.ve";s:13:"150.188.228.4";s:10:"ns2.nic.ve";s:13:"150.188.228.5";}}s:5:"admin";a:5:{s:5:"email";s:22:"emendez@conatel.gob.ve";s:4:"name";s:28:"Eduardo Mendez (nic.ve-adm)";s:3:"fax";s:13:"+582127718599";s:5:"phone";s:12:"0212-9090398";s:7:"address";a:3:{i:1;s:39:"Comision Nacional de Telecomunicaciones";i:2;s:59:"Av. Veracruz con calle Cali, Edif Aguila, Urb. Las Mercedes";i:3;s:29:"Caracas, Distrito Capital VE";}}s:4:"tech";a:5:{s:5:"email";s:19:"dgil@conatel.gob.ve";s:4:"name";s:26:"Dayerlin Gil (nic.ve-tec)";s:3:"fax";s:13:"+582127718599";s:5:"phone";s:12:"0212-9094687";s:7:"address";a:3:{i:1;s:39:"Comision Nacional de Telecomunicaciones";i:2;s:59:"Av. Veracruz con calle Cali, Edif Aguila, Urb. Las Mercedes";i:3;s:29:"Caracas, Distrito Capital VE";}}s:7:"billing";a:5:{s:5:"email";s:22:"rarenas@conatel.gob.ve";s:4:"name";s:26:"Ruben Arenas (nic.ve-bil)";s:3:"fax";s:13:"+582127718599";s:5:"phone";s:12:"0212-9090352";s:7:"address";a:3:{i:1;s:39:"Comision Nacional de Telecomunicaciones";i:2;s:59:"Av. Veracruz con calle Cali, Edif Aguila, Urb. Las Mercedes";i:3;s:29:"Caracas, Distrito Capital VE";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:22:"http://registro.nic.ve";s:9:"registrar";s:20:"NIC-Venezuela - CNTI";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:12:"whois.nic.ve";s:4:"args";s:6:"nic.ve";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:7:"surf.ws";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:7:"surf.ws";s:7:"sponsor";s:15:"SpinDomains.com";s:7:"created";s:10:"2006-05-08";s:7:"changed";s:10:"2011-04-25";s:7:"expires";s:10:"2012-05-08";s:7:"nserver";a:2:{s:20:"ns1.natureserver.com";s:16:"(DOES NOT EXIST)";s:20:"ns2.natureserver.com";s:16:"(DOES NOT EXIST)";}}s:5:"owner";a:4:{s:12:"organization";s:32:"Use registrar whois listed below";s:5:"email";s:32:"Use registrar whois listed below";s:4:"name";s:16:"Brett Blake Inc.";s:7:"address";a:3:{i:0;s:10:"PO Box 202";i:1;s:29:"Chino Hills, California 91709";i:2;s:13:"United States";}}s:5:"admin";a:5:{s:5:"email";s:20:"sales@brettblake.com";s:5:"phone";s:13:"+1.9096063030";s:4:"name";s:13:"Admin, Domain";s:3:"fax";s:1:"-";s:7:"address";a:4:{i:1;s:16:"Brett Blake Inc.";i:2;s:10:"PO Box 202";i:3;s:29:"Chino Hills, California 91709";i:4;s:13:"United States";}}s:10:"registered";s:3:"yes";s:4:"tech";a:5:{s:5:"email";s:20:"sales@brettblake.com";s:4:"name";s:12:"Tech, Domain";s:3:"fax";s:1:"-";s:5:"phone";s:13:"+1.9096063030";s:7:"address";a:4:{i:1;s:16:"Brett Blake Inc.";i:2;s:10:"PO Box 202";i:3;s:29:"Chino Hills, California 91709";i:4;s:13:"United States";}}}s:8:"regyinfo";a:4:{s:8:"referrer";s:22:"http://www.samoanic.ws";s:9:"registrar";s:9:"Samoa Nic";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:20:"ws.whois-servers.net";s:4:"args";s:7:"surf.ws";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:25:"whois.wildwestdomains.com";s:4:"args";s:7:"surf.ws";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:17:"itsyourdomain.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:6:{s:4:"name";s:17:"itsyourdomain.com";s:7:"nserver";a:2:{s:21:"ns1.itsyourdomain.com";s:12:"216.40.45.27";s:21:"ns2.itsyourdomain.com";s:12:"216.40.45.30";}s:6:"status";a:1:{i:0;s:24:"clientTransferProhibited";}s:7:"changed";s:10:"2008-04-21";s:7:"created";s:10:"1999-03-05";s:7:"expires";s:10:"2013-06-03";}s:10:"registered";s:3:"yes";s:5:"owner";a:4:{s:5:"email";s:19:"dnsadmin@tucows.com";s:5:"phone";s:13:"+1.4165312084";s:4:"name";s:14:"Tucows.com Co.";s:7:"address";a:3:{i:0;s:14:"Tucows.com Co.";i:1;s:8:"96 Mowat";i:2;s:27:"Toronto, Ontario M6K 3M1 CA";}}s:5:"admin";a:5:{s:5:"email";s:15:"support@iyd.com";s:5:"phone";s:13:"+1.8478954301";s:3:"fax";s:13:"+1.8478954123";s:4:"name";s:13:"ItsYourDomain";s:7:"address";a:3:{i:0;s:17:"ItsYourDomain.com";i:1;s:27:"1005 W. Wise Road Suite 201";i:2;s:23:"Schaumburg, IL 60193 US";}}s:7:"billing";a:5:{s:5:"email";s:15:"support@iyd.com";s:5:"phone";s:13:"+1.8478954301";s:3:"fax";s:13:"+1.8478954123";s:4:"name";s:13:"ItsYourDomain";s:7:"address";a:3:{i:0;s:17:"ItsYourDomain.com";i:1;s:27:"1005 W. Wise Road Suite 201";i:2;s:23:"Schaumburg, IL 60193 US";}}s:4:"tech";a:5:{s:5:"email";s:15:"support@iyd.com";s:5:"phone";s:13:"+1.8478954301";s:3:"fax";s:13:"+1.8478954123";s:4:"name";s:13:"ItsYourDomain";s:7:"address";a:3:{i:0;s:17:"ItsYourDomain.com";i:1;s:27:"1005 W. Wise Road Suite 201";i:2;s:23:"Schaumburg, IL 60193 US";}}}s:8:"regyinfo";a:4:{s:9:"registrar";s:39:"INNERWISE, INC. D/B/A ITSYOURDOMAIN.COM";s:8:"referrer";s:28:"http://www.itsyourdomain.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:25:"domain =itsyourdomain.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:23:"whois.itsyourdomain.com";s:4:"args";s:17:"itsyourdomain.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:13:"namevault.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:6:{s:4:"name";s:13:"namevault.com";s:7:"nserver";a:4:{s:32:"namevault.earth.orderbox-dns.com";s:13:"67.15.253.219";s:31:"namevault.mars.orderbox-dns.com";s:15:"184.173.149.221";s:34:"namevault.mercury.orderbox-dns.com";s:13:"50.23.136.173";s:32:"namevault.venus.orderbox-dns.com";s:11:"50.23.75.97";}s:6:"status";s:6:"ACTIVE";s:7:"changed";s:10:"2011-11-21";s:7:"created";s:10:"1999-01-17";s:7:"expires";s:10:"2018-01-17";}s:5:"owner";a:6:{s:5:"email";s:19:"whois@namevault.com";s:4:"name";s:13:"NameVault.com";s:5:"phone";s:12:"+800.8829010";s:3:"fax";s:12:"+800.8860640";s:12:"organization";s:17:"Homestead Limited";s:7:"address";a:5:{i:0;s:13:"PO Box N-3944";i:1;s:23:"Kings Court, Bay Street";i:2;s:6:"Nassau";i:3;s:20:"New Providence,00000";i:4;s:2:"BS";}}s:5:"admin";a:6:{s:5:"email";s:19:"whois@namevault.com";s:4:"name";s:13:"NameVault.com";s:5:"phone";s:12:"+800.8829010";s:3:"fax";s:12:"+800.8860640";s:12:"organization";s:17:"Homestead Limited";s:7:"address";a:5:{i:0;s:13:"PO Box N-3944";i:1;s:23:"Kings Court, Bay Street";i:2;s:6:"Nassau";i:3;s:20:"New Providence,00000";i:4;s:2:"BS";}}s:4:"tech";a:6:{s:5:"email";s:19:"whois@namevault.com";s:4:"name";s:13:"NameVault.com";s:5:"phone";s:12:"+800.8829010";s:3:"fax";s:12:"+800.8860640";s:12:"organization";s:17:"Homestead Limited";s:7:"address";a:5:{i:0;s:13:"PO Box N-3944";i:1;s:23:"Kings Court, Bay Street";i:2;s:6:"Nassau";i:3;s:20:"New Providence,00000";i:4;s:2:"BS";}}s:7:"billing";a:6:{s:5:"email";s:19:"whois@namevault.com";s:4:"name";s:13:"NameVault.com";s:5:"phone";s:12:"+800.8829010";s:3:"fax";s:12:"+800.8860640";s:12:"organization";s:17:"Homestead Limited";s:7:"address";a:5:{i:0;s:13:"PO Box N-3944";i:1;s:23:"Kings Court, Bay Street";i:2;s:6:"Nassau";i:3;s:20:"New Providence,00000";i:4;s:2:"BS";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:35:"HOMESTEAD LIMITED DBA NAMEVAULT.COM";s:8:"referrer";s:24:"http://www.namevault.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:21:"domain =namevault.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:19:"whois.namevault.com";s:4:"args";s:13:"namevault.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:8:"nic.asia";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:6:"handle";s:11:"D24374-ASIA";s:4:"name";s:8:"nic.asia";s:7:"created";s:10:"2007-10-26";s:7:"expires";s:10:"2017-10-26";s:7:"changed";s:10:"2011-11-08";s:7:"sponsor";s:29:"Afilias Ltd. R118-ASIA (9992)";s:6:"status";a:2:{i:0;s:17:"DELETE PROHIBITED";i:1;s:19:"TRANSFER PROHIBITED";}s:7:"nserver";a:5:{s:25:"ns1.ams1.afilias-nst.info";s:12:"199.19.48.79";s:25:"ns1.yyz1.afilias-nst.info";s:12:"199.19.49.79";s:25:"ns1.sea1.afilias-nst.info";s:12:"199.19.50.79";s:25:"ns1.mia1.afilias-nst.info";s:12:"199.19.52.79";s:25:"ns1.hkg1.afilias-nst.info";s:12:"199.19.51.79";}}s:5:"owner";a:7:{s:6:"handle";s:9:"Afilias-1";s:4:"name";s:15:"Afilias Limited";s:12:"organization";s:12:"Afilias Ltd.";s:7:"address";a:4:{s:6:"street";a:2:{i:0;s:10:"Office 125";i:1;s:17:"52 Broomhill Road";}s:4:"city";s:8:"Tallaght";s:7:"country";s:2:"IE";s:5:"pcode";s:9:"Dublin 24";}s:5:"phone";s:13:"+1.2157065700";s:3:"fax";s:13:"+1.2157065701";s:5:"email";s:27:"techsupport@ca.afilias.info";}s:5:"admin";a:7:{s:6:"handle";s:9:"Afilias-1";s:4:"name";s:15:"Afilias Limited";s:12:"organization";s:12:"Afilias Ltd.";s:7:"address";a:4:{s:6:"street";a:2:{i:0;s:10:"Office 125";i:1;s:17:"52 Broomhill Road";}s:4:"city";s:8:"Tallaght";s:7:"country";s:2:"IE";s:5:"pcode";s:9:"Dublin 24";}s:5:"phone";s:13:"+1.2157065700";s:3:"fax";s:13:"+1.2157065701";s:5:"email";s:27:"techsupport@ca.afilias.info";}s:4:"tech";a:7:{s:6:"handle";s:9:"Afilias-1";s:4:"name";s:15:"Afilias Limited";s:12:"organization";s:12:"Afilias Ltd.";s:7:"address";a:4:{s:6:"street";a:2:{i:0;s:10:"Office 125";i:1;s:17:"52 Broomhill Road";}s:4:"city";s:8:"Tallaght";s:7:"country";s:2:"IE";s:5:"pcode";s:9:"Dublin 24";}s:5:"phone";s:13:"+1.2157065700";s:3:"fax";s:13:"+1.2157065701";s:5:"email";s:27:"techsupport@ca.afilias.info";}s:7:"billing";a:7:{s:6:"handle";s:9:"Afilias-1";s:4:"name";s:15:"Afilias Limited";s:12:"organization";s:12:"Afilias Ltd.";s:7:"address";a:4:{s:6:"street";a:2:{i:0;s:10:"Office 125";i:1;s:17:"52 Broomhill Road";}s:4:"city";s:8:"Tallaght";s:7:"country";s:2:"IE";s:5:"pcode";s:9:"Dublin 24";}s:5:"phone";s:13:"+1.2157065700";s:3:"fax";s:13:"+1.2157065701";s:5:"email";s:27:"techsupport@ca.afilias.info";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:23:"http://www.dotasia.org/";s:9:"registrar";s:7:"DotAsia";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:22:"asia.whois-servers.net";s:4:"args";s:8:"nic.asia";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:9:"domain.me";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:8:{s:6:"handle";s:8:"D2628-ME";s:4:"name";s:9:"domain.me";s:7:"created";s:10:"2008-04-29";s:7:"changed";s:10:"2011-03-17";s:7:"expires";s:10:"2013-04-29";s:7:"sponsor";s:20:"doMEn reserved R5-ME";s:6:"status";a:2:{i:0;s:19:"TRANSFER PROHIBITED";i:1;s:17:"UPDATE PROHIBITED";}s:7:"nserver";a:2:{s:15:"ans01.domain.me";s:13:"216.69.185.40";s:15:"ans02.domain.me";s:14:"208.109.255.40";}}s:5:"owner";a:6:{s:6:"handle";s:8:"ME-00002";s:4:"name";s:5:"doMEn";s:12:"organization";s:22:"REGISTRY RESERVED NAME";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:22:"Dzordza Vasingtona bb.";}s:4:"city";s:9:"Podgorica";s:7:"country";s:2:"ME";s:5:"pcode";s:5:"81000";}s:5:"phone";s:13:"+382.20269740";s:5:"email";s:18:"reserved@domain.me";}s:5:"admin";a:6:{s:6:"handle";s:8:"ME-00002";s:4:"name";s:5:"doMEn";s:12:"organization";s:22:"REGISTRY RESERVED NAME";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:22:"Dzordza Vasingtona bb.";}s:4:"city";s:9:"Podgorica";s:7:"country";s:2:"ME";s:5:"pcode";s:5:"81000";}s:5:"phone";s:13:"+382.20269740";s:5:"email";s:18:"reserved@domain.me";}s:4:"tech";a:6:{s:6:"handle";s:8:"ME-00002";s:4:"name";s:5:"doMEn";s:12:"organization";s:22:"REGISTRY RESERVED NAME";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:22:"Dzordza Vasingtona bb.";}s:4:"city";s:9:"Podgorica";s:7:"country";s:2:"ME";s:5:"pcode";s:5:"81000";}s:5:"phone";s:13:"+382.20269740";s:5:"email";s:18:"reserved@domain.me";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:16:"http://domain.me";s:9:"registrar";s:5:"doMEn";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"whois.meregistry.net";s:4:"args";s:9:"domain.me";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:8:"arnes.si";a:2:{s:8:"regrinfo";a:2:{s:10:"registered";s:3:"yes";s:6:"domain";a:9:{s:6:"domain";s:8:"arnes.si";s:9:"registrar";s:5:"Arnes";s:13:"registrar-url";s:78:"http://www.arnes.si/storitve/splet-posta-strezniki/registracija-si-domene.html";s:7:"nserver";a:6:{s:12:"ns4.arnes.eu";s:11:"130.59.1.30";s:11:"aa.arnes.si";s:10:"193.2.1.87";s:12:"niobe.ijs.si";s:10:"193.2.4.24";s:14:"nanos.arnes.si";s:11:"193.2.1.105";s:21:"si-ns.anycast.pch.net";s:13:"204.61.216.54";s:12:"ns8.arnes.eu";s:10:"194.0.1.20";}s:6:"status";s:2:"ok";s:7:"created";s:10:"1992-01-01";s:6:"expire";s:10:"2012-06-06";s:6:"source";s:5:"ARNES";s:4:"name";s:8:"arnes.si";}}s:8:"regyinfo";a:4:{s:8:"referrer";s:19:"http://www.arnes.si";s:9:"registrar";s:5:"ARNES";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"si.whois-servers.net";s:4:"args";s:8:"arnes.si";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:8:"china.cn";a:2:{s:8:"regrinfo";a:3:{s:6:"domain";a:7:{s:4:"name";s:8:"china.cn";s:6:"handle";s:26:"20030310s10001s00012979-cn";s:6:"status";a:3:{i:0;s:22:"serverDeleteProhibited";i:1;s:22:"serverUpdateProhibited";i:2;s:24:"serverTransferProhibited";}s:7:"sponsor";s:43:"北京中科三方网络技术有限公司*";s:7:"nserver";a:2:{s:16:"ns1.china.org.cn";s:14:"202.130.245.13";s:23:"ns1.china-online.com.cn";s:13:"210.72.21.251";}s:7:"created";s:10:"2003-03-10";s:7:"expires";s:10:"2013-05-08";}s:5:"owner";a:3:{s:12:"organization";s:27:"中国互联网新闻中心";s:4:"name";s:9:"黄友义";s:5:"email";s:20:"linyang@china.com.cn";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:23:"http://www.cnnic.net.cn";s:9:"registrar";s:9:"China NIC";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"cn.whois-servers.net";s:4:"args";s:8:"china.cn";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:12:"ks2-hanau.de";a:2:{s:8:"regrinfo";a:4:{s:6:"domain";a:4:{s:4:"name";s:12:"ks2-hanau.de";s:7:"nserver";a:2:{s:9:"ns1.ns.de";s:11:"78.46.85.68";s:9:"ns2.ns.de";s:13:"178.63.102.84";}s:6:"status";s:7:"connect";s:7:"changed";s:10:"2011-09-10";}s:4:"tech";a:5:{s:4:"name";s:13:"VU MEDIA LTD.";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:26:"Caldervale Road, Wakefield";}s:5:"pcode";s:6:"WF15PF";s:4:"city";s:14:"West Yorkshire";s:7:"country";s:2:"GB";}s:5:"phone";s:15:"+44 1924 850461";s:3:"fax";s:15:"+44 1924 850461";s:5:"email";s:22:"uk.stevenson@gmail.com";}s:4:"zone";a:5:{s:4:"name";s:13:"VU MEDIA LTD.";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:26:"Caldervale Road, Wakefield";}s:5:"pcode";s:6:"WF15PF";s:4:"city";s:14:"West Yorkshire";s:7:"country";s:2:"GB";}s:5:"phone";s:15:"+44 1924 850461";s:3:"fax";s:15:"+44 1924 850461";s:5:"email";s:22:"uk.stevenson@gmail.com";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:8:"DENIC eG";s:8:"referrer";s:20:"http://www.denic.de/";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"de.whois-servers.net";s:4:"args";s:22:"-T dn,ace ks2-hanau.de";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:7:"nic.tel";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:7:{s:4:"name";s:7:"nic.tel";s:6:"handle";s:11:"D583364-TEL";s:7:"sponsor";s:18:"REGISTRY REGISTRAR";s:6:"status";a:1:{i:0;s:8:"inactive";}s:7:"created";s:10:"2009-03-23";s:7:"expires";s:10:"2012-03-22";s:7:"changed";s:10:"2012-01-11";}s:5:"owner";a:7:{s:6:"handle";s:13:"TELNICCONTACT";s:4:"name";s:6:"TELNIC";s:12:"organization";s:11:"Telnic Ltd.";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:15:"37 Percy Street";}s:4:"city";s:6:"London";s:5:"pcode";s:7:"W1T 2DJ";s:7:"country";s:14:"UNITED KINGDOM";}s:5:"phone";s:14:"+44.2074746450";s:3:"fax";s:14:"+44.2074676451";s:5:"email";s:25:"tel-admin-contact@nic.tel";}s:5:"admin";a:7:{s:6:"handle";s:13:"TELNICCONTACT";s:4:"name";s:6:"TELNIC";s:12:"organization";s:11:"Telnic Ltd.";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:15:"37 Percy Street";}s:4:"city";s:6:"London";s:5:"pcode";s:7:"W1T 2DJ";s:7:"country";s:14:"UNITED KINGDOM";}s:5:"phone";s:14:"+44.2074746450";s:3:"fax";s:14:"+44.2074676451";s:5:"email";s:25:"tel-admin-contact@nic.tel";}s:7:"billing";a:7:{s:6:"handle";s:13:"TELNICCONTACT";s:4:"name";s:6:"TELNIC";s:12:"organization";s:11:"Telnic Ltd.";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:15:"37 Percy Street";}s:4:"city";s:6:"London";s:5:"pcode";s:7:"W1T 2DJ";s:7:"country";s:14:"UNITED KINGDOM";}s:5:"phone";s:14:"+44.2074746450";s:3:"fax";s:14:"+44.2074676451";s:5:"email";s:25:"tel-admin-contact@nic.tel";}s:4:"tech";a:7:{s:6:"handle";s:14:"TELNICCONTACT2";s:4:"name";s:22:".tel Technical Contact";s:12:"organization";s:11:"Telnic Ltd.";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:16:"8 Wilfred Street";}s:4:"city";s:6:"London";s:5:"pcode";s:8:"SW1E 6PL";s:7:"country";s:14:"UNITED KINGDOM";}s:5:"phone";s:14:"+44.2074746450";s:3:"fax";s:14:"+44.2074676451";s:5:"email";s:24:"tel-tech-contact@nic.tel";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:21:"http://www.telnic.org";s:9:"registrar";s:6:"Telnic";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:21:"tel.whois-servers.net";s:4:"args";s:7:"nic.tel";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:9:"usp.ac.fj";a:2:{s:8:"regrinfo";a:3:{s:6:"domain";a:4:{s:6:"status";s:6:"Active";s:4:"name";s:9:"usp.ac.fj";s:7:"expires";s:10:"2020-12-31";s:7:"nserver";a:2:{s:14:"manu.usp.ac.fj";s:12:"144.120.8.10";s:14:"teri.usp.ac.fj";s:11:"144.120.8.1";}}s:5:"owner";a:2:{s:4:"name";s:35:"The University of the South Pacific";s:7:"address";a:1:{i:0;s:11:"IT Services";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:21:"http://www.domains.fj";s:9:"registrar";s:23:"FJ Domain Name Registry";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:15:"whois.usp.ac.fj";s:4:"args";s:9:"usp.ac.fj";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"nic.ly";a:2:{s:8:"regrinfo";a:5:{s:5:"owner";a:5:{s:5:"phone";s:18:"+ 218 (21) 3400020";s:3:"fax";s:18:"+ 218 (21) 3400039";s:5:"email";s:18:"support@lttnet.net";s:4:"name";s:28:"Libya Telecom and Technology";s:7:"address";a:5:{i:0;s:23:"AbdulNasir A. Al-Tubuly";i:1;s:25:"Abu Seta,Near Al-Furusia,";i:2;s:12:"Al-Shutt St.";i:3;s:7:"Tripoli";i:4;s:5:"Libya";}}s:6:"domain";a:6:{s:4:"name";s:6:"nic.ly";s:7:"created";s:19:"2006-11-13 10:02:37";s:7:"changed";s:19:"2006-11-13 10:02:37";s:7:"expires";s:19:"2016-11-13 10:02:37";s:7:"nserver";a:2:{s:15:"dns1.lttnet.net";s:10:"62.68.42.9";s:14:"dns.lttnet.net";s:11:"62.240.36.9";}s:6:"status";s:6:"ACTIVE";}s:5:"admin";a:5:{s:7:"address";a:6:{s:5:"pcode";s:5:"91216";i:0;s:23:"AbdulNasir A. Al-Tubuly";i:1;s:25:"Abu Seta,Near Al-Furusia,";i:2;s:12:"Al-Shutt St.";i:3;s:7:"Tripoli";i:4;s:5:"Libya";}s:5:"phone";s:18:"+ 218 (21) 3400020";s:3:"fax";s:18:"+ 218 (21) 3400039";s:5:"email";s:18:"support@lttnet.net";s:4:"name";s:28:"Libya Telecom and Technology";}s:4:"tech";a:5:{s:7:"address";a:6:{s:5:"pcode";s:5:"91216";i:0;s:23:"AbdulNasir A. Al-Tubuly";i:1;s:25:"Abu Seta,Near Al-Furusia,";i:2;s:12:"Al-Shutt St.";i:3;s:7:"Tripoli";i:4;s:5:"Libya";}s:5:"phone";s:18:"+ 218 (21) 3400020";s:3:"fax";s:18:"+ 218 (21) 3400048";s:5:"email";s:18:"support@lttnet.net";s:4:"name";s:28:"Libya Telecom and Technology";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.nic.ly";s:9:"registrar";s:11:"Libya ccTLD";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:12:"whois.nic.ly";s:4:"args";s:6:"nic.ly";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:16:"domainpeople.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:4:"name";s:16:"domainpeople.com";s:7:"nserver";a:2:{s:20:"ns1.domainpeople.com";s:14:"204.174.223.72";s:20:"ns2.domainpeople.com";s:12:"64.40.96.140";}s:6:"status";s:6:"Locked";s:7:"changed";s:10:"2011-03-24";s:7:"created";s:10:"1999-11-16";s:7:"expires";s:10:"2013-11-16";s:8:"referrer";a:8:{i:0;s:18:"DomainPeople, Inc.";i:1;s:33:"Dom Reg (domreg@domainpeople.com)";i:2;s:13:"+1.6046391680";i:3;s:4:"Fax:";i:4;s:26:"Bentall Tower 5, Suite 200";i:5;s:18:"550 Burrard Street";i:6;s:21:"Vancouver, BC V6C 2B5";i:7;s:2:"CA";}}s:5:"owner";a:2:{s:4:"name";s:18:"DomainPeople, Inc.";s:7:"address";a:5:{i:0;s:2:"()";i:1;s:26:"Bentall Tower 5, Suite 200";i:2;s:18:"550 Burrard Street";i:3;s:21:"Vancouver, BC V6C 2B5";i:4;s:2:"CA";}}s:5:"admin";a:4:{s:5:"email";s:23:"domreg@domainpeople.com";s:4:"name";s:7:"Dom Reg";s:5:"phone";s:13:"+1.6046391680";s:7:"address";a:5:{i:0;s:18:"DomainPeople, Inc.";i:4;s:26:"Bentall Tower 5, Suite 200";i:5;s:18:"550 Burrard Street";i:6;s:21:"Vancouver, BC V6C 2B5";i:7;s:2:"CA";}}s:4:"tech";a:4:{s:5:"email";s:23:"domreg@domainpeople.com";s:4:"name";s:7:"Dom Reg";s:5:"phone";s:13:"+1.6046391680";s:7:"address";a:5:{i:0;s:18:"DomainPeople, Inc.";i:4;s:26:"Bentall Tower 5, Suite 200";i:5;s:18:"550 Burrard Street";i:6;s:21:"Vancouver, BC V6C 2B5";i:7;s:2:"CA";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:18:"DOMAINPEOPLE, INC.";s:8:"referrer";s:27:"http://www.domainpeople.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:24:"domain =domainpeople.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:22:"whois.domainpeople.com";s:4:"args";s:16:"domainpeople.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:13:"dreamhost.com";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:6:{s:4:"name";s:13:"dreamhost.com";s:7:"nserver";a:3:{s:17:"ns1.dreamhost.com";s:13:"66.33.206.206";s:17:"ns2.dreamhost.com";s:13:"208.96.10.221";s:17:"ns3.dreamhost.com";s:13:"66.33.216.216";}s:6:"status";a:1:{i:0;s:2:"ok";}s:7:"changed";s:10:"2010-01-21";s:7:"created";s:10:"1997-09-22";s:7:"expires";s:10:"2013-09-21";}s:5:"owner";a:4:{s:5:"email";s:22:"internic@dreamhost.com";s:4:"name";s:21:"DreamHost Web Hosting";s:5:"phone";s:13:"+1.7147064182";s:7:"address";a:5:{i:1;s:23:"New Dream Network, LLC.";i:2;s:8:"PMB #257";i:3;s:18:"417 Associated Rd.";i:4;s:14:"Brea, CA 92821";i:5;s:2:"US";}}s:5:"admin";a:4:{s:5:"email";s:22:"internic@dreamhost.com";s:4:"name";s:21:"DreamHost Web Hosting";s:5:"phone";s:13:"+1.7147064182";s:7:"address";a:5:{i:1;s:23:"New Dream Network, LLC.";i:2;s:8:"PMB #257";i:3;s:18:"417 Associated Rd.";i:4;s:14:"Brea, CA 92821";i:5;s:2:"US";}}s:4:"tech";a:4:{s:5:"email";s:22:"internic@dreamhost.com";s:4:"name";s:21:"DreamHost Web Hosting";s:5:"phone";s:13:"+1.7147064182";s:7:"address";a:5:{i:1;s:23:"New Dream Network, LLC.";i:2;s:8:"PMB #257";i:3;s:18:"417 Associated Rd.";i:4;s:14:"Brea, CA 92821";i:5;s:2:"US";}}s:7:"billing";a:4:{s:5:"email";s:22:"internic@dreamhost.com";s:4:"name";s:21:"DreamHost Web Hosting";s:5:"phone";s:13:"+1.7147064182";s:7:"address";a:5:{i:1;s:23:"New Dream Network, LLC.";i:2;s:8:"PMB #257";i:3;s:18:"417 Associated Rd.";i:4;s:14:"Brea, CA 92821";i:5;s:2:"US";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:22:"NEW DREAM NETWORK, LLC";s:8:"referrer";s:24:"http://www.dreamhost.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:21:"domain =dreamhost.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:19:"whois.dreamhost.com";s:4:"args";s:13:"dreamhost.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:15:"markmonitor.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:7:{s:4:"name";s:15:"markmonitor.com";s:7:"nserver";a:7:{s:19:"ns1.markmonitor.com";s:12:"64.124.69.50";s:19:"ns2.markmonitor.com";s:12:"64.124.69.52";s:19:"ns3.markmonitor.com";s:14:"217.68.151.240";s:19:"ns4.markmonitor.com";s:14:"217.68.151.241";s:19:"ns5.markmonitor.com";s:15:"202.167.230.240";s:19:"ns6.markmonitor.com";s:15:"202.167.230.241";s:19:"ns7.markmonitor.com";s:12:"64.124.69.51";}s:6:"status";a:6:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";i:3;s:22:"serverDeleteProhibited";i:4;s:24:"serverTransferProhibited";i:5;s:22:"serverUpdateProhibited";}s:7:"changed";s:10:"2012-02-22";s:7:"created";s:10:"1999-04-23";s:7:"expires";s:10:"2015-04-22";s:7:"sponsor";s:15:"Markmonitor.com";}s:5:"owner";a:5:{s:5:"phone";s:13:"+1.8003377520";s:5:"email";s:24:"custserv@markmonitor.com";s:4:"name";s:16:"MarkMonitor Inc.";s:7:"address";a:3:{i:0;s:17:"391 N Ancestor Pl";i:1;s:14:"Boise ID 83704";s:7:"country";s:2:"US";}s:12:"organization";s:16:"MarkMonitor Inc.";}s:5:"admin";a:5:{s:5:"phone";s:13:"+1.8003377520";s:5:"email";s:24:"custserv@markmonitor.com";s:4:"name";s:16:"MarkMonitor Inc.";s:7:"address";a:3:{i:0;s:17:"391 N Ancestor Pl";i:1;s:14:"Boise ID 83704";s:7:"country";s:2:"US";}s:12:"organization";s:16:"MarkMonitor Inc.";}s:4:"tech";a:5:{s:5:"phone";s:13:"+1.8003377520";s:5:"email";s:24:"custserv@markmonitor.com";s:4:"name";s:16:"MarkMonitor Inc.";s:7:"address";a:3:{i:0;s:17:"391 N Ancestor Pl";i:1;s:14:"Boise ID 83704";s:7:"country";s:2:"US";}s:12:"organization";s:16:"MarkMonitor Inc.";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:16:"MARKMONITOR INC.";s:8:"referrer";s:26:"http://www.markmonitor.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:23:"domain =markmonitor.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:21:"whois.markmonitor.com";s:4:"args";s:15:"markmonitor.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"nic.sc";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:6:"handle";s:11:"D52708-LRCC";s:4:"name";s:6:"nic.sc";s:7:"created";s:10:"2001-12-01";s:7:"changed";s:10:"2011-12-01";s:7:"expires";s:10:"2012-12-01";s:7:"sponsor";s:22:"VCS Pty Ltd (R34-LRCC)";s:6:"status";a:2:{i:0;s:2:"OK";i:1;s:15:"AUTORENEWPERIOD";}s:7:"nserver";a:2:{s:18:"ns2.seychelles.net";s:12:"41.223.218.7";s:17:"ns.seychelles.net";s:12:"41.223.218.6";}}s:5:"owner";a:7:{s:6:"handle";s:16:"FR-1086c38c93e15";s:4:"name";s:13:"David Matombe";s:12:"organization";s:13:"VCS (Pty) Ltd";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:11:"PO Box 1000";i:1;s:11:"Le Chantier";}s:4:"city";s:8:"Victoria";s:5:"state";s:4:"Mahe";s:5:"pcode";s:3:"SEZ";s:7:"country";s:2:"SC";}s:5:"phone";s:11:"+248.676000";s:3:"fax";s:11:"+248.324056";s:5:"email";s:12:"admin@nic.sc";}s:5:"admin";a:7:{s:6:"handle";s:16:"FR-1086c38c93e15";s:4:"name";s:13:"David Matombe";s:12:"organization";s:13:"VCS (Pty) Ltd";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:11:"PO Box 1000";i:1;s:11:"Le Chantier";}s:4:"city";s:8:"Victoria";s:5:"state";s:4:"Mahe";s:5:"pcode";s:3:"SEZ";s:7:"country";s:2:"SC";}s:5:"phone";s:11:"+248.676000";s:3:"fax";s:11:"+248.324056";s:5:"email";s:12:"admin@nic.sc";}s:7:"billing";a:7:{s:6:"handle";s:16:"FR-1086c38c93e15";s:4:"name";s:13:"David Matombe";s:12:"organization";s:13:"VCS (Pty) Ltd";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:11:"PO Box 1000";i:1;s:11:"Le Chantier";}s:4:"city";s:8:"Victoria";s:5:"state";s:4:"Mahe";s:5:"pcode";s:3:"SEZ";s:7:"country";s:2:"SC";}s:5:"phone";s:11:"+248.676000";s:3:"fax";s:11:"+248.324056";s:5:"email";s:12:"admin@nic.sc";}s:4:"tech";a:7:{s:6:"handle";s:16:"FR-1086c38c93e15";s:4:"name";s:13:"David Matombe";s:12:"organization";s:13:"VCS (Pty) Ltd";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:11:"PO Box 1000";i:1;s:11:"Le Chantier";}s:4:"city";s:8:"Victoria";s:5:"state";s:4:"Mahe";s:5:"pcode";s:3:"SEZ";s:7:"country";s:2:"SC";}s:5:"phone";s:11:"+248.676000";s:3:"fax";s:11:"+248.324056";s:5:"email";s:12:"admin@nic.sc";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:17:"http://www.nic.sc";s:9:"registrar";s:17:"VCS (Pty) Limited";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:22:"whois2.afilias-grs.net";s:4:"args";s:6:"nic.sc";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:14:"fastdomain.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:8:{s:4:"name";s:14:"fastdomain.com";s:7:"nserver";a:2:{s:18:"ns1.fastdomain.com";s:14:"74.220.195.221";s:18:"ns2.fastdomain.com";s:10:"69.89.22.4";}s:6:"status";s:6:"Locked";s:7:"changed";s:10:"2010-12-09";s:7:"created";s:10:"2002-11-07";s:7:"expires";s:10:"2016-11-07";s:7:"sponsor";s:15:"FastDomain Inc.";s:8:"referrer";s:26:"http://www.fastdomain.com/";}s:5:"owner";a:6:{s:5:"phone";s:13:"+1.8014948462";s:3:"fax";s:13:"+1.8017651992";s:5:"email";s:20:"whois@fastdomain.com";s:7:"changed";s:10:"2012-03-20";s:4:"name";s:14:"fastdomain.com";s:7:"address";a:4:{i:0;s:14:"FastDomain Inc";i:1;s:19:"1958 South 950 East";i:2;s:17:"Provo, Utah 84606";i:3;s:13:"United States";}}s:5:"admin";a:6:{s:5:"phone";s:13:"+1.8014948462";s:3:"fax";s:13:"+1.8017651992";s:5:"email";s:20:"whois@fastdomain.com";s:7:"changed";s:10:"2012-03-20";s:4:"name";s:14:"fastdomain.com";s:7:"address";a:4:{i:0;s:14:"FastDomain Inc";i:1;s:19:"1958 South 950 East";i:2;s:17:"Provo, Utah 84606";i:3;s:13:"United States";}}s:4:"tech";a:6:{s:5:"phone";s:13:"+1.8014948462";s:3:"fax";s:13:"+1.8017651992";s:5:"email";s:20:"whois@fastdomain.com";s:7:"changed";s:10:"2012-03-20";s:4:"name";s:14:"fastdomain.com";s:7:"address";a:4:{i:0;s:14:"FastDomain Inc";i:1;s:19:"1958 South 950 East";i:2;s:17:"Provo, Utah 84606";i:3;s:13:"United States";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:16:"FASTDOMAIN, INC.";s:8:"referrer";s:25:"http://www.fastdomain.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:22:"domain =fastdomain.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:20:"whois.fastdomain.com";s:4:"args";s:14:"fastdomain.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:14:"names4ever.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:14:"names4ever.com";s:7:"nserver";a:2:{s:12:"ns1.abac.com";s:12:"64.29.144.70";s:12:"ns2.abac.com";s:12:"64.29.154.70";}s:6:"status";a:2:{i:0;s:24:"clientTransferProhibited";i:1;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2011-10-11";s:7:"created";s:10:"1999-07-15";s:7:"expires";s:10:"2012-07-15";}s:5:"owner";a:4:{s:5:"phone";s:13:"+1.8003229438";s:5:"email";s:22:"corp-domains@aplus.net";s:4:"name";s:13:"Aplus-net Inc";s:7:"address";a:4:{i:0;s:10:"Sarah Wyld";i:1;s:21:"110 East Broward Blvd";i:2;s:25:"Fort Lauderdale, FL 33301";i:3;s:2:"US";}}s:5:"admin";a:4:{s:5:"phone";s:13:"+1.8003229438";s:5:"email";s:22:"corp-domains@aplus.net";s:4:"name";s:13:"Aplus-net Inc";s:7:"address";a:4:{i:0;s:10:"Sarah Wyld";i:1;s:21:"110 East Broward Blvd";i:2;s:25:"Fort Lauderdale, FL 33301";i:3;s:2:"US";}}s:4:"tech";a:4:{s:5:"phone";s:13:"+1.8003229438";s:5:"email";s:22:"corp-domains@aplus.net";s:4:"name";s:13:"Aplus-net Inc";s:7:"address";a:6:{i:0;s:10:"Sarah Wyld";i:1;s:21:"110 East Broward Blvd";i:2;s:25:"Fort Lauderdale, FL 33301";i:3;s:2:"US";i:4;s:20:"Registrar of Record:";i:5;s:48:"Hostopia.com Inc. d/b/a Aplus.net, www.aplus.net";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:33:"HOSTOPIA.COM INC. D/B/A APLUS.NET";s:8:"referrer";s:20:"http://www.aplus.net";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:22:"domain =names4ever.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:20:"whois.names4ever.com";s:4:"args";s:14:"names4ever.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:14:"151.99.187.181";a:2:{s:8:"regrinfo";a:5:{s:10:"registered";s:3:"yes";s:5:"admin";a:6:{s:4:"name";s:12:"PIERO TOLLIS";s:7:"address";a:4:{i:0;s:26:"ERICSSON TELECOMUNICAZIONI";i:1;s:16:"VIA ANAGNINA 203";i:2;s:10:"00100 ROMA";i:3;s:5:"Italy";}s:5:"phone";s:13:"+39 335330499";s:3:"fax";s:3:"+39";s:6:"handle";s:11:"PT3110-RIPE";s:6:"source";s:15:"RIPE # Filtered";}s:4:"tech";a:6:{s:4:"name";s:12:"PIERO TOLLIS";s:7:"address";a:4:{i:0;s:26:"ERICSSON TELECOMUNICAZIONI";i:1;s:16:"VIA ANAGNINA 203";i:2;s:10:"00100 ROMA";i:3;s:5:"Italy";}s:5:"phone";s:13:"+39 335330499";s:3:"fax";s:3:"+39";s:6:"handle";s:11:"PT3110-RIPE";s:6:"source";s:15:"RIPE # Filtered";}s:7:"network";a:6:{s:7:"inetnum";s:31:"151.99.187.176 - 151.99.187.191";s:4:"name";s:25:"ERICSSONTELECOMUNICAZIONI";s:7:"country";s:2:"IT";s:6:"status";s:11:"ASSIGNED PA";s:6:"mnt-by";s:10:"INTERB-MNT";s:6:"source";s:15:"RIPE # Filtered";}s:5:"owner";a:1:{s:12:"organization";s:26:"ERICSSON TELECOMUNICAZIONI";}}s:8:"regyinfo";a:3:{s:9:"registrar";s:32:"RIPE Network Coordination Centre";s:4:"type";s:2:"ip";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:14:"whois.arin.net";s:4:"args";s:16:"n 151.99.187.181";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:14:"whois.ripe.net";s:4:"args";s:14:"151.99.187.181";s:4:"port";s:2:"43";}}}}s:6:"AS9700";a:2:{s:8:"regrinfo";a:6:{s:10:"registered";s:3:"yes";s:5:"admin";a:9:{s:4:"name";s:13:"Network Admin";s:7:"address";s:44:"78?? IT???? ?? 5?, Garakbon-dong , Songpa-gu";s:7:"country";s:2:"KR";s:5:"phone";s:15:"+82-2-2186-4555";s:5:"email";s:21:"hostmaster@nida.or.kr";s:6:"handle";s:8:"NA145-KR";s:6:"mnt-by";s:12:"MNT-KRNIC-AP";s:7:"changed";s:20:"hostmaster@nic.or.kr";s:6:"source";s:5:"KRNIC";}s:4:"tech";a:9:{s:4:"name";s:13:"Network Admin";s:7:"address";s:44:"78?? IT???? ?? 5?, Garakbon-dong , Songpa-gu";s:7:"country";s:2:"KR";s:5:"phone";s:15:"+82-2-2186-4555";s:5:"email";s:21:"hostmaster@nida.or.kr";s:6:"handle";s:8:"NA145-KR";s:6:"mnt-by";s:12:"MNT-KRNIC-AP";s:7:"changed";s:20:"hostmaster@nic.or.kr";s:6:"source";s:5:"KRNIC";}s:5:"owner";a:1:{s:12:"organization";s:30:"Korea Internet Security Agency";}s:2:"AS";a:9:{s:6:"handle";s:6:"AS9700";s:7:"as-name";s:13:"NIDA-AS-KR-KR";s:7:"country";s:2:"KR";s:6:"import";a:2:{i:0;s:37:"from AS4766 action pref=10 accept any";i:1;s:37:"from AS3786 action pref=10 accept any";}s:6:"export";a:2:{i:0;s:25:"to AS4766 announce AS9700";i:1;s:25:"to AS3786 announce AS9700";}s:6:"mnt-by";s:12:"MNT-KRNIC-AP";s:7:"mnt-irt";s:12:"IRT-KRNIC-KR";s:7:"changed";s:20:"hostmaster@nic.or.kr";s:6:"source";s:5:"KRNIC";}s:6:"domain";a:1:{s:4:"name";s:6:"AS9700";}}s:8:"regyinfo";a:3:{s:9:"registrar";s:39:"Asia Pacific Network Information Centre";s:4:"type";s:2:"ip";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:14:"whois.arin.net";s:4:"args";s:6:"a 9700";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:15:"whois.apnic.net";s:4:"args";s:6:"AS9700";s:4:"port";i:43;}}}}s:11:"encirca.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:11:"encirca.com";s:7:"nserver";a:2:{s:15:"ns1.encirca.net";s:14:"216.98.139.169";s:15:"ns2.encirca.net";s:11:"72.9.101.84";}s:6:"status";a:3:{i:0;s:6:"(None)";i:1;s:24:"clientTransferProhibited";i:2;s:22:"clientUpdateProhibited";}s:7:"changed";s:10:"2012-03-23";s:7:"created";s:10:"1999-03-22";s:7:"expires";s:10:"2013-03-22";}s:5:"owner";a:3:{s:4:"name";s:7:"EnCirca";s:12:"organization";s:12:"EnCirca Inc.";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:20:"400 W. Cummings Park";i:1;s:14:"Suite 1725-307";}s:4:"city";s:6:"Woburn";s:5:"state";s:2:"MA";s:5:"pcode";s:5:"01801";s:7:"country";s:13:"United States";}}s:5:"admin";a:5:{s:4:"name";s:7:"EnCirca";s:12:"organization";s:12:"EnCirca Inc.";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:20:"400 W. Cummings Park";i:1;s:14:"Suite 1725-307";}s:4:"city";s:6:"Woburn";s:5:"state";s:2:"MA";s:5:"pcode";s:5:"01801";s:7:"country";s:13:"United States";}s:3:"fax";s:13:"+1.7818238911";s:5:"email";s:24:"whois-082807@encirca.com";}s:4:"tech";a:6:{s:4:"name";s:7:"EnCirca";s:12:"organization";s:12:"EnCirca Inc.";s:7:"address";a:5:{s:6:"street";a:2:{i:0;s:20:"400 W. Cummings Park";i:1;s:14:"Suite 1725-307";}s:4:"city";s:6:"Woburn";s:5:"state";s:2:"MA";s:5:"pcode";s:5:"01801";s:7:"country";s:13:"United States";}s:5:"phone";s:13:"+1.7819429975";s:3:"fax";s:13:"+1.7818238911";s:5:"email";s:24:"whois-082807@encirca.com";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:12:"ENCIRCA, INC";s:8:"referrer";s:22:"http://www.encirca.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:19:"domain =encirca.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:17:"whois.encirca.com";s:4:"args";s:11:"encirca.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"nic.co";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:8:{s:4:"name";s:6:"nic.co";s:6:"handle";s:10:"D734276-CO";s:7:"sponsor";s:41:"RESTRICTED AND RESERVED NAMES .COINTERNET";s:6:"status";a:2:{i:0;s:24:"serverTransferProhibited";i:1;s:8:"inactive";}s:7:"created";s:10:"2010-04-23";s:7:"expires";s:10:"2015-04-22";s:7:"changed";s:10:"2010-07-06";s:7:"nserver";a:2:{s:17:"ns2.theplanet.com";s:15:"207.218.223.162";s:17:"ns1.theplanet.com";s:15:"207.218.247.135";}}s:5:"owner";a:6:{s:6:"handle";s:13:"RESERVEDNAME4";s:4:"name";s:46:"Restricted and Reserved Names .CO Internet SAS";s:12:"organization";s:19:".CO Internet S.A.S.";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:36:"Calle 100# 8a-49 Torre B Oficina 507";}s:4:"city";s:6:"Bogota";s:5:"pcode";s:4:"0000";s:7:"country";s:8:"Colombia";}s:5:"phone";s:12:"+571.6169916";s:5:"email";s:25:"soporte@cointernet.com.co";}s:5:"admin";a:6:{s:6:"handle";s:13:"RESERVEDNAME4";s:4:"name";s:46:"Restricted and Reserved Names .CO Internet SAS";s:12:"organization";s:19:".CO Internet S.A.S.";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:36:"Calle 100# 8a-49 Torre B Oficina 507";}s:4:"city";s:6:"Bogota";s:5:"pcode";s:4:"0000";s:7:"country";s:8:"Colombia";}s:5:"phone";s:12:"+571.6169916";s:5:"email";s:25:"soporte@cointernet.com.co";}s:7:"billing";a:6:{s:6:"handle";s:13:"RESERVEDNAME4";s:4:"name";s:46:"Restricted and Reserved Names .CO Internet SAS";s:12:"organization";s:19:".CO Internet S.A.S.";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:36:"Calle 100# 8a-49 Torre B Oficina 507";}s:4:"city";s:6:"Bogota";s:5:"pcode";s:4:"0000";s:7:"country";s:8:"Colombia";}s:5:"phone";s:12:"+571.6169916";s:5:"email";s:25:"soporte@cointernet.com.co";}s:4:"tech";a:6:{s:6:"handle";s:13:"RESERVEDNAME4";s:4:"name";s:46:"Restricted and Reserved Names .CO Internet SAS";s:12:"organization";s:19:".CO Internet S.A.S.";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:36:"Calle 100# 8a-49 Torre B Oficina 507";}s:4:"city";s:6:"Bogota";s:5:"pcode";s:4:"0000";s:7:"country";s:8:"Colombia";}s:5:"phone";s:12:"+571.6169916";s:5:"email";s:25:"soporte@cointernet.com.co";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:29:"http://www.cointernet.com.co/";s:9:"registrar";s:20:".CO Internet, S.A.S.";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"co.whois-servers.net";s:4:"args";s:6:"nic.co";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:12:"google.co.jp";a:2:{s:8:"regrinfo";a:5:{s:5:"owner";a:1:{s:12:"organization";s:12:"Google Japan";}s:5:"admin";a:5:{s:6:"handle";s:7:"DL152JP";s:4:"name";s:9:"Ly, Diana";s:5:"email";s:20:"dns-admin@google.com";s:12:"organization";s:12:"Google Japan";s:7:"changed";s:10:"2006-05-16";}s:4:"tech";a:7:{s:6:"handle";s:7:"TW184JP";s:4:"name";s:12:"Warita, Taro";s:5:"email";s:13:"warita@gmo.jp";s:12:"organization";s:16:"GMO Internet,Inc";s:5:"phone";s:12:"03-5456-2555";s:3:"fax";s:12:"03-5456-2687";s:7:"changed";s:10:"2007-05-28";}s:6:"domain";a:5:{s:7:"nserver";a:4:{s:14:"ns1.google.com";s:13:"216.239.32.10";s:14:"ns2.google.com";s:13:"216.239.34.10";s:14:"ns3.google.com";s:13:"216.239.36.10";s:14:"ns4.google.com";s:13:"216.239.38.10";}s:6:"status";s:22:"Connected (2013/03/31)";s:7:"created";s:10:"2001-03-22";s:7:"changed";s:10:"2012-04-01";s:4:"name";s:12:"google.co.jp";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:18:"http://www.jprs.jp";s:9:"registrar";s:23:"Japan Registry Services";s:7:"servers";a:3:{i:0;a:3:{s:6:"server";s:20:"jp.whois-servers.net";s:4:"args";s:18:"DOM google.co.jp/e";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:20:"jp.whois-servers.net";s:4:"args";s:17:"CONTACT DL152JP/e";s:4:"port";i:43;}i:2;a:3:{s:6:"server";s:20:"jp.whois-servers.net";s:4:"args";s:17:"CONTACT TW184JP/e";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:7:"jprs.jp";a:2:{s:8:"regrinfo";a:3:{s:6:"domain";a:6:{s:7:"nserver";a:3:{s:11:"ns1.jprs.jp";s:12:"202.11.16.49";s:11:"ns2.jprs.jp";s:12:"202.11.16.59";s:11:"ns3.jprs.jp";s:13:"61.200.83.204";}s:7:"created";s:10:"2001-02-02";s:7:"expires";s:10:"2013-02-28";s:6:"status";s:6:"Active";s:7:"changed";s:10:"2012-03-01";s:4:"name";s:7:"jprs.jp";}s:5:"owner";a:5:{s:4:"name";s:32:"Japan Registry Services Co.,Ltd.";s:5:"email";s:20:"dom-admin@jprs.co.jp";s:7:"address";a:2:{s:5:"pcode";s:8:"101-0065";s:6:"street";s:29:"Chiyoda First Bldg. East 13F,";}s:5:"phone";s:12:"03-5215-8451";s:3:"fax";s:12:"03-5215-8452";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:18:"http://www.jprs.jp";s:9:"registrar";s:23:"Japan Registry Services";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"jp.whois-servers.net";s:4:"args";s:13:"DOM jprs.jp/e";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:35:"2001:630:d0:f111:203:93ff:fed1:f454";a:2:{s:8:"regrinfo";a:5:{s:10:"registered";s:3:"yes";s:5:"admin";a:8:{s:4:"name";s:9:"Tim CHOWN";s:7:"address";a:7:{i:0;s:26:"Systems and Networks Group";i:1;s:46:"Department of Electronics and Computer Science";i:2;s:25:"University of Southampton";i:3;s:9:"Highfield";i:4;s:11:"Southampton";i:5;s:8:"SO17 1BJ";i:6;s:14:"United Kingdom";}s:5:"phone";s:19:"+44 (0)23 8059 3257";s:3:"fax";s:19:"+44 (0)23 8059 2865";s:5:"email";s:19:"tjc@ecs.soton.ac.uk";s:6:"handle";s:6:"TC2411";s:7:"remarks";s:56:"6Bone participation available from 6BONE db as TC1-6BONE";s:6:"source";s:15:"RIPE # Filtered";}s:4:"tech";a:8:{s:4:"name";s:9:"Tim CHOWN";s:7:"address";a:7:{i:0;s:26:"Systems and Networks Group";i:1;s:46:"Department of Electronics and Computer Science";i:2;s:25:"University of Southampton";i:3;s:9:"Highfield";i:4;s:11:"Southampton";i:5;s:8:"SO17 1BJ";i:6;s:14:"United Kingdom";}s:5:"phone";s:19:"+44 (0)23 8059 3257";s:3:"fax";s:19:"+44 (0)23 8059 2865";s:5:"email";s:19:"tjc@ecs.soton.ac.uk";s:6:"handle";s:6:"TC2411";s:7:"remarks";s:56:"6Bone participation available from 6BONE db as TC1-6BONE";s:6:"source";s:15:"RIPE # Filtered";}s:7:"network";a:6:{s:8:"inet6num";s:19:"2001:0630:00d0::/48";s:4:"name";s:9:"SOTON-ECS";s:7:"country";s:2:"GB";s:6:"status";s:8:"ASSIGNED";s:6:"mnt-by";s:16:"JANET-HOSTMASTER";s:6:"source";s:15:"RIPE # Filtered";}s:5:"owner";a:1:{s:12:"organization";a:2:{i:0;s:32:"Electronics and Computer Science";i:1;s:24:"Univerity of Southampton";}}}s:8:"regyinfo";a:3:{s:4:"type";s:2:"ip";s:9:"registrar";s:32:"RIPE Network Coordination Centre";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:14:"whois.ripe.net";s:4:"args";s:35:"2001:630:d0:f111:203:93ff:fed1:f454";s:4:"port";i:43;}}}}s:9:"gandi.net";a:2:{s:8:"regrinfo";a:6:{s:6:"domain";a:6:{s:4:"name";s:9:"gandi.net";s:7:"nserver";a:4:{s:14:"dns0.gandi.net";s:13:"217.70.177.39";s:14:"dns1.gandi.net";s:13:"217.70.177.45";s:14:"dns2.gandi.net";s:14:"217.70.183.211";s:14:"dns3.gandi.net";s:13:"217.70.179.36";}s:6:"status";a:1:{i:0;s:24:"clientTransferProhibited";}s:7:"changed";s:10:"2011-06-17";s:7:"created";s:10:"1999-05-21";s:7:"expires";s:10:"2020-05-21";}s:5:"owner";a:8:{s:6:"handle";s:12:"GS1833-GANDI";s:12:"organization";s:9:"Gandi SAS";s:4:"name";s:14:"Stephan Ramoin";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:23:"63-65 Boulevard Massena";}s:5:"pcode";s:5:"75013";s:4:"city";s:5:"Paris";s:7:"country";s:6:"France";}s:5:"phone";s:13:"+33.143737851";s:3:"fax";s:13:"+33.143731851";s:5:"email";s:57:"61ebd5b3df9f45f2b3f67f6dd01e1049-523678@contact.gandi.net";s:7:"changed";s:10:"2011-12-30";}s:5:"admin";a:8:{s:6:"handle";s:11:"NG270-GANDI";s:12:"organization";s:9:"GANDI SAS";s:4:"name";s:9:"NOC GANDI";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:23:"63-65 Boulevard MASSENA";}s:5:"pcode";s:5:"75013";s:4:"city";s:5:"Paris";s:7:"country";s:6:"France";}s:5:"phone";s:13:"+33.143737851";s:3:"fax";s:13:"+33.143731851";s:5:"email";s:57:"f71ac2fac056a82ff2ce96f1978a5b44-248842@contact.gandi.net";s:7:"changed";s:10:"2012-03-19";}s:4:"tech";a:8:{s:6:"handle";s:11:"NG270-GANDI";s:12:"organization";s:9:"GANDI SAS";s:4:"name";s:9:"NOC GANDI";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:23:"63-65 Boulevard MASSENA";}s:5:"pcode";s:5:"75013";s:4:"city";s:5:"Paris";s:7:"country";s:6:"France";}s:5:"phone";s:13:"+33.143737851";s:3:"fax";s:13:"+33.143731851";s:5:"email";s:57:"f71ac2fac056a82ff2ce96f1978a5b44-248842@contact.gandi.net";s:7:"changed";s:10:"2012-03-19";}s:7:"billing";a:8:{s:6:"handle";s:11:"NG270-GANDI";s:12:"organization";s:9:"GANDI SAS";s:4:"name";s:9:"NOC GANDI";s:7:"address";a:4:{s:6:"street";a:1:{i:0;s:23:"63-65 Boulevard MASSENA";}s:5:"pcode";s:5:"75013";s:4:"city";s:5:"Paris";s:7:"country";s:6:"France";}s:5:"phone";s:13:"+33.143737851";s:3:"fax";s:13:"+33.143731851";s:5:"email";s:57:"f71ac2fac056a82ff2ce96f1978a5b44-248842@contact.gandi.net";s:7:"changed";s:10:"2012-03-19";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:9:"GANDI SAS";s:8:"referrer";s:20:"http://www.gandi.net";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"net.whois-servers.net";s:4:"args";s:17:"domain =gandi.net";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:15:"whois.gandi.net";s:4:"args";s:9:"gandi.net";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:13:"cscglobal.com";a:2:{s:8:"regrinfo";a:4:{s:6:"domain";a:7:{s:4:"name";s:13:"cscglobal.com";s:7:"nserver";a:4:{s:16:"lns1.cscinfo.com";s:13:"165.160.12.20";s:16:"lns2.cscinfo.com";s:13:"165.160.14.20";s:16:"pdns1.cscdns.net";s:14:"199.254.56.246";s:16:"pdns2.cscdns.net";s:14:"199.254.53.246";}s:6:"status";a:5:{i:0;s:22:"clientDeleteProhibited";i:1;s:24:"clientTransferProhibited";i:2;s:22:"serverDeleteProhibited";i:3;s:24:"serverTransferProhibited";i:4;s:22:"serverUpdateProhibited";}s:7:"changed";s:10:"2012-03-31";s:7:"created";s:10:"2005-04-03";s:7:"expires";s:10:"2013-04-03";s:7:"sponsor";s:23:"CORPORATE DOMAINS, INC.";}s:5:"owner";a:3:{s:5:"email";s:28:"admin@internationaladmin.com";s:4:"name";s:27:"Corporation Service Company";s:7:"address";a:4:{i:0;s:14:"Domain Manager";i:1;s:31:"2711 Centerville Road Suite 400";i:2;s:20:"Wilmington, DE 19808";i:3;s:2:"US";}}s:4:"tech";a:4:{s:5:"phone";s:13:"+1.8882506159";s:5:"email";s:28:"admin@internationaladmin.com";s:4:"name";s:27:"Corporation Service Company";s:7:"address";a:4:{i:0;s:14:"Domain Manager";i:1;s:31:"2711 Centerville Road Suite 400";i:2;s:20:"Wilmington, DE 19808";i:3;s:2:"US";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:27:"CSC CORPORATE DOMAINS, INC.";s:8:"referrer";s:24:"http://www.cscglobal.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:21:"domain =cscglobal.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:26:"whois.corporatedomains.com";s:4:"args";s:13:"cscglobal.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:7:"isoc.am";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:5:{s:4:"name";s:7:"isoc.am";s:6:"status";s:6:"active";s:7:"nserver";a:2:{s:11:"ns3.host.am";s:14:"195.250.76.197";s:11:"ns4.host.am";s:13:"195.250.77.66";}s:7:"created";s:10:"2000-01-01";s:7:"changed";s:10:"2011-12-21";}s:5:"owner";a:2:{s:4:"name";s:7:"ISOC.AM";s:7:"address";a:3:{i:0;s:15:"N.Duman 62/1 N1";i:1;s:14:"Yerevan, 0028";i:2;s:2:"AM";}}s:5:"admin";a:4:{s:5:"email";s:20:"imkrtumyan@amnic.net";s:5:"phone";s:14:"+374-91-415539";s:4:"name";s:15:"Igor Mkrtoumyan";s:7:"address";a:4:{i:0;s:7:"ISOC AM";i:1;s:15:"N.Duman 62/1 N1";i:2;s:13:"Yerevan, 0028";i:3;s:2:"AM";}}s:4:"tech";a:4:{s:5:"email";s:11:"ran@psg.com";s:5:"phone";s:14:"+374-91-420214";s:4:"name";s:16:"Hrant Dadivanyan";s:7:"address";a:4:{i:0;s:7:"ISOC AM";i:1;s:15:"N.Duman 62/1 N1";i:2;s:13:"Yerevan, 0028";i:3;s:2:"AM";}}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:18:"http://www.isoc.am";s:9:"registrar";s:6:"ISOCAM";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"am.whois-servers.net";s:4:"args";s:7:"isoc.am";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:6:"nic.bh";a:2:{s:8:"regyinfo";a:1:{s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:12:"whois.nic.bh";s:4:"args";s:6:"nic.bh";s:4:"port";i:43;}}}s:8:"regrinfo";a:1:{s:6:"domain";a:1:{s:7:"nserver";a:2:{s:11:"ns2.at43.at";s:14:"78.104.145.251";s:11:"dns1.nic.at";s:12:"83.136.32.27";}}}}s:11:"tapuz.co.il";a:2:{s:8:"regrinfo";a:5:{s:10:"registered";s:3:"yes";s:5:"admin";a:6:{s:4:"name";s:13:"Sergey Rishal";s:7:"address";a:5:{i:0;s:16:"Tapuz People Ltd";i:1;s:17:"30 Ben Gurion St.";i:2;s:9:"Ramat Gan";i:3;s:5:"52573";i:4;s:6:"Israel";}s:5:"phone";s:14:"+972 3 6109600";s:5:"email";s:17:"sr AT tapuz.co.il";s:6:"handle";s:12:"DT-SR7196-IL";s:7:"changed";s:14:"20111220-00-00";}s:4:"tech";a:6:{s:4:"name";s:13:"Sergey Rishal";s:7:"address";a:5:{i:0;s:16:"Tapuz People Ltd";i:1;s:12:"30Ben Gurion";i:2;s:12:"Ramat Gan IL";i:3;s:5:"52573";i:4;s:6:"Israel";}s:5:"phone";s:14:"+972 3 6109600";s:5:"email";s:17:"sr AT tapuz.co.il";s:6:"handle";s:12:"DT-SR7197-IL";s:7:"changed";s:14:"20111220-00-00";}s:4:"zone";a:6:{s:4:"name";s:13:"Sergey Rishal";s:7:"address";a:5:{i:0;s:16:"Tapuz People Ltd";i:1;s:12:"30Ben Gurion";i:2;s:12:"Ramat Gan IL";i:3;s:5:"52573";i:4;s:6:"Israel";}s:5:"phone";s:14:"+972 3 6109608";s:5:"email";s:17:"sr AT tapuz.co.il";s:6:"handle";s:12:"DT-SR6267-IL";s:7:"changed";s:14:"20070930-00-00";}s:6:"domain";a:11:{s:5:"query";s:11:"tapuz.co.il";s:8:"reg-name";s:5:"tapuz";s:6:"domain";s:11:"tapuz.co.il";s:5:"descr";a:5:{i:0;s:21:"Suny Electronics Ltd.";i:1;s:17:"30 Ben Gurion St.";i:2;s:9:"Ramat Gan";i:3;s:5:"52000";i:4;s:6:"Israel";}s:5:"phone";s:14:"+972 3 6109620";s:5:"email";s:21:"eilong AT sunycom.com";s:7:"nserver";a:2:{s:15:"ns.barak.net.il";s:14:"212.150.48.169";s:16:"ns1.barak.net.il";s:13:"206.49.94.234";}s:8:"validity";s:10:"14-01-2013";s:6:"status";s:15:"Transfer Locked";s:7:"changed";s:10:"2000-00-00";s:4:"name";s:11:"tapuz.co.il";}}s:8:"regyinfo";a:4:{s:8:"referrer";s:23:"http://www.isoc.org.il/";s:9:"registrar";s:7:"ISOC-IL";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:20:"il.whois-servers.net";s:4:"args";s:11:"tapuz.co.il";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:19:"xn--c1ad6a.xn--p1ai";a:2:{s:8:"regrinfo";a:3:{s:6:"domain";a:6:{s:4:"name";s:19:"xn--c1ad6a.xn--p1ai";s:7:"nserver";a:2:{s:10:"ns1.reg.ru";s:13:"213.183.59.77";s:10:"ns2.reg.ru";s:15:"178.218.208.130";}s:6:"status";s:31:"REGISTERED, DELEGATED, VERIFIED";s:7:"created";s:10:"2009-12-11";s:7:"expires";s:10:"2012-12-11";s:6:"source";s:3:"TCI";}s:5:"owner";a:1:{s:12:"organization";s:28:"Domain name registrar REG.RU";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:19:"http://www.ripn.net";s:9:"registrar";s:18:"RU-CENTER-REG-RIPN";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:26:"xn--p1ai.whois-servers.net";s:4:"args";s:19:"xn--c1ad6a.xn--p1ai";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:15:"domaintools.com";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:6:{s:4:"name";s:15:"domaintools.com";s:6:"status";s:6:"Active";s:7:"changed";s:10:"2010-08-31";s:7:"created";s:10:"2002-07-13";s:7:"expires";s:10:"2016-07-13";s:7:"nserver";a:4:{s:18:"ns3.p09.dynect.net";s:11:"208.78.71.9";s:18:"ns4.p09.dynect.net";s:12:"204.13.251.9";s:18:"ns1.p09.dynect.net";s:11:"208.78.70.9";s:18:"ns2.p09.dynect.net";s:12:"204.13.250.9";}}s:5:"owner";a:6:{s:5:"email";s:30:"memberservices@domaintools.com";s:4:"name";s:20:"Domain Administrator";s:5:"phone";s:13:"+1.2068389035";s:3:"fax";s:13:"+1.2068389056";s:7:"address";a:4:{i:0;s:15:"2211 5th Avenue";i:1;s:9:"Suite 201";i:2;s:17:"Seattle, WA 98121";s:7:"country";s:2:"US";}s:12:"organization";s:16:"DomainTools, LLC";}s:5:"admin";a:6:{s:5:"email";s:30:"memberservices@domaintools.com";s:4:"name";s:20:"Domain Administrator";s:5:"phone";s:13:"+1.2068389035";s:3:"fax";s:13:"+1.2068389056";s:7:"address";a:4:{i:0;s:15:"2211 5th Avenue";i:1;s:9:"Suite 201";i:2;s:17:"Seattle, WA 98121";s:7:"country";s:2:"US";}s:12:"organization";s:16:"DomainTools, LLC";}s:4:"tech";a:6:{s:5:"email";s:30:"memberservices@domaintools.com";s:4:"name";s:20:"Domain Administrator";s:5:"phone";s:13:"+1.2068389035";s:3:"fax";s:13:"+1.2068389056";s:7:"address";a:4:{i:0;s:15:"2211 5th Avenue";i:1;s:9:"Suite 201";i:2;s:17:"Seattle, WA 98121";s:7:"country";s:2:"US";}s:12:"organization";s:16:"DomainTools, LLC";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:9:"registrar";s:19:"CHEAP-REGISTRAR.COM";s:8:"referrer";s:31:"http://www.nameintelligence.com";s:7:"servers";a:2:{i:0;a:3:{s:6:"server";s:21:"com.whois-servers.net";s:4:"args";s:23:"domain =domaintools.com";s:4:"port";i:43;}i:1;a:3:{s:6:"server";s:19:"whois.nameintel.com";s:4:"args";s:15:"domaintools.com";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}s:7:"nic.xxx";a:2:{s:8:"regrinfo";a:5:{s:6:"domain";a:8:{s:6:"handle";s:11:"D131092-XXX";s:4:"name";s:7:"nic.xxx";s:7:"created";s:10:"2011-12-01";s:7:"changed";s:10:"2012-01-30";s:7:"expires";s:10:"2012-12-01";s:7:"sponsor";s:28:"ICM Registry LLC (R3189-XXX)";s:6:"status";a:1:{i:0;s:2:"OK";}s:7:"nserver";a:2:{s:19:"ns1.icmregistry.com";s:14:"204.107.85.250";s:19:"ns2.icmregistry.com";s:14:"68.178.119.250";}}s:5:"owner";a:7:{s:6:"handle";s:15:"ICMFCON00000001";s:4:"name";s:12:"ICM Registry";s:12:"organization";s:16:"ICM Registry LLC";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:12:"PO Box 30129";}s:4:"city";s:18:"Palm Beach Gardens";s:5:"state";s:2:"FL";s:5:"pcode";s:5:"33420";s:7:"country";s:2:"US";}s:5:"phone";s:13:"+1.8778093182";s:3:"fax";s:13:"+1.8778093183";s:5:"email";s:27:"domainadmin@icmregistry.com";}s:5:"admin";a:7:{s:6:"handle";s:15:"ICMFCON00000001";s:4:"name";s:12:"ICM Registry";s:12:"organization";s:16:"ICM Registry LLC";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:12:"PO Box 30129";}s:4:"city";s:18:"Palm Beach Gardens";s:5:"state";s:2:"FL";s:5:"pcode";s:5:"33420";s:7:"country";s:2:"US";}s:5:"phone";s:13:"+1.8778093182";s:3:"fax";s:13:"+1.8778093183";s:5:"email";s:27:"domainadmin@icmregistry.com";}s:4:"tech";a:7:{s:6:"handle";s:15:"ICMFCON00000001";s:4:"name";s:12:"ICM Registry";s:12:"organization";s:16:"ICM Registry LLC";s:7:"address";a:5:{s:6:"street";a:1:{i:0;s:12:"PO Box 30129";}s:4:"city";s:18:"Palm Beach Gardens";s:5:"state";s:2:"FL";s:5:"pcode";s:5:"33420";s:7:"country";s:2:"US";}s:5:"phone";s:13:"+1.8778093182";s:3:"fax";s:13:"+1.8778093183";s:5:"email";s:27:"domainadmin@icmregistry.com";}s:10:"registered";s:3:"yes";}s:8:"regyinfo";a:4:{s:8:"referrer";s:19:"http://www.pir.org/";s:9:"registrar";s:24:"Public Interest Registry";s:7:"servers";a:1:{i:0;a:3:{s:6:"server";s:21:"xxx.whois-servers.net";s:4:"args";s:7:"nic.xxx";s:4:"port";i:43;}}s:4:"type";s:6:"domain";}}}
\ No newline at end of file
diff --git a/update-fixtures.php b/update-fixtures.php
new file mode 100644
index 00000000..585e4ff6
--- /dev/null
+++ b/update-fixtures.php
@@ -0,0 +1,76 @@
+#!/usr/local/bin/php -n
+ $domains) {
+ $domainCount = count($domains);
+
+ echo "\n --- [ $key => $domainCount domains ] --- \n";
+
+ foreach( $domains as $index => $domain ){
+ try {
+ ++$index;
+ echo "[$index/$domainCount] Creating fixture for $domain \n";
+ $result = $whois->whois($domain);
+
+ $safeDomain = makePathSafe($domain);
+ file_put_contents("{$fixturePath}/{$safeDomain}.txt", $result);
+ }catch( Exception $exception ){
+ echo " Exception: {$exception->getMessage()}\n";
+ }catch( Error $error ){
+ echo " Err: {$error->getMessage()}\n";
+ }
+ }
+}
+
+function makePathSafe(string $filename): string
+{
+ return str_replace(":", '-', $filename);
+}
+
+// sha1("this-domain-is-not-registered");
\ No newline at end of file
|