Address Details
contract

0x137de6B9F0b91f4eDE8ffecEC41cD91341ae5472

Contract Name
TestOracle
Creator
0xd3c2ab–ffc681 at 0x8c2d2a–ad6144
Balance
0 CELO ( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
9 Transactions
Transfers
0 Transfers
Gas Used
403,890
Last Balance Update
18139861
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
TestOracle




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




Optimization runs
800
EVM Version
london




Verified at
2023-05-19T20:05:57.948057Z

contracts/test/TestOracle.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../access/Governable.sol";

// modified to operate without chainlink oracle
contract TestOracle is Governable {
    uint256 public constant PRICE_BASE = 10**4;

    bool public isSpreadEnabled;

    mapping(uint256 => uint256) public prices;
    mapping(uint256 => uint256) public lastUpdatedTimes;
    mapping(uint256 => uint256) public maxPriceDiffs;
    mapping(uint256 => uint256) public spreads;
    mapping(address => bool) public keepers;

    event SetPrice(uint256 productId, uint256 price, uint256 timestamp);
    event SetMaxPriceDiff(uint256 productId, uint256 maxPriceDiff);
    event SetSpread(uint256 productId, uint256 spread);
    event SetIsSpreadEnabled(bool isSpreadEnabled);
    event SetKeeper(address keeper, bool isActive);

    modifier onlyKeeper() {
        require(keepers[msg.sender], "Oracle: !keeper");
        _;
    }

    function getPrice(uint256 productId) public view returns (uint256) {
        (uint256 price, ) = getPriceAndSource(productId);
        return price;
    }

    function getPrices(uint256[] memory productIds) external view returns (uint256[] memory _prices) {
        _prices = new uint256[](productIds.length);

        for (uint256 i = 0; i < productIds.length; ++i) {
            _prices[i] = getPrice(productIds[i]);
        }
    }

    function getPrice(uint256 productId, bool isLong) external view returns (uint256) {
        (uint256 price, bool isChainlink) = getPriceAndSource(productId);

        if (isSpreadEnabled || isChainlink) {
            return
                isLong
                    ? (price * (10**4 + spreads[productId])) / 10**4
                    : (price * (10**4 - spreads[productId])) / 10**4;
        }
        return price;
    }

    function getPriceAndSource(uint256 productId) public view returns (uint256, bool) {
        return (prices[productId], false);
    }

    function setPrices(uint256[] memory productIds, uint256[] memory _prices) external onlyKeeper {
        require(productIds.length == _prices.length, "Oracle: lengths doesn't match");

        for (uint256 i = 0; i < productIds.length; ++i) {
            uint256 productId = productIds[i];
            prices[productId] = _prices[i];
            lastUpdatedTimes[productId] = block.timestamp;

            emit SetPrice(productId, _prices[i], block.timestamp);
        }
    }

    function setMaxPriceDiff(uint256 productId, uint256 _maxPriceDiff) external onlyGov {
        require(_maxPriceDiff <= 5e16, "Oracle: maxPriceDiff cannot be larger than 5%");
        maxPriceDiffs[productId] = _maxPriceDiff;
        emit SetMaxPriceDiff(productId, _maxPriceDiff);
    }

    function setSpread(uint256 productId, uint256 _spread) external onlyGov {
        require(_spread <= 500, "Oracle: spread cannot be larger than 5%");
        spreads[productId] = _spread;
        emit SetSpread(productId, _spread);
    }

    function setIsSpreadEnabled(bool _isSpreadEnabled) external onlyGov {
        isSpreadEnabled = _isSpreadEnabled;
        emit SetIsSpreadEnabled(_isSpreadEnabled);
    }

    function setKeeper(address _keeper, bool _isActive) external onlyGov {
        keepers[_keeper] = _isActive;
        emit SetKeeper(_keeper, _isActive);
    }
}
        

/contracts/access/Governable.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

contract Governable {
    address public gov;

    event SetGov(address indexed newGov);

    constructor() {
        gov = msg.sender;
    }

    modifier onlyGov() {
        require(msg.sender == gov, "Governable: forbidden");
        _;
    }

    function setGov(address _gov) external onlyGov {
        gov = _gov;
        emit SetGov(_gov);
    }
}
          

Contract ABI

[{"type":"event","name":"SetGov","inputs":[{"type":"address","name":"newGov","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"SetIsSpreadEnabled","inputs":[{"type":"bool","name":"isSpreadEnabled","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"SetKeeper","inputs":[{"type":"address","name":"keeper","internalType":"address","indexed":false},{"type":"bool","name":"isActive","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"SetMaxPriceDiff","inputs":[{"type":"uint256","name":"productId","internalType":"uint256","indexed":false},{"type":"uint256","name":"maxPriceDiff","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"SetPrice","inputs":[{"type":"uint256","name":"productId","internalType":"uint256","indexed":false},{"type":"uint256","name":"price","internalType":"uint256","indexed":false},{"type":"uint256","name":"timestamp","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"SetSpread","inputs":[{"type":"uint256","name":"productId","internalType":"uint256","indexed":false},{"type":"uint256","name":"spread","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"PRICE_BASE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getPrice","inputs":[{"type":"uint256","name":"productId","internalType":"uint256"},{"type":"bool","name":"isLong","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getPrice","inputs":[{"type":"uint256","name":"productId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"},{"type":"bool","name":"","internalType":"bool"}],"name":"getPriceAndSource","inputs":[{"type":"uint256","name":"productId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"_prices","internalType":"uint256[]"}],"name":"getPrices","inputs":[{"type":"uint256[]","name":"productIds","internalType":"uint256[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"gov","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isSpreadEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"keepers","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lastUpdatedTimes","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxPriceDiffs","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"prices","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setGov","inputs":[{"type":"address","name":"_gov","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsSpreadEnabled","inputs":[{"type":"bool","name":"_isSpreadEnabled","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setKeeper","inputs":[{"type":"address","name":"_keeper","internalType":"address"},{"type":"bool","name":"_isActive","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxPriceDiff","inputs":[{"type":"uint256","name":"productId","internalType":"uint256"},{"type":"uint256","name":"_maxPriceDiff","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPrices","inputs":[{"type":"uint256[]","name":"productIds","internalType":"uint256[]"},{"type":"uint256[]","name":"_prices","internalType":"uint256[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSpread","inputs":[{"type":"uint256","name":"productId","internalType":"uint256"},{"type":"uint256","name":"_spread","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"spreads","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]}]
              

Contract Creation Code

0x608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610e0e806100326000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80636c0ae9b5116100b2578063ce98dfa811610081578063d05eaae011610066578063d05eaae014610303578063d1b9e85314610316578063e75722301461032957600080fd5b8063ce98dfa8146102dd578063cfad57a2146102f057600080fd5b80636c0ae9b5146102755780637f407edf1461028a578063800c5e481461029d578063bc31c1c1146102bd57600080fd5b80633bbd64bc1161010957806347a153a3116100ee57806347a153a31461022e5780635705b61a1461024e578063695d41841461026157600080fd5b80633bbd64bc146101c657806345b8fa05146101f957600080fd5b806309cb3a4e1461013b57806312d43a51146101645780631ddd1bf61461018f57806336555e72146101a6575b600080fd5b61014e610149366004610b4d565b610349565b60405161015b9190610b8a565b60405180910390f35b600054610177906001600160a01b031681565b6040516001600160a01b03909116815260200161015b565b61019861271081565b60405190815260200161015b565b6101986101b4366004610bce565b60046020526000908152604090205481565b6101e96101d4366004610c03565b60056020526000908152604090205460ff1681565b604051901515815260200161015b565b610219610207366004610bce565b60009081526001602052604081205491565b6040805192835290151560208301520161015b565b61019861023c366004610bce565b60026020526000908152604090205481565b61019861025c366004610c35565b6103ff565b6000546101e990600160a01b900460ff1681565b610288610283366004610c61565b6104b8565b005b610288610298366004610c61565b6105dc565b6101986102ab366004610bce565b60036020526000908152604090205481565b6101986102cb366004610bce565b60016020526000908152604090205481565b6102886102eb366004610c83565b6106ee565b6102886102fe366004610c03565b6107b3565b610288610311366004610c9e565b610865565b610288610324366004610d02565b6109ee565b610198610337366004610bce565b60009081526001602052604090205490565b6060815167ffffffffffffffff81111561036557610365610a9c565b60405190808252806020026020018201604052801561038e578160200160208202803683370190505b50905060005b82518110156103f9576103cc8382815181106103b2576103b2610d2c565b602002602001015160009081526001602052604090205490565b8282815181106103de576103de610d2c565b60209081029190910101526103f281610d58565b9050610394565b50919050565b600080600061041a8560009081526001602052604081205491565b6000549193509150600160a01b900460ff16806104345750805b156104ae5783610474576000858152600460205260409020546127109061045b9082610d71565b6104659084610d84565b61046f9190610da3565b6104a5565b600085815260046020526040902054612710906104919082610dc5565b61049b9084610d84565b6104a59190610da3565b925050506104b2565b5090505b92915050565b6000546001600160a01b0316331461050f5760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b60448201526064015b60405180910390fd5b66b1a2bc2ec5000081111561058c5760405162461bcd60e51b815260206004820152602d60248201527f4f7261636c653a206d61785072696365446966662063616e6e6f74206265206c60448201527f6172676572207468616e203525000000000000000000000000000000000000006064820152608401610506565b60008281526003602090815260409182902083905581518481529081018390527fa2bfaeac9d464808726006272464bcd5d90b5922466632757f85f58fdb538a4e91015b60405180910390a15050565b6000546001600160a01b0316331461062e5760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b6101f48111156106a65760405162461bcd60e51b815260206004820152602760248201527f4f7261636c653a207370726561642063616e6e6f74206265206c61726765722060448201527f7468616e203525000000000000000000000000000000000000000000000000006064820152608401610506565b60008281526004602090815260409182902083905581518481529081018390527ff09238c8e8b870a1ac7b920c3ad3e033ccc75fde2797283a9e0025da6c648f7d91016105d0565b6000546001600160a01b031633146107405760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b60008054821515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f9f87edd10ae0439b2c06b316a18efaecad03746a22c125bcf12abe4b300265d1906107a890831515815260200190565b60405180910390a150565b6000546001600160a01b031633146108055760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316908117825560405190917f91a8c1cc2d4a3bb60738481947a00cbb9899c822916694cf8bb1d68172fdcd5491a250565b3360009081526005602052604090205460ff166108c45760405162461bcd60e51b815260206004820152600f60248201527f4f7261636c653a20216b656570657200000000000000000000000000000000006044820152606401610506565b80518251146109155760405162461bcd60e51b815260206004820152601d60248201527f4f7261636c653a206c656e6774687320646f65736e2774206d617463680000006044820152606401610506565b60005b82518110156109e957600083828151811061093557610935610d2c565b6020026020010151905082828151811061095157610951610d2c565b6020908102919091018101516000838152600183526040808220929092556002909252902042905582517f18e75bb8c091a6448c12a2023f055b2714c151b941a91df8b9938788769ffe139082908590859081106109b1576109b1610d2c565b6020908102919091018101516040805193845291830152429082015260600160405180910390a1506109e281610d58565b9050610918565b505050565b6000546001600160a01b03163314610a405760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b6001600160a01b038216600081815260056020908152604091829020805460ff19168515159081179091558251938452908301527f8c2ff6748f99f65f4ebf8a1e973a289bad216c4d5b20fda1940d9e01118ae42a91016105d0565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610ac357600080fd5b8135602067ffffffffffffffff80831115610ae057610ae0610a9c565b8260051b604051601f19603f83011681018181108482111715610b0557610b05610a9c565b604052938452858101830193838101925087851115610b2357600080fd5b83870191505b84821015610b4257813583529183019190830190610b29565b979650505050505050565b600060208284031215610b5f57600080fd5b813567ffffffffffffffff811115610b7657600080fd5b610b8284828501610ab2565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610bc257835183529284019291840191600101610ba6565b50909695505050505050565b600060208284031215610be057600080fd5b5035919050565b80356001600160a01b0381168114610bfe57600080fd5b919050565b600060208284031215610c1557600080fd5b610c1e82610be7565b9392505050565b80358015158114610bfe57600080fd5b60008060408385031215610c4857600080fd5b82359150610c5860208401610c25565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b600060208284031215610c9557600080fd5b610c1e82610c25565b60008060408385031215610cb157600080fd5b823567ffffffffffffffff80821115610cc957600080fd5b610cd586838701610ab2565b93506020850135915080821115610ceb57600080fd5b50610cf885828601610ab2565b9150509250929050565b60008060408385031215610d1557600080fd5b610d1e83610be7565b9150610c5860208401610c25565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610d6a57610d6a610d42565b5060010190565b818103818111156104b2576104b2610d42565b6000816000190483118215151615610d9e57610d9e610d42565b500290565b600082610dc057634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156104b2576104b2610d4256fea2646970667358221220d8c071632926d76dc886415e8f1cb67ffd742c77c7711462d61d0fb9e293eee364736f6c63430008100033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101365760003560e01c80636c0ae9b5116100b2578063ce98dfa811610081578063d05eaae011610066578063d05eaae014610303578063d1b9e85314610316578063e75722301461032957600080fd5b8063ce98dfa8146102dd578063cfad57a2146102f057600080fd5b80636c0ae9b5146102755780637f407edf1461028a578063800c5e481461029d578063bc31c1c1146102bd57600080fd5b80633bbd64bc1161010957806347a153a3116100ee57806347a153a31461022e5780635705b61a1461024e578063695d41841461026157600080fd5b80633bbd64bc146101c657806345b8fa05146101f957600080fd5b806309cb3a4e1461013b57806312d43a51146101645780631ddd1bf61461018f57806336555e72146101a6575b600080fd5b61014e610149366004610b4d565b610349565b60405161015b9190610b8a565b60405180910390f35b600054610177906001600160a01b031681565b6040516001600160a01b03909116815260200161015b565b61019861271081565b60405190815260200161015b565b6101986101b4366004610bce565b60046020526000908152604090205481565b6101e96101d4366004610c03565b60056020526000908152604090205460ff1681565b604051901515815260200161015b565b610219610207366004610bce565b60009081526001602052604081205491565b6040805192835290151560208301520161015b565b61019861023c366004610bce565b60026020526000908152604090205481565b61019861025c366004610c35565b6103ff565b6000546101e990600160a01b900460ff1681565b610288610283366004610c61565b6104b8565b005b610288610298366004610c61565b6105dc565b6101986102ab366004610bce565b60036020526000908152604090205481565b6101986102cb366004610bce565b60016020526000908152604090205481565b6102886102eb366004610c83565b6106ee565b6102886102fe366004610c03565b6107b3565b610288610311366004610c9e565b610865565b610288610324366004610d02565b6109ee565b610198610337366004610bce565b60009081526001602052604090205490565b6060815167ffffffffffffffff81111561036557610365610a9c565b60405190808252806020026020018201604052801561038e578160200160208202803683370190505b50905060005b82518110156103f9576103cc8382815181106103b2576103b2610d2c565b602002602001015160009081526001602052604090205490565b8282815181106103de576103de610d2c565b60209081029190910101526103f281610d58565b9050610394565b50919050565b600080600061041a8560009081526001602052604081205491565b6000549193509150600160a01b900460ff16806104345750805b156104ae5783610474576000858152600460205260409020546127109061045b9082610d71565b6104659084610d84565b61046f9190610da3565b6104a5565b600085815260046020526040902054612710906104919082610dc5565b61049b9084610d84565b6104a59190610da3565b925050506104b2565b5090505b92915050565b6000546001600160a01b0316331461050f5760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b60448201526064015b60405180910390fd5b66b1a2bc2ec5000081111561058c5760405162461bcd60e51b815260206004820152602d60248201527f4f7261636c653a206d61785072696365446966662063616e6e6f74206265206c60448201527f6172676572207468616e203525000000000000000000000000000000000000006064820152608401610506565b60008281526003602090815260409182902083905581518481529081018390527fa2bfaeac9d464808726006272464bcd5d90b5922466632757f85f58fdb538a4e91015b60405180910390a15050565b6000546001600160a01b0316331461062e5760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b6101f48111156106a65760405162461bcd60e51b815260206004820152602760248201527f4f7261636c653a207370726561642063616e6e6f74206265206c61726765722060448201527f7468616e203525000000000000000000000000000000000000000000000000006064820152608401610506565b60008281526004602090815260409182902083905581518481529081018390527ff09238c8e8b870a1ac7b920c3ad3e033ccc75fde2797283a9e0025da6c648f7d91016105d0565b6000546001600160a01b031633146107405760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b60008054821515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f9f87edd10ae0439b2c06b316a18efaecad03746a22c125bcf12abe4b300265d1906107a890831515815260200190565b60405180910390a150565b6000546001600160a01b031633146108055760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316908117825560405190917f91a8c1cc2d4a3bb60738481947a00cbb9899c822916694cf8bb1d68172fdcd5491a250565b3360009081526005602052604090205460ff166108c45760405162461bcd60e51b815260206004820152600f60248201527f4f7261636c653a20216b656570657200000000000000000000000000000000006044820152606401610506565b80518251146109155760405162461bcd60e51b815260206004820152601d60248201527f4f7261636c653a206c656e6774687320646f65736e2774206d617463680000006044820152606401610506565b60005b82518110156109e957600083828151811061093557610935610d2c565b6020026020010151905082828151811061095157610951610d2c565b6020908102919091018101516000838152600183526040808220929092556002909252902042905582517f18e75bb8c091a6448c12a2023f055b2714c151b941a91df8b9938788769ffe139082908590859081106109b1576109b1610d2c565b6020908102919091018101516040805193845291830152429082015260600160405180910390a1506109e281610d58565b9050610918565b505050565b6000546001600160a01b03163314610a405760405162461bcd60e51b815260206004820152601560248201527423b7bb32b93730b136329d103337b93134b23232b760591b6044820152606401610506565b6001600160a01b038216600081815260056020908152604091829020805460ff19168515159081179091558251938452908301527f8c2ff6748f99f65f4ebf8a1e973a289bad216c4d5b20fda1940d9e01118ae42a91016105d0565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610ac357600080fd5b8135602067ffffffffffffffff80831115610ae057610ae0610a9c565b8260051b604051601f19603f83011681018181108482111715610b0557610b05610a9c565b604052938452858101830193838101925087851115610b2357600080fd5b83870191505b84821015610b4257813583529183019190830190610b29565b979650505050505050565b600060208284031215610b5f57600080fd5b813567ffffffffffffffff811115610b7657600080fd5b610b8284828501610ab2565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610bc257835183529284019291840191600101610ba6565b50909695505050505050565b600060208284031215610be057600080fd5b5035919050565b80356001600160a01b0381168114610bfe57600080fd5b919050565b600060208284031215610c1557600080fd5b610c1e82610be7565b9392505050565b80358015158114610bfe57600080fd5b60008060408385031215610c4857600080fd5b82359150610c5860208401610c25565b90509250929050565b60008060408385031215610c7457600080fd5b50508035926020909101359150565b600060208284031215610c9557600080fd5b610c1e82610c25565b60008060408385031215610cb157600080fd5b823567ffffffffffffffff80821115610cc957600080fd5b610cd586838701610ab2565b93506020850135915080821115610ceb57600080fd5b50610cf885828601610ab2565b9150509250929050565b60008060408385031215610d1557600080fd5b610d1e83610be7565b9150610c5860208401610c25565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201610d6a57610d6a610d42565b5060010190565b818103818111156104b2576104b2610d42565b6000816000190483118215151615610d9e57610d9e610d42565b500290565b600082610dc057634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156104b2576104b2610d4256fea2646970667358221220d8c071632926d76dc886415e8f1cb67ffd742c77c7711462d61d0fb9e293eee364736f6c63430008100033