false
false
0

Contract Address Details

0x453b3A7ca136b2a26Ef03B7420Aca00779988A99

Contract Name
AstralCards
Creator
0xebe894–7a24f6 at 0x66cf40–e70dfc
Balance
0 CLO
Tokens
Fetching tokens...
Transactions
16 Transactions
Transfers
0 Transfers
Gas Used
2,140,339
Last Balance Update
18597365
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
AstralCards




Optimization enabled
false
Compiler version
v0.8.16+commit.07a7930e




EVM Version
default




Verified at
2025-08-21T02:13:31.381945Z

Contract source code

// SPDX-License-Identifier: GPL-3.0-only
// Author: Upaut

pragma solidity ^0.8.16;

contract AstralCards {

    struct User{ // структура описывающая настройки пользователя
        uint8 avatar; // индекс аватара игрока
        string lang; // язык интерфейса игрока
        string name; // имя игрока
    }

    struct Room{ // структура описывающая игровую комнату
        uint256 bankRoom; // сумма всех взносов в комнату
        uint256 bet; // ставка внесенная каждым игроком (переплата одним из игроков вернется к нему обратно)
        uint256 fees; // комиссия (%) взымаемая с банка игровой комнаты
        uint256 status; // состояние комнаты. 0 - комната не активна, 1 - оплачено первым игроком, 2 - идет игра, 3 - можно принимать ставки на игроков
        address[] player1_users; // пользовательские адреса что ставят на игрока 1
        uint256[] player1_bets; // пользовательские ставки что ставят на игрока 1
        address[] player2_users; // пользовательские адреса что ставят на игрока 2
        uint256[] player2_bets; // пользовательские ставки что ставят на игрока 2
    }

    struct RoomList{ // элемент двухсвязного списка содержащего все активные комнаты
        uint256 room; // комната
        uint256 next; // следующая комната
        uint256 prev; // предыдущая комната
    }

    struct ActiveRoom{
        uint256 room; // комната
        uint256 bankRoom; // сумма всех взносов в комнату
        uint256 bet; // ставка внесенная каждым игроком
        uint256 status; // состояние комнаты
        address player1; // адрес игрока 1
        address player2; // адрес игрока 2
    }

    uint256 public gameRoom = 1; // номер последней созданной игровой комнаты
    uint256 public amountGames; // всегда показывает количество созданных игровых комнат
    uint256 public minGameBet = 10 * 1e18; // минимальная игровая ставка в нативной монете
    uint256 public gamerBetPool = 25 * 1e18; // (%) Процент, сколько от ставки игрока будет поставлено на его победу в пул ставок
    uint256 public maxUsersPerPlayer = 30; // максимальное количество пользователей, которые могут ставить на одного игрока
    uint256 public fees = 5 * 1e18; // комиссия (%) взымаемая с банка игровой комнаты
    address public owner = msg.sender; // владелец должен иметь возможность настраивать минимальный размер ставки
    address public oracle = msg.sender; // игровой сервер будет выступать оракулом
    address public commission = msg.sender; // адрес на который будет перечисляться комиссия для дальнейшего распределения

    mapping(address => User) private settings; // маппирование настроек пользователя
    mapping(uint256 => Room) private rooms; // маппирование игровой комнаты
    mapping(uint256 => RoomList) private roomList; // маппирование списка комнат

/*
    constructor(address _oracle) {
        oracle = _oracle;
    }
*/
    event UsedRoom(uint indexed room);


    modifier onlyOwner() {
        require(msg.sender == owner, "Only owner");
        _;
    }
    
    modifier onlyOracle() {
        require(msg.sender == oracle, "Only oracle");
        _;
    }



    receive() external payable {
        depositGame();
    }

    // Функция приема взноса игрока за участие
    function depositGame() public payable {
        require(msg.sender == tx.origin, "Only EOA"); // другие контракты не могут вызывать данную функцию
        require(msg.value >= minGameBet, "low bet"); // минимальный взнос за участие
        if(rooms[gameRoom].status == 0){ // комната создается игроком 1
            rooms[gameRoom].bet = msg.value;
            rooms[gameRoom].status = 1;
            rooms[gameRoom].player1_users.push(msg.sender);
            _addRoom(gameRoom); // добавляем комнату в список созданых комнат
            emit UsedRoom(gameRoom); // события использования комнаты
        }
        else{ // в созданную комнату вносится оплата игроком 2
            require(msg.sender != rooms[gameRoom].player1_users[0], "already added"); // одинаковый адрес не может быть противником
            if(msg.value > rooms[gameRoom].bet){ // если второй игрок заплатил больше первого, то вернем назад его переплату
                payable(msg.sender).transfer(msg.value - rooms[gameRoom].bet);
            } else if(msg.value < rooms[gameRoom].bet){ // если второй игрок заплатил меньше первого, то вернем назад переплату первому игроку
                payable(rooms[gameRoom].player1_users[0]).transfer(rooms[gameRoom].bet - msg.value);
                rooms[gameRoom].bet = msg.value;
            }
            rooms[gameRoom].bankRoom = rooms[gameRoom].bet * 2; // вносим точную сумму в банк комнаты
            // разбиваем ставки игроков на игровую ставку и пул ставок на игроков
            uint _pool_bet = rooms[gameRoom].bet * gamerBetPool / (100 * 1e18); // находим процент от ставки игрока, который должен уйти в пул ставок
            rooms[gameRoom].bet -= _pool_bet;

            
            rooms[gameRoom].player1_bets.push(_pool_bet);
            rooms[gameRoom].player2_users.push(msg.sender);
            rooms[gameRoom].player2_bets.push(_pool_bet);

            rooms[gameRoom].fees = fees;
            rooms[gameRoom].status = 3; // можно принимать ставки на игроков
            emit UsedRoom(gameRoom); // события использования комнаты
            gameRoom++; // создаем новую пустую комнату
        }
    }

    // отмена игрового взноса, доступно только если игрок внес оплату один
    function depositCancel() external {
        require(msg.sender == rooms[gameRoom].player1_users[0], "not your bet"); // ставку может вернуть только тот адрес что создал комнату
        require(rooms[gameRoom].status == 1); // статус комнаты должен быть 1, т.е. комната создана, но игрок 2 еще не внес оплату
        payable(msg.sender).transfer(rooms[gameRoom].bet);
        delete rooms[gameRoom];
        _delRoom(gameRoom); // Удаляем игровую комнату из списка созданных комнат
        emit UsedRoom(gameRoom); // события использования комнаты
    }

    // ставка на Игрока 1
    function betOnPlayer1(uint256 _room) public payable {
        require(msg.sender == tx.origin, "Only EOA"); // другие контракты не могут вызывать данную функцию
        require(msg.value >= minGameBet / 4, "low bet"); // минимальная ставка должна быть не меньше 1/4 от минимальной игровой ставки
        require(rooms[_room].status == 3, "bets are prohibited"); // статус комнаты должен быть 3, т.е. можно принимать ставки на игроков
        require(rooms[_room].player1_users.length <= maxUsersPerPlayer, "Many users with bets"); // количество ставящих пользователей не должно превышать максимум
        uint256 _index;
        bool _check;
        (_index, _check) = _getIndex(rooms[_room].player1_users);
        if(_check){ // если пользователь ранее делал ставки
            rooms[_room].player1_bets[_index] += msg.value;
        } else {
            rooms[_room].player1_users.push(msg.sender);
            rooms[_room].player1_bets.push(msg.value);
        }
        rooms[_room].bankRoom += msg.value; // добавляем ставку в банк комнаты
        emit UsedRoom(_room); // события использования комнаты
    }

    // ставка на Игрока 2
    function betOnPlayer2(uint256 _room) public payable {
        require(msg.sender == tx.origin, "Only EOA"); // другие контракты не могут вызывать данную функцию
        require(msg.value >= minGameBet / 4, "low bet"); // минимальная ставка должна быть не меньше 1/4 от минимальной игровой ставки
        require(rooms[_room].status == 3, "bets are prohibited"); // статус комнаты должен быть 3, т.е. можно принимать ставки на игроков
        require(rooms[_room].player2_users.length <= maxUsersPerPlayer, "Many users with bets"); // количество ставящих пользователей не должно превышать максимум
        uint256 _index;
        bool _check;
        (_index, _check) = _getIndex(rooms[_room].player2_users);
        if(_check){ // если пользователь ранее делал ставки
            rooms[_room].player2_bets[_index] += msg.value;
        } else {
            rooms[_room].player2_users.push(msg.sender);
            rooms[_room].player2_bets.push(msg.value);
        }
        rooms[_room].bankRoom += msg.value; // добавляем ставку в банк комнаты
        emit UsedRoom(_room); // события использования комнаты
    }

    // приватная фунция возвращает индекс в массиве ставящих пользователей по заданному адресу
    function _getIndex(address[] storage _arr) private view returns (uint256, bool) {
        for(uint256 i = 0; i < _arr.length; i++){
            if(msg.sender == _arr[i]){
                return (i, true);
            }
        }
        return (0, false);
    }


    // Завершить игру в комнате с определением победителя может только оракул
    function setWinner(uint256 _room, address _winner) external onlyOracle { 
        require((rooms[_room].player1_users[0] == _winner) || (rooms[_room].player2_users[0] == _winner)); // адрес победителя должен быть адресом одного из игроков комнаты
        uint256 _fee = rooms[_room].bankRoom * rooms[_room].fees / (100 * 1e18); // находим комиссию
        rooms[_room].bet *= 2; // находим выигрыш победителя за победу, пока без учета его ставки
        rooms[_room].bankRoom -= (_fee + rooms[_room].bet); // уменьшаем банк комнаты на комиссию + выигрыш победителя
        // весь оставшийся банк комнаты надо распределить по ставкам победителей
        if(rooms[_room].player1_users[0] == _winner){ // если победил игрок 1
            _winnerPay(rooms[_room].bankRoom, rooms[_room].bet, rooms[_room].player1_users, rooms[_room].player1_bets);
        }
        else{ // если победил игрок 2
            _winnerPay(rooms[_room].bankRoom, rooms[_room].bet, rooms[_room].player2_users, rooms[_room].player2_bets);
        }
        // Производим последнюю выплату - это игровая комиссия
        payable(commission).transfer(_fee); // выплачиваем комиссию
        // Уничтожаем игровую комнату
        _delRoom(_room); // Удаляем игровую комнату из списка созданных комнат
        delete rooms[_room];
        emit UsedRoom(_room); // события использования комнаты
    }

    // приватная фунция расчета и выплат всем победителям
    function _winnerPay(uint256 _bank, uint256 _amountWin, address[] storage _arrAddress, uint256[] storage _arrBet) private {
        uint _sum; // сумма всех ставок
        uint[] memory _arrPay = new uint[](_arrAddress.length); // выплаты которые должны получить пользователи
        for(uint256 i = 0; i < _arrAddress.length; i++){
            _sum += _arrBet[i];
        }
        for(uint256 i = 0; i < _arrAddress.length; i++){
            _arrPay[i] = _arrBet[i] * (100 * 1e18) / _sum; // находим процент от суммы ставок, который должен получить пользователь
            _arrPay[i] = _bank * _arrPay[i] / (100 * 1e18);
        }
        _arrPay[0] += _amountWin; // к ставки игрока добавляется его награда за победу в игре
        for(uint256 i = 0; i < _arrAddress.length; i++){ // производим выплаты
            payable(_arrAddress[i]).transfer(_arrPay[i]);
        }
    }

    // Принудительное закрытие комнаты с возвратом всех ставок игрокам, служит на тот случай если с игровым сервером что-то случится
    function closeRoom(uint256 _room) external onlyOwner { 
        require((rooms[_room].status == 3) || (rooms[_room].status == 2), "bad status"); // статус комнаты должен быть 3 или 2
        rooms[_room].player1_bets[0] += rooms[_room].bet; // к ставке игрока 1 добавляем его игровую ставку
        rooms[_room].player2_bets[0] += rooms[_room].bet; // к ставке игрока 2 добавляем его игровую ставку

        for(uint256 i = 0; i < rooms[_room].player1_users.length; i++){
            payable(rooms[_room].player1_users[i]).transfer(rooms[_room].player1_bets[i]); // выплачиваем все ставки на игрока 1
        }
        for(uint256 i = 0; i < rooms[_room].player2_users.length; i++){
            payable(rooms[_room].player2_users[i]).transfer(rooms[_room].player2_bets[i]); // выплачиваем все ставки на игрока 2
        }
        // Уничтожаем игровую комнату
        _delRoom(_room); // Удаляем игровую комнату из списка созданных комнат
        delete rooms[_room];
        emit UsedRoom(_room); // события использования комнаты
    }

    // сохранение настроек пользователя
    function saveSettings(uint8 _avatar, string memory _lang, string memory _name) external { 
        settings[msg.sender].avatar = _avatar;
        settings[msg.sender].lang = _lang;
        settings[msg.sender].name = _name;
    }

    // Изменение минимальной игровой ставки
    function setMinGameBet(uint256 _minGameBet) external onlyOwner {
        minGameBet = _minGameBet;
    }

    // Изменение процента, сколько от своей ставки игрок ставит на свою победу
    function setGamerBetPool(uint256 _gamerBetPool) external onlyOwner {
        gamerBetPool = _gamerBetPool;
    }

    // Изменение комиссионных сборов
    function setFees(uint256 _fees) external onlyOwner {
        fees = _fees;
    }

    // Изменение максимальное количество человек которые могут ставить на одного игрока
    function setMaxUsersPerPlayer(uint256 _maxUsersPerPlayer) external onlyOwner {
        maxUsersPerPlayer = _maxUsersPerPlayer;
    }

    // назначить нового оракула может только владелец
    function setNewOracle(address _newOracle) external onlyOwner { 
        oracle = _newOracle;
    }

    // назначить новый адрес для получения комиссий может только владелец
    function setNewCommission(address _commission) external onlyOwner { 
        commission = _commission;
    }

    // назначить новый статус комнаты может только оракул (статус 2 - идет игра, ставки запрещены; статус 3 - идет игра, ставки разрешены)
    function setRoomStatus(uint256 _room, uint256 _status) external onlyOracle { 
        require(_status == 2 || _status == 3); // статус комнаты может быть установлен только на 2 или 3
        require((rooms[_room].status == 2) || (rooms[_room].status == 3)); // комната где планируется изменение статуса должна быть на статусе 2 или 3
        rooms[_room].status = _status;
        emit UsedRoom(_room); // события использования комнаты
    }


    function _addRoom(uint _room) private { // добавление новой комнаты в список комнат
        roomList[_room].room = _room;
        roomList[_room].next = 0;
        roomList[_room].prev = roomList[0].prev;
        roomList[roomList[0].prev].next = _room;
        roomList[0].prev = _room;
        amountGames++; // увеличиваем количество созданных игровых комнат
    }

    function _delRoom(uint _room) private { // удаление комнаты из списка комнат
        roomList[roomList[_room].prev].next = roomList[_room].next;
        roomList[roomList[_room].next].prev = roomList[_room].prev;
        amountGames--; // уменьшаем количество созданных игровых комнат
        delete roomList[_room];
    }



    // Возвращаем настройки пользователя
    function getSettings(address _user) public view returns (User memory){
        return (settings[_user]);
    }

    // Возвращаем структуру игровой комнаты
    function getRoom(uint256 _room) public view returns (Room memory){
        return (rooms[_room]);
    }

    // Возвращаем информацию по всем созданным игровым комнатам
    function getCreatedRooms() public view returns (ActiveRoom[] memory){
        ActiveRoom[] memory _result = new ActiveRoom[](amountGames);
        uint _index = roomList[0].next;
        for(uint i; i < amountGames; i++){
            _result[i].room = _index;
            _result[i].bankRoom = rooms[_index].bankRoom;
            _result[i].bet = rooms[_index].bet;
            _result[i].status = rooms[_index].status;
            _result[i].player1 = rooms[_index].player1_users[0];
            _result[i].player2 = rooms[_index].player2_users[0];
            _index = roomList[_index].next;
        }
        return (_result);
    }

    // Возвращаем продварительный расчет выплат победителям
    function getPreview(uint256 _room) public view returns (uint256, address [] memory, uint [] memory, address [] memory, uint [] memory){
        address [] memory _arrPlayer1 = new address[](rooms[_room].player1_users.length); // адреса поставивщие на победу игрока 1
        uint[] memory _arrPay1 = new uint[](rooms[_room].player1_users.length); // выплаты которые должны получить пользователи
        address [] memory _arrPlayer2 = new address[](rooms[_room].player2_users.length); // адреса поставивщие на победу игрока 2
        uint[] memory _arrPay2 = new uint[](rooms[_room].player2_users.length); // выплаты которые должны получить пользователи
        uint _bank = rooms[_room].bankRoom;
        _bank -= (rooms[_room].bet * 2 + (_bank * rooms[_room].fees / (100 * 1e18))); // уменьшаем банк комнаты на комиссию + выигрыш победителя

        uint _sum; // сумма всех ставок
        for(uint256 i = 0; i < rooms[_room].player1_users.length; i++){
            _arrPlayer1[i] = rooms[_room].player1_users[i]; // копируем всех кто ставил на игрока 1
            _arrPay1[i] = rooms[_room].player1_bets[i]; // копируем все ставки на игрока 1
            _sum += _arrPay1[i]; // ссумируем все их ставки, для точного определения процента каждого
        }
        for(uint256 i = 0; i < rooms[_room].player1_users.length; i++){
            _arrPay1[i] = _arrPay1[i] * (100 * 1e18) / _sum; // находим процент от суммы ставок, который должен получить пользователь
            _arrPay1[i] = _bank * _arrPay1[i] / (100 * 1e18); // находим выплату по проценту
        }
        _arrPay1[0] += (rooms[_room].bet * 2); // к ставки игрока добавляется его награда за победу в игре
        _sum = 0; // обнуляем сумму для расчета других победителей

        for(uint256 i = 0; i < rooms[_room].player2_users.length; i++){
            _arrPlayer2[i] = rooms[_room].player2_users[i]; // копируем всех кто ставил на игрока 2
            _arrPay2[i] = rooms[_room].player2_bets[i]; // копируем все ставки на игрока 2
            _sum += _arrPay2[i]; // ссумируем все их ставки, для точного определения процента каждого
        }
        for(uint256 i = 0; i < rooms[_room].player2_users.length; i++){
            _arrPay2[i] = _arrPay2[i] * (100 * 1e18) / _sum; // находим процент от суммы ставок, который должен получить пользователь
            _arrPay2[i] = _bank * _arrPay2[i] / (100 * 1e18); // находим выплату по проценту
        }
        _arrPay2[0] += (rooms[_room].bet * 2); // к ставки игрока добавляется его награда за победу в игре        

        // Возвращаем банк комнаты и 4 массива (игроки1, выплаты1, игроки2, выплаты2)
        return (rooms[_room].bankRoom, _arrPlayer1, _arrPay1, _arrPlayer2, _arrPay2);
    }    
}
        

Contract ABI

[{"type":"event","name":"UsedRoom","inputs":[{"type":"uint256","name":"room","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"amountGames","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"betOnPlayer1","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"betOnPlayer2","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"closeRoom","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"commission","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"depositCancel","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"depositGame","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"fees","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"gameRoom","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"gamerBetPool","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple[]","name":"","internalType":"struct AstralCards.ActiveRoom[]","components":[{"type":"uint256","name":"room","internalType":"uint256"},{"type":"uint256","name":"bankRoom","internalType":"uint256"},{"type":"uint256","name":"bet","internalType":"uint256"},{"type":"uint256","name":"status","internalType":"uint256"},{"type":"address","name":"player1","internalType":"address"},{"type":"address","name":"player2","internalType":"address"}]}],"name":"getCreatedRooms","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"},{"type":"address[]","name":"","internalType":"address[]"},{"type":"uint256[]","name":"","internalType":"uint256[]"},{"type":"address[]","name":"","internalType":"address[]"},{"type":"uint256[]","name":"","internalType":"uint256[]"}],"name":"getPreview","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct AstralCards.Room","components":[{"type":"uint256","name":"bankRoom","internalType":"uint256"},{"type":"uint256","name":"bet","internalType":"uint256"},{"type":"uint256","name":"fees","internalType":"uint256"},{"type":"uint256","name":"status","internalType":"uint256"},{"type":"address[]","name":"player1_users","internalType":"address[]"},{"type":"uint256[]","name":"player1_bets","internalType":"uint256[]"},{"type":"address[]","name":"player2_users","internalType":"address[]"},{"type":"uint256[]","name":"player2_bets","internalType":"uint256[]"}]}],"name":"getRoom","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct AstralCards.User","components":[{"type":"uint8","name":"avatar","internalType":"uint8"},{"type":"string","name":"lang","internalType":"string"},{"type":"string","name":"name","internalType":"string"}]}],"name":"getSettings","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxUsersPerPlayer","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"minGameBet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"oracle","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"saveSettings","inputs":[{"type":"uint8","name":"_avatar","internalType":"uint8"},{"type":"string","name":"_lang","internalType":"string"},{"type":"string","name":"_name","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFees","inputs":[{"type":"uint256","name":"_fees","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setGamerBetPool","inputs":[{"type":"uint256","name":"_gamerBetPool","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxUsersPerPlayer","inputs":[{"type":"uint256","name":"_maxUsersPerPlayer","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMinGameBet","inputs":[{"type":"uint256","name":"_minGameBet","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNewCommission","inputs":[{"type":"address","name":"_commission","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNewOracle","inputs":[{"type":"address","name":"_newOracle","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setRoomStatus","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"},{"type":"uint256","name":"_status","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setWinner","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"},{"type":"address","name":"_winner","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x60806040526001600055678ac7230489e8000060025568015af1d78b58c40000600355601e600455674563918244f4000060055533600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561010257600080fd5b50614b45806101126000396000f3fe6080604052600436106101a05760003560e01c80638d617c1c116100ec578063bdd42aee1161008a578063d1c4cd8311610064578063d1c4cd8314610566578063e034d87b1461058f578063e1489191146105ba578063e1e6f150146105e5576101af565b8063bdd42aee146104fb578063ca01e33614610524578063cc28f73d1461054f576101af565b80639c623683116100c65780639c62368314610472578063aab30a3b1461049b578063ae94058e146104a5578063afa723a0146104d0576101af565b80638d617c1c146103db5780638da5cb5b1461041c5780639af1d35a14610447576101af565b806341b1311a116101595780636d8a74cb116101335780636d8a74cb1461030d5780637706d1f61461034a5780637dc0d1d0146103875780638699aa0b146103b2576101af565b806341b1311a1461029f5780634c42e4b4146102c85780635ccf3e93146102f1576101af565b80630ceb14fa146101b457806314777822146101df5780631c3a8892146101fb57806327081703146102245780633d18678e1461024d5780633d6a366414610276576101af565b366101af576101ad610610565b005b600080fd5b3480156101c057600080fd5b506101c9610c3e565b6040516101d69190613899565b60405180910390f35b6101f960048036038101906101f491906138f4565b610c44565b005b34801561020757600080fd5b50610222600480360381019061021d91906138f4565b610f4b565b005b34801561023057600080fd5b5061024b600480360381019061024691906138f4565b6113ca565b005b34801561025957600080fd5b50610274600480360381019061026f91906138f4565b611464565b005b34801561028257600080fd5b5061029d6004803603810190610298919061397f565b6114fe565b005b3480156102ab57600080fd5b506102c660048036038101906102c191906138f4565b6115d2565b005b3480156102d457600080fd5b506102ef60048036038101906102ea91906138f4565b61166c565b005b61030b600480360381019061030691906138f4565b611706565b005b34801561031957600080fd5b50610334600480360381019061032f91906138f4565b611a0d565b6040516103419190613bed565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c919061397f565b611c2f565b60405161037e9190613d12565b60405180910390f35b34801561039357600080fd5b5061039c611dc9565b6040516103a99190613d43565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d4919061397f565b611def565b005b3480156103e757600080fd5b5061040260048036038101906103fd91906138f4565b611ec3565b604051610413959493929190613e3c565b60405180910390f35b34801561042857600080fd5b50610431612647565b60405161043e9190613d43565b60405180910390f35b34801561045357600080fd5b5061045c61266d565b6040516104699190613899565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613eab565b612673565b005b6104a3610610565b005b3480156104b157600080fd5b506104ba612b4d565b6040516104c79190614015565b60405180910390f35b3480156104dc57600080fd5b506104e5612e22565b6040516104f29190613899565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190614198565b612e28565b005b34801561053057600080fd5b50610539612f28565b6040516105469190613899565b60405180910390f35b34801561055b57600080fd5b50610564612f2e565b005b34801561057257600080fd5b5061058d60048036038101906105889190614223565b613125565b005b34801561059b57600080fd5b506105a461325d565b6040516105b19190613899565b60405180910390f35b3480156105c657600080fd5b506105cf613263565b6040516105dc9190613d43565b60405180910390f35b3480156105f157600080fd5b506105fa613289565b6040516106079190613899565b60405180910390f35b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610675906142c0565b60405180910390fd5b6002543410156106c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ba9061432c565b60405180910390fd5b6000600a60008054815260200190815260200160002060030154036107d25734600a600080548152602001908152602001600020600101819055506001600a60008054815260200190815260200160002060030181905550600a600080548152602001908152602001600020600401339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061079e60005461328f565b6000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2610c3c565b600a6000805481526020019081526020016000206004016000815481106107fc576107fb61434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b906143c7565b60405180910390fd5b600a60008054815260200190815260200160002060010154341115610921573373ffffffffffffffffffffffffffffffffffffffff166108fc600a60008054815260200190815260200160002060010154346108f09190614416565b9081150290604051600060405180830381858888f1935050505015801561091b573d6000803e3d6000fd5b50610a1b565b600a60008054815260200190815260200160002060010154341015610a1a57600a60008054815260200190815260200160002060040160008154811061096a5761096961434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc34600a600080548152602001908152602001600020600101546109d19190614416565b9081150290604051600060405180830381858888f193505050501580156109fc573d6000803e3d6000fd5b5034600a600080548152602001908152602001600020600101819055505b5b6002600a60008054815260200190815260200160002060010154610a3f919061444a565b600a60008054815260200190815260200160002060000181905550600068056bc75e2d63100000600354600a60008054815260200190815260200160002060010154610a8b919061444a565b610a9591906144d3565b905080600a6000805481526020019081526020016000206001016000828254610abe9190614416565b92505081905550600a600080548152602001908152602001600020600501819080600181540180825580915050600190039060005260206000200160009091909190915055600a600080548152602001908152602001600020600601339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a600080548152602001908152602001600020600701819080600181540180825580915050600190039060005260206000200160009091909190915055600554600a600080548152602001908152602001600020600201819055506003600a600080548152602001908152602001600020600301819055506000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2600080815480929190610c3590614504565b9190505550505b565b60015481565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca9906142c0565b60405180910390fd5b6004600254610cc191906144d3565b341015610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa9061432c565b60405180910390fd5b6003600a60008381526020019081526020016000206003015414610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390614598565b60405180910390fd5b600454600a6000838152602001908152602001600020600601805490501115610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190614604565b60405180910390fd5b600080610ddb600a600085815260200190815260200160002060060161335e565b80925081935050508015610e375734600a60008581526020019081526020016000206007018381548110610e1257610e1161434c565b5b906000526020600020016000828254610e2b9190614624565b92505081905550610eec565b600a6000848152602001908152602001600020600601339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60008481526020019081526020016000206007013490806001815401808255809150506001900390600052602060002001600090919091909150555b34600a60008581526020019081526020016000206000016000828254610f129190614624565b92505081905550827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd2906146a4565b60405180910390fd5b6003600a600083815260200190815260200160002060030154148061101657506002600a600083815260200190815260200160002060030154145b611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90614710565b60405180910390fd5b600a600082815260200190815260200160002060010154600a60008381526020019081526020016000206005016000815481106110955761109461434c565b5b9060005260206000200160008282546110ae9190614624565b92505081905550600a600082815260200190815260200160002060010154600a60008381526020019081526020016000206007016000815481106110f5576110f461434c565b5b90600052602060002001600082825461110e9190614624565b9250508190555060005b600a60008381526020019081526020016000206004018054905081101561121757600a600083815260200190815260200160002060040181815481106111615761116061434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a600085815260200190815260200160002060050183815481106111cd576111cc61434c565b5b90600052602060002001549081150290604051600060405180830381858888f19350505050158015611203573d6000803e3d6000fd5b50808061120f90614504565b915050611118565b5060005b600a60008381526020019081526020016000206006018054905081101561131a57600a600083815260200190815260200160002060060181815481106112645761126361434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a600085815260200190815260200160002060070183815481106112d0576112cf61434c565b5b90600052602060002001549081150290604051600060405180830381858888f19350505050158015611306573d6000803e3d6000fd5b50808061131290614504565b91505061121b565b506113248161340e565b600a60008281526020019081526020016000206000808201600090556001820160009055600282016000905560038201600090556004820160006113689190613756565b6005820160006113789190613777565b6006820160006113889190613756565b6007820160006113989190613777565b5050807fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461145a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611451906146a4565b60405180910390fd5b8060028190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb906146a4565b60405180910390fd5b8060058190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461158e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611585906146a4565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611659906146a4565b60405180910390fd5b8060038190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f3906146a4565b60405180910390fd5b8060048190555050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b906142c0565b60405180910390fd5b600460025461178391906144d3565b3410156117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc9061432c565b60405180910390fd5b6003600a6000838152602001908152602001600020600301541461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590614598565b60405180910390fd5b600454600a600083815260200190815260200160002060040180549050111561187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390614604565b60405180910390fd5b60008061189d600a600085815260200190815260200160002060040161335e565b809250819350505080156118f95734600a600085815260200190815260200160002060050183815481106118d4576118d361434c565b5b9060005260206000200160008282546118ed9190614624565b925050819055506119ae565b600a6000848152602001908152602001600020600401339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60008481526020019081526020016000206005013490806001815401808255809150506001900390600052602060002001600090919091909150555b34600a600085815260200190815260200160002060000160008282546119d49190614624565b92505081905550827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b611a15613798565b600a6000838152602001908152602001600020604051806101000160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201805480602002602001604051908101604052809291908181526020018280548015611ae157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611a97575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015611b3957602002820191906000526020600020905b815481526020019060010190808311611b25575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bc757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611b7d575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015611c1f57602002820191906000526020600020905b815481526020019060010190808311611c0b575b5050505050815250509050919050565b611c376137dd565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900460ff1660ff1660ff168152602001600182018054611cae9061475f565b80601f0160208091040260200160405190810160405280929190818152602001828054611cda9061475f565b8015611d275780601f10611cfc57610100808354040283529160200191611d27565b820191906000526020600020905b815481529060010190602001808311611d0a57829003601f168201915b50505050508152602001600282018054611d409061475f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6c9061475f565b8015611db95780601f10611d8e57610100808354040283529160200191611db9565b820191906000526020600020905b815481529060010190602001808311611d9c57829003601f168201915b5050505050815250509050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e76906146a4565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006060806060806000600a60008881526020019081526020016000206004018054905067ffffffffffffffff811115611f0057611eff61406d565b5b604051908082528060200260200182016040528015611f2e5781602001602082028036833780820191505090505b5090506000600a60008981526020019081526020016000206004018054905067ffffffffffffffff811115611f6657611f6561406d565b5b604051908082528060200260200182016040528015611f945781602001602082028036833780820191505090505b5090506000600a60008a81526020019081526020016000206006018054905067ffffffffffffffff811115611fcc57611fcb61406d565b5b604051908082528060200260200182016040528015611ffa5781602001602082028036833780820191505090505b5090506000600a60008b81526020019081526020016000206006018054905067ffffffffffffffff8111156120325761203161406d565b5b6040519080825280602002602001820160405280156120605781602001602082028036833780820191505090505b5090506000600a60008c815260200190815260200160002060000154905068056bc75e2d63100000600a60008d815260200190815260200160002060020154826120aa919061444a565b6120b491906144d3565b6002600a60008e8152602001908152602001600020600101546120d7919061444a565b6120e19190614624565b816120ec9190614416565b9050600080600090505b600a60008e81526020019081526020016000206004018054905081101561224457600a60008e8152602001908152602001600020600401818154811061213f5761213e61434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687828151811061217d5761217c61434c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60008e815260200190815260200160002060050181815481106121df576121de61434c565b5b90600052602060002001548682815181106121fd576121fc61434c565b5b60200260200101818152505085818151811061221c5761221b61434c565b5b60200260200101518261222f9190614624565b9150808061223c90614504565b9150506120f6565b5060005b600a60008e81526020019081526020016000206004018054905081101561232e578168056bc75e2d631000008783815181106122875761228661434c565b5b6020026020010151612299919061444a565b6122a391906144d3565b8682815181106122b6576122b561434c565b5b60200260200101818152505068056bc75e2d631000008682815181106122df576122de61434c565b5b6020026020010151846122f2919061444a565b6122fc91906144d3565b86828151811061230f5761230e61434c565b5b602002602001018181525050808061232690614504565b915050612248565b506002600a60008e815260200190815260200160002060010154612352919061444a565b856000815181106123665761236561434c565b5b6020026020010181815161237a9190614624565b915081815250506000905060005b600a60008e8152602001908152602001600020600601805490508110156124d657600a60008e815260200190815260200160002060060181815481106123d1576123d061434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685828151811061240f5761240e61434c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60008e815260200190815260200160002060070181815481106124715761247061434c565b5b906000526020600020015484828151811061248f5761248e61434c565b5b6020026020010181815250508381815181106124ae576124ad61434c565b5b6020026020010151826124c19190614624565b915080806124ce90614504565b915050612388565b5060005b600a60008e8152602001908152602001600020600601805490508110156125c0578168056bc75e2d631000008583815181106125195761251861434c565b5b602002602001015161252b919061444a565b61253591906144d3565b8482815181106125485761254761434c565b5b60200260200101818152505068056bc75e2d631000008482815181106125715761257061434c565b5b602002602001015184612584919061444a565b61258e91906144d3565b8482815181106125a1576125a061434c565b5b60200260200101818152505080806125b890614504565b9150506124da565b506002600a60008e8152602001908152602001600020600101546125e4919061444a565b836000815181106125f8576125f761434c565b5b6020026020010181815161260c9190614624565b91508181525050600a60008d815260200190815260200160002060000154868686869a509a509a509a509a5050505050505091939590929450565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fa906147dc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60008481526020019081526020016000206004016000815481106127435761274261434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061280e57508073ffffffffffffffffffffffffffffffffffffffff16600a60008481526020019081526020016000206006016000815481106127cb576127ca61434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61281757600080fd5b600068056bc75e2d63100000600a600085815260200190815260200160002060020154600a60008681526020019081526020016000206000015461285b919061444a565b61286591906144d3565b90506002600a6000858152602001908152602001600020600101600082825461288e919061444a565b92505081905550600a600084815260200190815260200160002060010154816128b79190614624565b600a600085815260200190815260200160002060000160008282546128dc9190614416565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600a60008581526020019081526020016000206004016000815481106129235761292261434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036129d0576129cb600a600085815260200190815260200160002060000154600a600086815260200190815260200160002060010154600a6000878152602001908152602001600020600401600a60008881526020019081526020016000206005016134e5565b612a33565b612a32600a600085815260200190815260200160002060000154600a600086815260200190815260200160002060010154600a6000878152602001908152602001600020600601600a60008881526020019081526020016000206007016134e5565b5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a9b573d6000803e3d6000fd5b50612aa58361340e565b600a6000848152602001908152602001600020600080820160009055600182016000905560028201600090556003820160009055600482016000612ae99190613756565b600582016000612af99190613777565b600682016000612b099190613756565b600782016000612b199190613777565b5050827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b6060600060015467ffffffffffffffff811115612b6d57612b6c61406d565b5b604051908082528060200260200182016040528015612ba657816020015b612b93613801565b815260200190600190039081612b8b5790505b5090506000600b600080815260200190815260200160002060010154905060005b600154811015612e195781838281518110612be557612be461434c565b5b60200260200101516000018181525050600a600083815260200190815260200160002060000154838281518110612c1f57612c1e61434c565b5b60200260200101516020018181525050600a600083815260200190815260200160002060010154838281518110612c5957612c5861434c565b5b60200260200101516040018181525050600a600083815260200190815260200160002060030154838281518110612c9357612c9261434c565b5b60200260200101516060018181525050600a6000838152602001908152602001600020600401600081548110612ccc57612ccb61434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110612d0a57612d0961434c565b5b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a6000838152602001908152602001600020600601600081548110612d7157612d7061434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110612daf57612dae61434c565b5b602002602001015160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60008381526020019081526020016000206001015491508080612e1190614504565b915050612bc7565b50819250505090565b60025481565b82600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001019081612ed291906149a8565b5080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002019081612f2291906149a8565b50505050565b60035481565b600a600080548152602001908152602001600020600401600081548110612f5857612f5761434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe790614ac6565b60405180910390fd5b6001600a600080548152602001908152602001600020600301541461301457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc600a600080548152602001908152602001600020600101549081150290604051600060405180830381858888f19350505050158015613071573d6000803e3d6000fd5b50600a6000805481526020019081526020016000206000808201600090556001820160009055600282016000905560038201600090556004820160006130b79190613756565b6005820160006130c79190613777565b6006820160006130d79190613756565b6007820160006130e79190613777565b50506130f460005461340e565b6000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146131b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ac906147dc565b60405180910390fd5b60028114806131c45750600381145b6131cd57600080fd5b6002600a600084815260200190815260200160002060030154148061320857506003600a600084815260200190815260200160002060030154145b61321157600080fd5b80600a600084815260200190815260200160002060030181905550817fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a25050565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b80600b6000838152602001908152602001600020600001819055506000600b600083815260200190815260200160002060010181905550600b600080815260200190815260200160002060020154600b60008381526020019081526020016000206002018190555080600b6000600b60008081526020019081526020016000206002015481526020019081526020016000206001018190555080600b6000808152602001908152602001600020600201819055506001600081548092919061335690614504565b919050555050565b60008060005b8380549050811015613400578381815481106133835761338261434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036133ed578060019250925050613409565b80806133f890614504565b915050613364565b50600080915091505b915091565b600b600082815260200190815260200160002060010154600b6000600b600085815260200190815260200160002060020154815260200190815260200160002060010181905550600b600082815260200190815260200160002060020154600b6000600b600085815260200190815260200160002060010154815260200190815260200160002060020181905550600160008154809291906134af90614ae6565b9190505550600b600082815260200190815260200160002060008082016000905560018201600090556002820160009055505050565b600080838054905067ffffffffffffffff8111156135065761350561406d565b5b6040519080825280602002602001820160405280156135345781602001602082028036833780820191505090505b50905060005b8480549050811015613584578381815481106135595761355861434c565b5b90600052602060002001548361356f9190614624565b9250808061357c90614504565b91505061353a565b5060005b848054905081101561365c578268056bc75e2d631000008583815481106135b2576135b161434c565b5b90600052602060002001546135c7919061444a565b6135d191906144d3565b8282815181106135e4576135e361434c565b5b60200260200101818152505068056bc75e2d6310000082828151811061360d5761360c61434c565b5b602002602001015188613620919061444a565b61362a91906144d3565b82828151811061363d5761363c61434c565b5b602002602001018181525050808061365490614504565b915050613588565b5084816000815181106136725761367161434c565b5b602002602001018181516136869190614624565b9150818152505060005b848054905081101561374d578481815481106136af576136ae61434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8383815181106137065761370561434c565b5b60200260200101519081150290604051600060405180830381858888f19350505050158015613739573d6000803e3d6000fd5b50808061374590614504565b915050613690565b50505050505050565b50805460008255906000526020600020908101906137749190613863565b50565b50805460008255906000526020600020908101906137959190613863565b50565b60405180610100016040528060008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060600160405280600060ff16815260200160608152602001606081525090565b6040518060c0016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b5b8082111561387c576000816000905550600101613864565b5090565b6000819050919050565b61389381613880565b82525050565b60006020820190506138ae600083018461388a565b92915050565b6000604051905090565b600080fd5b600080fd5b6138d181613880565b81146138dc57600080fd5b50565b6000813590506138ee816138c8565b92915050565b60006020828403121561390a576139096138be565b5b6000613918848285016138df565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061394c82613921565b9050919050565b61395c81613941565b811461396757600080fd5b50565b60008135905061397981613953565b92915050565b600060208284031215613995576139946138be565b5b60006139a38482850161396a565b91505092915050565b6139b581613880565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139f081613941565b82525050565b6000613a0283836139e7565b60208301905092915050565b6000602082019050919050565b6000613a26826139bb565b613a3081856139c6565b9350613a3b836139d7565b8060005b83811015613a6c578151613a5388826139f6565b9750613a5e83613a0e565b925050600181019050613a3f565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000613ab183836139ac565b60208301905092915050565b6000602082019050919050565b6000613ad582613a79565b613adf8185613a84565b9350613aea83613a95565b8060005b83811015613b1b578151613b028882613aa5565b9750613b0d83613abd565b925050600181019050613aee565b5085935050505092915050565b600061010083016000830151613b4160008601826139ac565b506020830151613b5460208601826139ac565b506040830151613b6760408601826139ac565b506060830151613b7a60608601826139ac565b5060808301518482036080860152613b928282613a1b565b91505060a083015184820360a0860152613bac8282613aca565b91505060c083015184820360c0860152613bc68282613a1b565b91505060e083015184820360e0860152613be08282613aca565b9150508091505092915050565b60006020820190508181036000830152613c078184613b28565b905092915050565b600060ff82169050919050565b613c2581613c0f565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c65578082015181840152602081019050613c4a565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c8d82613c2b565b613c978185613c36565b9350613ca7818560208601613c47565b613cb081613c71565b840191505092915050565b6000606083016000830151613cd36000860182613c1c565b5060208301518482036020860152613ceb8282613c82565b91505060408301518482036040860152613d058282613c82565b9150508091505092915050565b60006020820190508181036000830152613d2c8184613cbb565b905092915050565b613d3d81613941565b82525050565b6000602082019050613d586000830184613d34565b92915050565b600082825260208201905092915050565b6000613d7a826139bb565b613d848185613d5e565b9350613d8f836139d7565b8060005b83811015613dc0578151613da788826139f6565b9750613db283613a0e565b925050600181019050613d93565b5085935050505092915050565b600082825260208201905092915050565b6000613de982613a79565b613df38185613dcd565b9350613dfe83613a95565b8060005b83811015613e2f578151613e168882613aa5565b9750613e2183613abd565b925050600181019050613e02565b5085935050505092915050565b600060a082019050613e51600083018861388a565b8181036020830152613e638187613d6f565b90508181036040830152613e778186613dde565b90508181036060830152613e8b8185613d6f565b90508181036080830152613e9f8184613dde565b90509695505050505050565b60008060408385031215613ec257613ec16138be565b5b6000613ed0858286016138df565b9250506020613ee18582860161396a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60c082016000820151613f2d60008501826139ac565b506020820151613f4060208501826139ac565b506040820151613f5360408501826139ac565b506060820151613f6660608501826139ac565b506080820151613f7960808501826139e7565b5060a0820151613f8c60a08501826139e7565b50505050565b6000613f9e8383613f17565b60c08301905092915050565b6000602082019050919050565b6000613fc282613eeb565b613fcc8185613ef6565b9350613fd783613f07565b8060005b83811015614008578151613fef8882613f92565b9750613ffa83613faa565b925050600181019050613fdb565b5085935050505092915050565b6000602082019050818103600083015261402f8184613fb7565b905092915050565b61404081613c0f565b811461404b57600080fd5b50565b60008135905061405d81614037565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6140a582613c71565b810181811067ffffffffffffffff821117156140c4576140c361406d565b5b80604052505050565b60006140d76138b4565b90506140e3828261409c565b919050565b600067ffffffffffffffff8211156141035761410261406d565b5b61410c82613c71565b9050602081019050919050565b82818337600083830152505050565b600061413b614136846140e8565b6140cd565b90508281526020810184848401111561415757614156614068565b5b614162848285614119565b509392505050565b600082601f83011261417f5761417e614063565b5b813561418f848260208601614128565b91505092915050565b6000806000606084860312156141b1576141b06138be565b5b60006141bf8682870161404e565b935050602084013567ffffffffffffffff8111156141e0576141df6138c3565b5b6141ec8682870161416a565b925050604084013567ffffffffffffffff81111561420d5761420c6138c3565b5b6142198682870161416a565b9150509250925092565b6000806040838503121561423a576142396138be565b5b6000614248858286016138df565b9250506020614259858286016138df565b9150509250929050565b600082825260208201905092915050565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b60006142aa600883614263565b91506142b582614274565b602082019050919050565b600060208201905081810360008301526142d98161429d565b9050919050565b7f6c6f772062657400000000000000000000000000000000000000000000000000600082015250565b6000614316600783614263565b9150614321826142e0565b602082019050919050565b6000602082019050818103600083015261434581614309565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f616c726561647920616464656400000000000000000000000000000000000000600082015250565b60006143b1600d83614263565b91506143bc8261437b565b602082019050919050565b600060208201905081810360008301526143e0816143a4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061442182613880565b915061442c83613880565b9250828203905081811115614444576144436143e7565b5b92915050565b600061445582613880565b915061446083613880565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614499576144986143e7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144de82613880565b91506144e983613880565b9250826144f9576144f86144a4565b5b828204905092915050565b600061450f82613880565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614541576145406143e7565b5b600182019050919050565b7f62657473206172652070726f6869626974656400000000000000000000000000600082015250565b6000614582601383614263565b915061458d8261454c565b602082019050919050565b600060208201905081810360008301526145b181614575565b9050919050565b7f4d616e7920757365727320776974682062657473000000000000000000000000600082015250565b60006145ee601483614263565b91506145f9826145b8565b602082019050919050565b6000602082019050818103600083015261461d816145e1565b9050919050565b600061462f82613880565b915061463a83613880565b9250828201905080821115614652576146516143e7565b5b92915050565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b600061468e600a83614263565b915061469982614658565b602082019050919050565b600060208201905081810360008301526146bd81614681565b9050919050565b7f6261642073746174757300000000000000000000000000000000000000000000600082015250565b60006146fa600a83614263565b9150614705826146c4565b602082019050919050565b60006020820190508181036000830152614729816146ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061477757607f821691505b60208210810361478a57614789614730565b5b50919050565b7f4f6e6c79206f7261636c65000000000000000000000000000000000000000000600082015250565b60006147c6600b83614263565b91506147d182614790565b602082019050919050565b600060208201905081810360008301526147f5816147b9565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261485e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614821565b6148688683614821565b95508019841693508086168417925050509392505050565b6000819050919050565b60006148a56148a061489b84613880565b614880565b613880565b9050919050565b6000819050919050565b6148bf8361488a565b6148d36148cb826148ac565b84845461482e565b825550505050565b600090565b6148e86148db565b6148f38184846148b6565b505050565b5b818110156149175761490c6000826148e0565b6001810190506148f9565b5050565b601f82111561495c5761492d816147fc565b61493684614811565b81016020851015614945578190505b61495961495185614811565b8301826148f8565b50505b505050565b600082821c905092915050565b600061497f60001984600802614961565b1980831691505092915050565b6000614998838361496e565b9150826002028217905092915050565b6149b182613c2b565b67ffffffffffffffff8111156149ca576149c961406d565b5b6149d4825461475f565b6149df82828561491b565b600060209050601f831160018114614a125760008415614a00578287015190505b614a0a858261498c565b865550614a72565b601f198416614a20866147fc565b60005b82811015614a4857848901518255600182019150602085019450602081019050614a23565b86831015614a655784890151614a61601f89168261496e565b8355505b6001600288020188555050505b505050505050565b7f6e6f7420796f7572206265740000000000000000000000000000000000000000600082015250565b6000614ab0600c83614263565b9150614abb82614a7a565b602082019050919050565b60006020820190508181036000830152614adf81614aa3565b9050919050565b6000614af182613880565b915060008203614b0457614b036143e7565b5b60018203905091905056fea2646970667358221220ef4270f4d8627f0152aa0978974822e5461758126f9511624641bc80b5be50f164736f6c63430008100033

Deployed ByteCode

0x6080604052600436106101a05760003560e01c80638d617c1c116100ec578063bdd42aee1161008a578063d1c4cd8311610064578063d1c4cd8314610566578063e034d87b1461058f578063e1489191146105ba578063e1e6f150146105e5576101af565b8063bdd42aee146104fb578063ca01e33614610524578063cc28f73d1461054f576101af565b80639c623683116100c65780639c62368314610472578063aab30a3b1461049b578063ae94058e146104a5578063afa723a0146104d0576101af565b80638d617c1c146103db5780638da5cb5b1461041c5780639af1d35a14610447576101af565b806341b1311a116101595780636d8a74cb116101335780636d8a74cb1461030d5780637706d1f61461034a5780637dc0d1d0146103875780638699aa0b146103b2576101af565b806341b1311a1461029f5780634c42e4b4146102c85780635ccf3e93146102f1576101af565b80630ceb14fa146101b457806314777822146101df5780631c3a8892146101fb57806327081703146102245780633d18678e1461024d5780633d6a366414610276576101af565b366101af576101ad610610565b005b600080fd5b3480156101c057600080fd5b506101c9610c3e565b6040516101d69190613899565b60405180910390f35b6101f960048036038101906101f491906138f4565b610c44565b005b34801561020757600080fd5b50610222600480360381019061021d91906138f4565b610f4b565b005b34801561023057600080fd5b5061024b600480360381019061024691906138f4565b6113ca565b005b34801561025957600080fd5b50610274600480360381019061026f91906138f4565b611464565b005b34801561028257600080fd5b5061029d6004803603810190610298919061397f565b6114fe565b005b3480156102ab57600080fd5b506102c660048036038101906102c191906138f4565b6115d2565b005b3480156102d457600080fd5b506102ef60048036038101906102ea91906138f4565b61166c565b005b61030b600480360381019061030691906138f4565b611706565b005b34801561031957600080fd5b50610334600480360381019061032f91906138f4565b611a0d565b6040516103419190613bed565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c919061397f565b611c2f565b60405161037e9190613d12565b60405180910390f35b34801561039357600080fd5b5061039c611dc9565b6040516103a99190613d43565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d4919061397f565b611def565b005b3480156103e757600080fd5b5061040260048036038101906103fd91906138f4565b611ec3565b604051610413959493929190613e3c565b60405180910390f35b34801561042857600080fd5b50610431612647565b60405161043e9190613d43565b60405180910390f35b34801561045357600080fd5b5061045c61266d565b6040516104699190613899565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613eab565b612673565b005b6104a3610610565b005b3480156104b157600080fd5b506104ba612b4d565b6040516104c79190614015565b60405180910390f35b3480156104dc57600080fd5b506104e5612e22565b6040516104f29190613899565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d9190614198565b612e28565b005b34801561053057600080fd5b50610539612f28565b6040516105469190613899565b60405180910390f35b34801561055b57600080fd5b50610564612f2e565b005b34801561057257600080fd5b5061058d60048036038101906105889190614223565b613125565b005b34801561059b57600080fd5b506105a461325d565b6040516105b19190613899565b60405180910390f35b3480156105c657600080fd5b506105cf613263565b6040516105dc9190613d43565b60405180910390f35b3480156105f157600080fd5b506105fa613289565b6040516106079190613899565b60405180910390f35b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610675906142c0565b60405180910390fd5b6002543410156106c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ba9061432c565b60405180910390fd5b6000600a60008054815260200190815260200160002060030154036107d25734600a600080548152602001908152602001600020600101819055506001600a60008054815260200190815260200160002060030181905550600a600080548152602001908152602001600020600401339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061079e60005461328f565b6000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2610c3c565b600a6000805481526020019081526020016000206004016000815481106107fc576107fb61434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b906143c7565b60405180910390fd5b600a60008054815260200190815260200160002060010154341115610921573373ffffffffffffffffffffffffffffffffffffffff166108fc600a60008054815260200190815260200160002060010154346108f09190614416565b9081150290604051600060405180830381858888f1935050505015801561091b573d6000803e3d6000fd5b50610a1b565b600a60008054815260200190815260200160002060010154341015610a1a57600a60008054815260200190815260200160002060040160008154811061096a5761096961434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc34600a600080548152602001908152602001600020600101546109d19190614416565b9081150290604051600060405180830381858888f193505050501580156109fc573d6000803e3d6000fd5b5034600a600080548152602001908152602001600020600101819055505b5b6002600a60008054815260200190815260200160002060010154610a3f919061444a565b600a60008054815260200190815260200160002060000181905550600068056bc75e2d63100000600354600a60008054815260200190815260200160002060010154610a8b919061444a565b610a9591906144d3565b905080600a6000805481526020019081526020016000206001016000828254610abe9190614416565b92505081905550600a600080548152602001908152602001600020600501819080600181540180825580915050600190039060005260206000200160009091909190915055600a600080548152602001908152602001600020600601339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a600080548152602001908152602001600020600701819080600181540180825580915050600190039060005260206000200160009091909190915055600554600a600080548152602001908152602001600020600201819055506003600a600080548152602001908152602001600020600301819055506000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2600080815480929190610c3590614504565b9190505550505b565b60015481565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca9906142c0565b60405180910390fd5b6004600254610cc191906144d3565b341015610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa9061432c565b60405180910390fd5b6003600a60008381526020019081526020016000206003015414610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390614598565b60405180910390fd5b600454600a6000838152602001908152602001600020600601805490501115610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190614604565b60405180910390fd5b600080610ddb600a600085815260200190815260200160002060060161335e565b80925081935050508015610e375734600a60008581526020019081526020016000206007018381548110610e1257610e1161434c565b5b906000526020600020016000828254610e2b9190614624565b92505081905550610eec565b600a6000848152602001908152602001600020600601339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60008481526020019081526020016000206007013490806001815401808255809150506001900390600052602060002001600090919091909150555b34600a60008581526020019081526020016000206000016000828254610f129190614624565b92505081905550827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd2906146a4565b60405180910390fd5b6003600a600083815260200190815260200160002060030154148061101657506002600a600083815260200190815260200160002060030154145b611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c90614710565b60405180910390fd5b600a600082815260200190815260200160002060010154600a60008381526020019081526020016000206005016000815481106110955761109461434c565b5b9060005260206000200160008282546110ae9190614624565b92505081905550600a600082815260200190815260200160002060010154600a60008381526020019081526020016000206007016000815481106110f5576110f461434c565b5b90600052602060002001600082825461110e9190614624565b9250508190555060005b600a60008381526020019081526020016000206004018054905081101561121757600a600083815260200190815260200160002060040181815481106111615761116061434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a600085815260200190815260200160002060050183815481106111cd576111cc61434c565b5b90600052602060002001549081150290604051600060405180830381858888f19350505050158015611203573d6000803e3d6000fd5b50808061120f90614504565b915050611118565b5060005b600a60008381526020019081526020016000206006018054905081101561131a57600a600083815260200190815260200160002060060181815481106112645761126361434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a600085815260200190815260200160002060070183815481106112d0576112cf61434c565b5b90600052602060002001549081150290604051600060405180830381858888f19350505050158015611306573d6000803e3d6000fd5b50808061131290614504565b91505061121b565b506113248161340e565b600a60008281526020019081526020016000206000808201600090556001820160009055600282016000905560038201600090556004820160006113689190613756565b6005820160006113789190613777565b6006820160006113889190613756565b6007820160006113989190613777565b5050807fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461145a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611451906146a4565b60405180910390fd5b8060028190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb906146a4565b60405180910390fd5b8060058190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461158e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611585906146a4565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611659906146a4565b60405180910390fd5b8060038190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f3906146a4565b60405180910390fd5b8060048190555050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b906142c0565b60405180910390fd5b600460025461178391906144d3565b3410156117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc9061432c565b60405180910390fd5b6003600a6000838152602001908152602001600020600301541461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590614598565b60405180910390fd5b600454600a600083815260200190815260200160002060040180549050111561187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390614604565b60405180910390fd5b60008061189d600a600085815260200190815260200160002060040161335e565b809250819350505080156118f95734600a600085815260200190815260200160002060050183815481106118d4576118d361434c565b5b9060005260206000200160008282546118ed9190614624565b925050819055506119ae565b600a6000848152602001908152602001600020600401339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60008481526020019081526020016000206005013490806001815401808255809150506001900390600052602060002001600090919091909150555b34600a600085815260200190815260200160002060000160008282546119d49190614624565b92505081905550827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b611a15613798565b600a6000838152602001908152602001600020604051806101000160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201805480602002602001604051908101604052809291908181526020018280548015611ae157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611a97575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015611b3957602002820191906000526020600020905b815481526020019060010190808311611b25575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bc757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611b7d575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015611c1f57602002820191906000526020600020905b815481526020019060010190808311611c0b575b5050505050815250509050919050565b611c376137dd565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900460ff1660ff1660ff168152602001600182018054611cae9061475f565b80601f0160208091040260200160405190810160405280929190818152602001828054611cda9061475f565b8015611d275780601f10611cfc57610100808354040283529160200191611d27565b820191906000526020600020905b815481529060010190602001808311611d0a57829003601f168201915b50505050508152602001600282018054611d409061475f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6c9061475f565b8015611db95780601f10611d8e57610100808354040283529160200191611db9565b820191906000526020600020905b815481529060010190602001808311611d9c57829003601f168201915b5050505050815250509050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e76906146a4565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006060806060806000600a60008881526020019081526020016000206004018054905067ffffffffffffffff811115611f0057611eff61406d565b5b604051908082528060200260200182016040528015611f2e5781602001602082028036833780820191505090505b5090506000600a60008981526020019081526020016000206004018054905067ffffffffffffffff811115611f6657611f6561406d565b5b604051908082528060200260200182016040528015611f945781602001602082028036833780820191505090505b5090506000600a60008a81526020019081526020016000206006018054905067ffffffffffffffff811115611fcc57611fcb61406d565b5b604051908082528060200260200182016040528015611ffa5781602001602082028036833780820191505090505b5090506000600a60008b81526020019081526020016000206006018054905067ffffffffffffffff8111156120325761203161406d565b5b6040519080825280602002602001820160405280156120605781602001602082028036833780820191505090505b5090506000600a60008c815260200190815260200160002060000154905068056bc75e2d63100000600a60008d815260200190815260200160002060020154826120aa919061444a565b6120b491906144d3565b6002600a60008e8152602001908152602001600020600101546120d7919061444a565b6120e19190614624565b816120ec9190614416565b9050600080600090505b600a60008e81526020019081526020016000206004018054905081101561224457600a60008e8152602001908152602001600020600401818154811061213f5761213e61434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687828151811061217d5761217c61434c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60008e815260200190815260200160002060050181815481106121df576121de61434c565b5b90600052602060002001548682815181106121fd576121fc61434c565b5b60200260200101818152505085818151811061221c5761221b61434c565b5b60200260200101518261222f9190614624565b9150808061223c90614504565b9150506120f6565b5060005b600a60008e81526020019081526020016000206004018054905081101561232e578168056bc75e2d631000008783815181106122875761228661434c565b5b6020026020010151612299919061444a565b6122a391906144d3565b8682815181106122b6576122b561434c565b5b60200260200101818152505068056bc75e2d631000008682815181106122df576122de61434c565b5b6020026020010151846122f2919061444a565b6122fc91906144d3565b86828151811061230f5761230e61434c565b5b602002602001018181525050808061232690614504565b915050612248565b506002600a60008e815260200190815260200160002060010154612352919061444a565b856000815181106123665761236561434c565b5b6020026020010181815161237a9190614624565b915081815250506000905060005b600a60008e8152602001908152602001600020600601805490508110156124d657600a60008e815260200190815260200160002060060181815481106123d1576123d061434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685828151811061240f5761240e61434c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60008e815260200190815260200160002060070181815481106124715761247061434c565b5b906000526020600020015484828151811061248f5761248e61434c565b5b6020026020010181815250508381815181106124ae576124ad61434c565b5b6020026020010151826124c19190614624565b915080806124ce90614504565b915050612388565b5060005b600a60008e8152602001908152602001600020600601805490508110156125c0578168056bc75e2d631000008583815181106125195761251861434c565b5b602002602001015161252b919061444a565b61253591906144d3565b8482815181106125485761254761434c565b5b60200260200101818152505068056bc75e2d631000008482815181106125715761257061434c565b5b602002602001015184612584919061444a565b61258e91906144d3565b8482815181106125a1576125a061434c565b5b60200260200101818152505080806125b890614504565b9150506124da565b506002600a60008e8152602001908152602001600020600101546125e4919061444a565b836000815181106125f8576125f761434c565b5b6020026020010181815161260c9190614624565b91508181525050600a60008d815260200190815260200160002060000154868686869a509a509a509a509a5050505050505091939590929450565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fa906147dc565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60008481526020019081526020016000206004016000815481106127435761274261434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061280e57508073ffffffffffffffffffffffffffffffffffffffff16600a60008481526020019081526020016000206006016000815481106127cb576127ca61434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61281757600080fd5b600068056bc75e2d63100000600a600085815260200190815260200160002060020154600a60008681526020019081526020016000206000015461285b919061444a565b61286591906144d3565b90506002600a6000858152602001908152602001600020600101600082825461288e919061444a565b92505081905550600a600084815260200190815260200160002060010154816128b79190614624565b600a600085815260200190815260200160002060000160008282546128dc9190614416565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600a60008581526020019081526020016000206004016000815481106129235761292261434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036129d0576129cb600a600085815260200190815260200160002060000154600a600086815260200190815260200160002060010154600a6000878152602001908152602001600020600401600a60008881526020019081526020016000206005016134e5565b612a33565b612a32600a600085815260200190815260200160002060000154600a600086815260200190815260200160002060010154600a6000878152602001908152602001600020600601600a60008881526020019081526020016000206007016134e5565b5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a9b573d6000803e3d6000fd5b50612aa58361340e565b600a6000848152602001908152602001600020600080820160009055600182016000905560028201600090556003820160009055600482016000612ae99190613756565b600582016000612af99190613777565b600682016000612b099190613756565b600782016000612b199190613777565b5050827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b6060600060015467ffffffffffffffff811115612b6d57612b6c61406d565b5b604051908082528060200260200182016040528015612ba657816020015b612b93613801565b815260200190600190039081612b8b5790505b5090506000600b600080815260200190815260200160002060010154905060005b600154811015612e195781838281518110612be557612be461434c565b5b60200260200101516000018181525050600a600083815260200190815260200160002060000154838281518110612c1f57612c1e61434c565b5b60200260200101516020018181525050600a600083815260200190815260200160002060010154838281518110612c5957612c5861434c565b5b60200260200101516040018181525050600a600083815260200190815260200160002060030154838281518110612c9357612c9261434c565b5b60200260200101516060018181525050600a6000838152602001908152602001600020600401600081548110612ccc57612ccb61434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110612d0a57612d0961434c565b5b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a6000838152602001908152602001600020600601600081548110612d7157612d7061434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110612daf57612dae61434c565b5b602002602001015160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60008381526020019081526020016000206001015491508080612e1190614504565b915050612bc7565b50819250505090565b60025481565b82600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001019081612ed291906149a8565b5080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002019081612f2291906149a8565b50505050565b60035481565b600a600080548152602001908152602001600020600401600081548110612f5857612f5761434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe790614ac6565b60405180910390fd5b6001600a600080548152602001908152602001600020600301541461301457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc600a600080548152602001908152602001600020600101549081150290604051600060405180830381858888f19350505050158015613071573d6000803e3d6000fd5b50600a6000805481526020019081526020016000206000808201600090556001820160009055600282016000905560038201600090556004820160006130b79190613756565b6005820160006130c79190613777565b6006820160006130d79190613756565b6007820160006130e79190613777565b50506130f460005461340e565b6000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146131b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ac906147dc565b60405180910390fd5b60028114806131c45750600381145b6131cd57600080fd5b6002600a600084815260200190815260200160002060030154148061320857506003600a600084815260200190815260200160002060030154145b61321157600080fd5b80600a600084815260200190815260200160002060030181905550817fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a25050565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b80600b6000838152602001908152602001600020600001819055506000600b600083815260200190815260200160002060010181905550600b600080815260200190815260200160002060020154600b60008381526020019081526020016000206002018190555080600b6000600b60008081526020019081526020016000206002015481526020019081526020016000206001018190555080600b6000808152602001908152602001600020600201819055506001600081548092919061335690614504565b919050555050565b60008060005b8380549050811015613400578381815481106133835761338261434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036133ed578060019250925050613409565b80806133f890614504565b915050613364565b50600080915091505b915091565b600b600082815260200190815260200160002060010154600b6000600b600085815260200190815260200160002060020154815260200190815260200160002060010181905550600b600082815260200190815260200160002060020154600b6000600b600085815260200190815260200160002060010154815260200190815260200160002060020181905550600160008154809291906134af90614ae6565b9190505550600b600082815260200190815260200160002060008082016000905560018201600090556002820160009055505050565b600080838054905067ffffffffffffffff8111156135065761350561406d565b5b6040519080825280602002602001820160405280156135345781602001602082028036833780820191505090505b50905060005b8480549050811015613584578381815481106135595761355861434c565b5b90600052602060002001548361356f9190614624565b9250808061357c90614504565b91505061353a565b5060005b848054905081101561365c578268056bc75e2d631000008583815481106135b2576135b161434c565b5b90600052602060002001546135c7919061444a565b6135d191906144d3565b8282815181106135e4576135e361434c565b5b60200260200101818152505068056bc75e2d6310000082828151811061360d5761360c61434c565b5b602002602001015188613620919061444a565b61362a91906144d3565b82828151811061363d5761363c61434c565b5b602002602001018181525050808061365490614504565b915050613588565b5084816000815181106136725761367161434c565b5b602002602001018181516136869190614624565b9150818152505060005b848054905081101561374d578481815481106136af576136ae61434c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8383815181106137065761370561434c565b5b60200260200101519081150290604051600060405180830381858888f19350505050158015613739573d6000803e3d6000fd5b50808061374590614504565b915050613690565b50505050505050565b50805460008255906000526020600020908101906137749190613863565b50565b50805460008255906000526020600020908101906137959190613863565b50565b60405180610100016040528060008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060600160405280600060ff16815260200160608152602001606081525090565b6040518060c0016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b5b8082111561387c576000816000905550600101613864565b5090565b6000819050919050565b61389381613880565b82525050565b60006020820190506138ae600083018461388a565b92915050565b6000604051905090565b600080fd5b600080fd5b6138d181613880565b81146138dc57600080fd5b50565b6000813590506138ee816138c8565b92915050565b60006020828403121561390a576139096138be565b5b6000613918848285016138df565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061394c82613921565b9050919050565b61395c81613941565b811461396757600080fd5b50565b60008135905061397981613953565b92915050565b600060208284031215613995576139946138be565b5b60006139a38482850161396a565b91505092915050565b6139b581613880565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139f081613941565b82525050565b6000613a0283836139e7565b60208301905092915050565b6000602082019050919050565b6000613a26826139bb565b613a3081856139c6565b9350613a3b836139d7565b8060005b83811015613a6c578151613a5388826139f6565b9750613a5e83613a0e565b925050600181019050613a3f565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000613ab183836139ac565b60208301905092915050565b6000602082019050919050565b6000613ad582613a79565b613adf8185613a84565b9350613aea83613a95565b8060005b83811015613b1b578151613b028882613aa5565b9750613b0d83613abd565b925050600181019050613aee565b5085935050505092915050565b600061010083016000830151613b4160008601826139ac565b506020830151613b5460208601826139ac565b506040830151613b6760408601826139ac565b506060830151613b7a60608601826139ac565b5060808301518482036080860152613b928282613a1b565b91505060a083015184820360a0860152613bac8282613aca565b91505060c083015184820360c0860152613bc68282613a1b565b91505060e083015184820360e0860152613be08282613aca565b9150508091505092915050565b60006020820190508181036000830152613c078184613b28565b905092915050565b600060ff82169050919050565b613c2581613c0f565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c65578082015181840152602081019050613c4a565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c8d82613c2b565b613c978185613c36565b9350613ca7818560208601613c47565b613cb081613c71565b840191505092915050565b6000606083016000830151613cd36000860182613c1c565b5060208301518482036020860152613ceb8282613c82565b91505060408301518482036040860152613d058282613c82565b9150508091505092915050565b60006020820190508181036000830152613d2c8184613cbb565b905092915050565b613d3d81613941565b82525050565b6000602082019050613d586000830184613d34565b92915050565b600082825260208201905092915050565b6000613d7a826139bb565b613d848185613d5e565b9350613d8f836139d7565b8060005b83811015613dc0578151613da788826139f6565b9750613db283613a0e565b925050600181019050613d93565b5085935050505092915050565b600082825260208201905092915050565b6000613de982613a79565b613df38185613dcd565b9350613dfe83613a95565b8060005b83811015613e2f578151613e168882613aa5565b9750613e2183613abd565b925050600181019050613e02565b5085935050505092915050565b600060a082019050613e51600083018861388a565b8181036020830152613e638187613d6f565b90508181036040830152613e778186613dde565b90508181036060830152613e8b8185613d6f565b90508181036080830152613e9f8184613dde565b90509695505050505050565b60008060408385031215613ec257613ec16138be565b5b6000613ed0858286016138df565b9250506020613ee18582860161396a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60c082016000820151613f2d60008501826139ac565b506020820151613f4060208501826139ac565b506040820151613f5360408501826139ac565b506060820151613f6660608501826139ac565b506080820151613f7960808501826139e7565b5060a0820151613f8c60a08501826139e7565b50505050565b6000613f9e8383613f17565b60c08301905092915050565b6000602082019050919050565b6000613fc282613eeb565b613fcc8185613ef6565b9350613fd783613f07565b8060005b83811015614008578151613fef8882613f92565b9750613ffa83613faa565b925050600181019050613fdb565b5085935050505092915050565b6000602082019050818103600083015261402f8184613fb7565b905092915050565b61404081613c0f565b811461404b57600080fd5b50565b60008135905061405d81614037565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6140a582613c71565b810181811067ffffffffffffffff821117156140c4576140c361406d565b5b80604052505050565b60006140d76138b4565b90506140e3828261409c565b919050565b600067ffffffffffffffff8211156141035761410261406d565b5b61410c82613c71565b9050602081019050919050565b82818337600083830152505050565b600061413b614136846140e8565b6140cd565b90508281526020810184848401111561415757614156614068565b5b614162848285614119565b509392505050565b600082601f83011261417f5761417e614063565b5b813561418f848260208601614128565b91505092915050565b6000806000606084860312156141b1576141b06138be565b5b60006141bf8682870161404e565b935050602084013567ffffffffffffffff8111156141e0576141df6138c3565b5b6141ec8682870161416a565b925050604084013567ffffffffffffffff81111561420d5761420c6138c3565b5b6142198682870161416a565b9150509250925092565b6000806040838503121561423a576142396138be565b5b6000614248858286016138df565b9250506020614259858286016138df565b9150509250929050565b600082825260208201905092915050565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b60006142aa600883614263565b91506142b582614274565b602082019050919050565b600060208201905081810360008301526142d98161429d565b9050919050565b7f6c6f772062657400000000000000000000000000000000000000000000000000600082015250565b6000614316600783614263565b9150614321826142e0565b602082019050919050565b6000602082019050818103600083015261434581614309565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f616c726561647920616464656400000000000000000000000000000000000000600082015250565b60006143b1600d83614263565b91506143bc8261437b565b602082019050919050565b600060208201905081810360008301526143e0816143a4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061442182613880565b915061442c83613880565b9250828203905081811115614444576144436143e7565b5b92915050565b600061445582613880565b915061446083613880565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614499576144986143e7565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144de82613880565b91506144e983613880565b9250826144f9576144f86144a4565b5b828204905092915050565b600061450f82613880565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614541576145406143e7565b5b600182019050919050565b7f62657473206172652070726f6869626974656400000000000000000000000000600082015250565b6000614582601383614263565b915061458d8261454c565b602082019050919050565b600060208201905081810360008301526145b181614575565b9050919050565b7f4d616e7920757365727320776974682062657473000000000000000000000000600082015250565b60006145ee601483614263565b91506145f9826145b8565b602082019050919050565b6000602082019050818103600083015261461d816145e1565b9050919050565b600061462f82613880565b915061463a83613880565b9250828201905080821115614652576146516143e7565b5b92915050565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b600061468e600a83614263565b915061469982614658565b602082019050919050565b600060208201905081810360008301526146bd81614681565b9050919050565b7f6261642073746174757300000000000000000000000000000000000000000000600082015250565b60006146fa600a83614263565b9150614705826146c4565b602082019050919050565b60006020820190508181036000830152614729816146ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061477757607f821691505b60208210810361478a57614789614730565b5b50919050565b7f4f6e6c79206f7261636c65000000000000000000000000000000000000000000600082015250565b60006147c6600b83614263565b91506147d182614790565b602082019050919050565b600060208201905081810360008301526147f5816147b9565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261485e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614821565b6148688683614821565b95508019841693508086168417925050509392505050565b6000819050919050565b60006148a56148a061489b84613880565b614880565b613880565b9050919050565b6000819050919050565b6148bf8361488a565b6148d36148cb826148ac565b84845461482e565b825550505050565b600090565b6148e86148db565b6148f38184846148b6565b505050565b5b818110156149175761490c6000826148e0565b6001810190506148f9565b5050565b601f82111561495c5761492d816147fc565b61493684614811565b81016020851015614945578190505b61495961495185614811565b8301826148f8565b50505b505050565b600082821c905092915050565b600061497f60001984600802614961565b1980831691505092915050565b6000614998838361496e565b9150826002028217905092915050565b6149b182613c2b565b67ffffffffffffffff8111156149ca576149c961406d565b5b6149d4825461475f565b6149df82828561491b565b600060209050601f831160018114614a125760008415614a00578287015190505b614a0a858261498c565b865550614a72565b601f198416614a20866147fc565b60005b82811015614a4857848901518255600182019150602085019450602081019050614a23565b86831015614a655784890151614a61601f89168261496e565b8355505b6001600288020188555050505b505050505050565b7f6e6f7420796f7572206265740000000000000000000000000000000000000000600082015250565b6000614ab0600c83614263565b9150614abb82614a7a565b602082019050919050565b60006020820190508181036000830152614adf81614aa3565b9050919050565b6000614af182613880565b915060008203614b0457614b036143e7565b5b60018203905091905056fea2646970667358221220ef4270f4d8627f0152aa0978974822e5461758126f9511624641bc80b5be50f164736f6c63430008100033