From 467215b12411e6c2db8221fbabc897e5d1f06dea Mon Sep 17 00:00:00 2001 From: Soumalya Paul Date: Fri, 2 Feb 2024 20:47:49 +0530 Subject: [PATCH] Added Phygital and major changes --- contracts/accessmaster/AccessMaster.sol | 16 +- contracts/eternalsoul/EternalSoul.sol | 3 +- contracts/eturnumpass/EternumPass.sol | 2 +- contracts/fusionseries/FusionSeries.sol | 23 +- contracts/instagen/InstaGen.sol | 36 +- contracts/phygital/Phygital.sol | 121 ++-- contracts/phygital/PhygitalA.sol | 383 +++++------ contracts/signatureseries/SignatureSeries.sol | 101 +-- contracts/tradehub/TradeHub.sol | 120 ++-- hardhat.config.ts | 16 +- package.json | 5 - scripts/launch/README.md | 10 +- scripts/launch/launch.json | 6 +- test/08-phygital.test.ts | 256 ++++++++ test/09-phygitalA.test.ts | 181 ++++++ typechain-types/Phygital.ts | 166 +++-- typechain-types/PhygitalA.ts | 615 ++++++++++-------- .../factories/AccessMaster__factory.ts | 2 +- .../factories/EternalSoul__factory.ts | 2 +- .../factories/EternumPass__factory.ts | 2 +- .../factories/FusionSeries__factory.ts | 2 +- .../factories/InstaGen__factory.ts | 2 +- .../factories/PhygitalA__factory.ts | 389 ++++++----- .../factories/Phygital__factory.ts | 110 +++- .../factories/SignatureSeries__factory.ts | 2 +- .../factories/TradeHub__factory.ts | 2 +- 26 files changed, 1621 insertions(+), 952 deletions(-) create mode 100644 test/08-phygital.test.ts create mode 100644 test/09-phygitalA.test.ts diff --git a/contracts/accessmaster/AccessMaster.sol b/contracts/accessmaster/AccessMaster.sol index 64b9573..1499e7f 100644 --- a/contracts/accessmaster/AccessMaster.sol +++ b/contracts/accessmaster/AccessMaster.sol @@ -12,8 +12,8 @@ import "@openzeppelin/contracts/access/AccessControlEnumerable.sol"; contract AccessMaster is AccessControlEnumerable { string public name = "My AccessMaster"; string public symbol = "AM"; - uint8 public version = 1; - + uint8 public constant version = 1; + address private payoutAddress; bytes32 public constant FLOW_ADMIN_ROLE = keccak256("FLOW_ADMIN_ROLE"); @@ -69,17 +69,19 @@ contract AccessMaster is AccessControlEnumerable { /// @dev Sets the payout address. /// @param _payoutAddress The new address to receive funds from multiple contracts. /// @notice Only the admin can set the payout address. - function setPayoutAddress(address _payoutAddress) external { - require(hasRole(FLOW_ADMIN_ROLE,_msgSender()),"AccessMaster: User is not authorized"); + function setPayoutAddress(address _payoutAddress) external { + require( + hasRole(FLOW_ADMIN_ROLE, _msgSender()), + "AccessMaster: User is not authorized" + ); payoutAddress = _payoutAddress; } - /** + /** * @notice Retrieves the payout address defined by the admin. * @return The payout address for receiving funds. */ function getPayoutAddress() external view returns (address) { - return payoutAddress; + return payoutAddress; } - } diff --git a/contracts/eternalsoul/EternalSoul.sol b/contracts/eternalsoul/EternalSoul.sol index 1e81018..14c29e9 100644 --- a/contracts/eternalsoul/EternalSoul.sol +++ b/contracts/eternalsoul/EternalSoul.sol @@ -26,7 +26,8 @@ import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; contract EternalSoul is Context, ERC721Enumerable, EIP712 { uint256 public nftPrice; uint256 private Counter; - uint8 public version = 1; + + uint8 public constant version = 1; address public accessMasterAddress; diff --git a/contracts/eturnumpass/EternumPass.sol b/contracts/eturnumpass/EternumPass.sol index 322f6e0..bf7b392 100644 --- a/contracts/eturnumpass/EternumPass.sol +++ b/contracts/eturnumpass/EternumPass.sol @@ -41,7 +41,7 @@ contract EternumPass is Context, IERC4907, IERC5643, ERC2981, ERC721Enumerable { uint256 public subscriptionPricePerMonth; uint256 public tokenIdCounter; - uint8 public version = 1; + uint8 public constant version = 1; string public baseURI; diff --git a/contracts/fusionseries/FusionSeries.sol b/contracts/fusionseries/FusionSeries.sol index d907aa6..1c49174 100644 --- a/contracts/fusionseries/FusionSeries.sol +++ b/contracts/fusionseries/FusionSeries.sol @@ -23,7 +23,6 @@ import "../accessmaster/interfaces/IAccessMaster.sol"; // collection URI override contract FusionSeries is Context, ERC1155Supply { - string public name; string public symbol; @@ -31,8 +30,7 @@ contract FusionSeries is Context, ERC1155Supply { address public accessMasterAddress; uint256 public Counter; - uint8 public version = 1; - + uint8 public constant version = 1; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; @@ -60,7 +58,10 @@ contract FusionSeries is Context, ERC1155Supply { uint256 indexed amount, string metadataUri ); - event FusionSeriesAssetDestroyed(uint indexed tokenId, address ownerOrApproved); + event FusionSeriesAssetDestroyed( + uint indexed tokenId, + address ownerOrApproved + ); // tradeHub should be there /** @@ -104,7 +105,12 @@ contract FusionSeries is Context, ERC1155Supply { _mint(_msgSender(), currentTokenID, amount, data); _tokenURIs[currentTokenID] = _uri; setApprovalForAll(tradeHub, true); - emit FusionSeriesAssetCreated(currentTokenID, _msgSender(), amount,_uri); + emit FusionSeriesAssetCreated( + currentTokenID, + _msgSender(), + amount, + _uri + ); return currentTokenID; } @@ -130,7 +136,12 @@ contract FusionSeries is Context, ERC1155Supply { _mint(creator, currentTokenID, amount, data); _tokenURIs[currentTokenID] = _uri; setApprovalForAll(tradeHub, true); - emit FusionSeriesAssetCreated(currentTokenID, _msgSender(), amount,_uri); + emit FusionSeriesAssetCreated( + currentTokenID, + _msgSender(), + amount, + _uri + ); return currentTokenID; } diff --git a/contracts/instagen/InstaGen.sol b/contracts/instagen/InstaGen.sol index 50a841b..b0eaad6 100644 --- a/contracts/instagen/InstaGen.sol +++ b/contracts/instagen/InstaGen.sol @@ -14,7 +14,7 @@ import "../accessmaster/interfaces/IAccessMaster.sol"; * - token ID and URI autogeneration * - ability for holders to give for (4) * - royalty is present for admin (2981) - * + * * * This contract uses {AccessControl} to lock permissioned functions using the * different roles - head to its documentation for details. @@ -23,7 +23,7 @@ import "../accessmaster/interfaces/IAccessMaster.sol"; * roles, as well as the default admin role, which will let it grant both creator * and pauser roles to other accounts. */ -contract InstaGen is Context,IERC4907,ERC2981, ERC721A, ERC721ABurnable { +contract InstaGen is Context, IERC4907, ERC2981, ERC721A, ERC721ABurnable { // Set Constants for Interface ID and Roles bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; @@ -34,7 +34,7 @@ contract InstaGen is Context,IERC4907,ERC2981, ERC721A, ERC721ABurnable { uint256 public immutable maxSupply; - uint8 public version = 1; + uint8 public constant version = 1; // PUBLIC && PRIVATE VARIABLES string private baseURI; @@ -55,7 +55,7 @@ contract InstaGen is Context,IERC4907,ERC2981, ERC721A, ERC721ABurnable { // INTERFACES IACCESSMASTER flowRoles; - modifier onlyOperator() { + modifier onlyOperator() { require( flowRoles.isOperator(_msgSender()), "EternumPass: Unauthorized!" @@ -68,10 +68,15 @@ contract InstaGen is Context,IERC4907,ERC2981, ERC721A, ERC721ABurnable { uint256 quantity, address indexed creator ); - + event InstaGenAssetDestroyed(uint indexed tokenId, address ownerOrApproved); - event FundTransferred(address sender,address reciepient , uint256 tokenId,uint256 amount); + event FundTransferred( + address sender, + address reciepient, + uint256 tokenId, + uint256 amount + ); event RentalInfo( uint256 tokenId, @@ -100,12 +105,12 @@ contract InstaGen is Context,IERC4907,ERC2981, ERC721A, ERC721ABurnable { maxSupply = _maxSupply; baseURI = _baseUri; // SET DEFAULT ROYALTY - _setDefaultRoyalty(_msgSender(), uint96(_royaltyBPS)); + _setDefaultRoyalty(_msgSender(), uint96(_royaltyBPS)); accessMasterAddress = accessControlAddress; } - /// @dev transferring funds + /// @dev transferring funds function _transferFunds( address sender, address recipient, @@ -113,14 +118,11 @@ contract InstaGen is Context,IERC4907,ERC2981, ERC721A, ERC721ABurnable { uint256 amount ) private { // get the balance of the contract - (bool callSuccess, ) = payable(recipient).call{ - value: amount - }(""); + (bool callSuccess, ) = payable(recipient).call{value: amount}(""); require(callSuccess, "InstaGen: Transfer failed"); - emit FundTransferred(sender,recipient,tokenId,amount); + emit FundTransferred(sender, recipient, tokenId, amount); } - function setSalePrice(uint256 _salePrice) external onlyOperator { salePrice = _salePrice; } @@ -148,7 +150,7 @@ contract InstaGen is Context,IERC4907,ERC2981, ERC721A, ERC721ABurnable { setApprovalForAll(tradeHub, true); address recipient = flowRoles.getPayoutAddress(); - _transferFunds(_msgSender(),recipient,quantity,msg.value); + _transferFunds(_msgSender(), recipient, quantity, msg.value); emit InstaGenAssetCreated(_totalMinted(), quantity, _msgSender()); return (prevQuantity, quantity); @@ -224,9 +226,7 @@ contract InstaGen is Context,IERC4907,ERC2981, ERC721A, ERC721ABurnable { /// time cannot be less than 1 hour or more than 6 months /// @param _timeInHours is in hours , Ex- 1,2,3 function rent(uint256 _tokenId, uint256 _timeInHours) external payable { - require(_exists(_tokenId), - "SignatureSeries: Invalide Token Id" - ); + require(_exists(_tokenId), "SignatureSeries: Invalide Token Id"); require( rentables[_tokenId].isRentable, "InstaGen: Not available for rent" @@ -244,7 +244,7 @@ contract InstaGen is Context,IERC4907,ERC2981, ERC721A, ERC721ABurnable { uint256 amount = amountRequired(_tokenId, _timeInHours); require(msg.value >= amount, "InstaGen: Insufficient Funds"); - _transferFunds(_msgSender(),ownerOf(_tokenId),_tokenId,msg.value); + _transferFunds(_msgSender(), ownerOf(_tokenId), _tokenId, msg.value); RentableItems storage info = rentables[_tokenId]; info.user = _msgSender(); diff --git a/contracts/phygital/Phygital.sol b/contracts/phygital/Phygital.sol index 0cffe2c..602628e 100644 --- a/contracts/phygital/Phygital.sol +++ b/contracts/phygital/Phygital.sol @@ -4,27 +4,17 @@ pragma solidity ^0.8.17; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; import "@openzeppelin/contracts/token/common/ERC2981.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../common/interface/IERC4907.sol"; import "../accessmaster/interfaces/IAccessMaster.sol"; +/// @title PhygitalA: A Smart Contract for Managing Phygital Assets with ERC721 Tokens /** - * @dev {ERC721} token, including: - * - * - ability for holders to burn (destroy) their tokens - * - a creator role that allows for token minting (creation) - * - a pauser role that allows to stop all token transfers - * - token ID and URI autogeneration - * - ability for holders to give for rent (4907) - * - royalty is present (2981) - * - Lazy Minting is present - * - * - * This contract uses {AccessControl} to lock permissioned functions using the - * different roles - head to its documentation for details. - * - * The account that deploys the contract will be granted the creator and pauser - * roles, as well as the default admin role, which will let it grant both creator - * and pauser roles to other accounts. + * @dev This contract manages phygital (physical + digital) assets through NFTs. It supports minting, renting, + * and tracking of physical items' digital representations. The contract integrates ERC721A for efficient + * batch minting, ERC2981 for royalty management, and IERC4907 for rentable NFTs. + * It allows for the immutable registration of NFC IDs to NFTs, ensuring a unique and verifiable link + * between a physical item and its digital counterpart. */ contract Phygital is Context, ERC721Enumerable, ERC2981, IERC4907 { // Set Constants for Interface ID and Roles @@ -35,15 +25,24 @@ contract Phygital is Context, ERC721Enumerable, ERC2981, IERC4907 { address public tradeHub; address public accessMasterAddress; - uint8 public version = 1; + uint8 public constant version = 1; uint256 public nftPrice; uint256 public Counter; - struct LazyNFTVoucher { - uint256 price; - string uri; - bytes signature; + enum ItemStatus { + DESTROYED, + DAMAGED, + REPAIRED, + RESALE, + INUSE, + ORIGINAL + } + + struct PhygitalInfo { + uint256 registerTime; + bytes phygitalId; + ItemStatus status; } struct RentableItems { @@ -59,9 +58,9 @@ contract Phygital is Context, ERC721Enumerable, ERC2981, IERC4907 { // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; - mapping(uint256 => bytes16) public phygitalID; + mapping(uint256 => PhygitalInfo) public phygitalAssets; - mapping(bytes16 => bool) public assetStatus; + mapping(bytes => bool) public phygitalIdCheck; IACCESSMASTER flowRoles; @@ -86,7 +85,9 @@ contract Phygital is Context, ERC721Enumerable, ERC2981, IERC4907 { address indexed creator, string metaDataURI ); + event PhygitalAssetDestroyed(uint indexed tokenId, address ownerOrApproved); + event RentalInfo( uint256 tokenId, bool isRentable, @@ -101,6 +102,8 @@ contract Phygital is Context, ERC721Enumerable, ERC2981, IERC4907 { uint256 amount ); + event UpdateAssetStatus(address user, ItemStatus assetStatus, uint256 time); + /** * @dev Grants `FLOW_ADMIN_ROLE`, `FLOW_CREATOR_ROLE` and `FLOW_OPERATOR_ROLE` to the * account that deploys the contract. @@ -112,28 +115,23 @@ contract Phygital is Context, ERC721Enumerable, ERC2981, IERC4907 { string memory name, string memory symbol, address tradeHubAddress, - address flowContract + address accessControlAddress ) ERC721(name, symbol) { - flowRoles = IACCESSMASTER(flowContract); + flowRoles = IACCESSMASTER(accessControlAddress); tradeHub = tradeHubAddress; - accessMasterAddress = flowContract; + accessMasterAddress = accessControlAddress; } - /// @notice transferring funds - function _transferFunds( - address sender, - address recipient, - uint256 tokenId, - uint256 amount - ) private { - // get the balance of the contract - (bool callSuccess, ) = payable(recipient).call{value: amount}(""); - require(callSuccess, "Phygital: Transfer failed"); - emit FundTransferred(sender, recipient, tokenId, amount); - } + function setItemStatus(uint256 tokenId, ItemStatus _status) external { + require( + flowRoles.isOperator(_msgSender()) || + ownerOf(tokenId) == _msgSender(), + "Phygital: User is not authorised!" + ); + + phygitalAssets[tokenId].status = _status; - function setNftPrice(uint256 _nftPrice) external onlyOperator { - nftPrice = _nftPrice; + emit UpdateAssetStatus(_msgSender(), _status, block.timestamp); } /** @@ -150,16 +148,24 @@ contract Phygital is Context, ERC721Enumerable, ERC2981, IERC4907 { function createAsset( string memory metadataURI, uint96 royaltyPercentBasisPoint, - bytes16 _phygitalID + bytes memory _phygitalID ) public onlyCreator returns (uint256) { // We cannot just use balanceOf to create the new tokenId because tokens // can be burned (destroyed), so we need a separate counter. - require(!assetStatus[_phygitalID], "Phygital: NFC Tag is already stored!"); + require( + !phygitalIdCheck[_phygitalID], + "Phygital: Tag is already stored!" + ); // instead of phygital use NFC Counter++; uint256 currentTokenID = Counter; - phygitalID[currentTokenID] = _phygitalID; - assetStatus[_phygitalID] = true; + phygitalAssets[currentTokenID] = PhygitalInfo( + block.timestamp, + _phygitalID, + ItemStatus.ORIGINAL + ); + + phygitalIdCheck[_phygitalID] = true; _safeMint(_msgSender(), currentTokenID); _setTokenURI(currentTokenID, metadataURI); @@ -195,16 +201,24 @@ contract Phygital is Context, ERC721Enumerable, ERC2981, IERC4907 { address creator, string memory metadataURI, uint96 royaltyPercentBasisPoint, - bytes16 _phygitalID + bytes memory phygitalID ) public onlyOperator returns (uint256) { // We cannot just use balanceOf to create the new tokenId because tokens // can be burned (destroyed), so we need a separate counter. - require(!assetStatus[_phygitalID], "Phygital: NFC Tag is already stored!"); + require( + !phygitalIdCheck[phygitalID], + "Phygital: NFC Tag is already stored!" + ); Counter++; uint256 currentTokenID = Counter; - phygitalID[currentTokenID] = _phygitalID; - assetStatus[_phygitalID] = true; + phygitalAssets[currentTokenID] = PhygitalInfo( + block.timestamp, + phygitalID, + ItemStatus.ORIGINAL + ); + + phygitalIdCheck[phygitalID] = true; _safeMint(creator, currentTokenID); _setTokenURI(currentTokenID, metadataURI); @@ -232,9 +246,14 @@ contract Phygital is Context, ERC721Enumerable, ERC2981, IERC4907 { */ function destroyAsset(uint256 tokenId) public { require( - _isApprovedOrOwner(_msgSender(), tokenId), + ownerOf(tokenId) == _msgSender() || + flowRoles.isOperator(_msgSender()), "Phygital: Caller is not token owner or approved" ); + require( + phygitalAssets[tokenId].status == ItemStatus.DESTROYED, + "Phygital: Cannot be burned" + ); _burn(tokenId); emit PhygitalAssetDestroyed(tokenId, _msgSender()); _resetTokenRoyalty(tokenId); @@ -369,8 +388,6 @@ contract Phygital is Context, ERC721Enumerable, ERC2981, IERC4907 { return _tokenURI; } - - function _beforeTokenTransfer( address from, address to, diff --git a/contracts/phygital/PhygitalA.sol b/contracts/phygital/PhygitalA.sol index b6267c2..d4c9597 100644 --- a/contracts/phygital/PhygitalA.sol +++ b/contracts/phygital/PhygitalA.sol @@ -1,52 +1,47 @@ // SPDX-License-Identifier: SEE LICENSE IN LICENSE pragma solidity ^0.8.17; +import "../accessmaster/interfaces/IAccessMaster.sol"; import "@openzeppelin/contracts/utils/Context.sol"; import "../common/ERC721A/extensions/ERC721ABurnable.sol"; -import "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol"; -import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/common/ERC2981.sol"; -import "../common/interface/IERC4907.sol"; -import "../accessmaster/interfaces/IAccessMaster.sol"; +/// @title PhygitalA: A Smart Contract for Managing Phygital Assets with ERC721 Tokens /** - * @dev {ERC721A} token, including: - * - * - ability for holders to burn (destroy) their tokens - * - a creator role that allows for token minting (creation) - * - token ID and URI autogeneration - * - ability for holders to give for (4) - * - royalty is present for admin (2981) - * - * - * This contract uses {AccessControl} to lock permissioned functions using the - * different roles - head to its documentation for details. - * - * The account that deploys the contract will be granted the creator and pauser - * roles, as well as the default admin role, which will let it grant both creator - * and pauser roles to other accounts. + * @dev This contract manages phygital (physical + digital) assets through NFTs. It supports minting, renting, + * and tracking of physical items' digital representations. The contract integrates ERC721A for efficient + * batch minting, ERC2981 for royalty management, and IERC4907 for rentable NFTs. + * It allows for the immutable registration of NFC IDs to NFTs, ensuring a unique and verifiable link + * between a physical item and its digital counterpart. */ -contract PhygitalA is - Context, - IERC4907, - ERC2981, - ERC721A, - ERC721ABurnable -{ +contract PhygitalA is Context, ERC2981, ERC721A, ERC721ABurnable { // Set Constants for Interface ID and Roles bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; - // IMMUTABLE VARIABLES + // IMMUTABLE & CONSTANTS VARIABLES uint256 public immutable maxSupply; - - uint8 public version = 1; + uint8 public constant version = 1; // PUBLIC && PRIVATE VARIABLES string private baseURI; + uint256 public nftPrice; + uint16 public maxMint; /// @notice how many can be minted by a wallet address public tradeHub; address public accessMasterAddress; - string public SIGNING_DOMAIN; - string public SIGNATURE_VERSION; + enum ItemStatus { + DESTROYED, + DAMAGED, + REPAIRED, + RESALE, + REGISTERED + } + + struct PhygitalInfo { + uint256 registerTime; ///< Timestamp of registration + bytes phygitalId; ///< Unique NFC ID of the physical item + ItemStatus status; ///< Current status of the item + } struct RentableItems { bool isRentable; //to check is renting is available @@ -55,35 +50,36 @@ contract PhygitalA is uint256 hourlyRate; // amountPerHour } - struct LazyNFTVoucher { - string uri; - bytes signature; - } - ///@dev storing the data of the user who are renting the NFT mapping(uint256 => RentableItems) public rentables; mapping(uint256 => string) private _tokenURIs; - mapping(uint256 => bytes16) public phygitalID; + ///< Mapping of tokenIds to their phygital information + mapping(uint256 => PhygitalInfo) public phygitalAssets; + + /// @notice Ensures NFC IDs are unique + mapping(bytes => bool) public phygitalIdCheck; - mapping(bytes16 => bool) public assetStatus; + mapping(address => uint) public userBalance; // INTERFACES IACCESSMASTER flowRoles; + IERC20 token; - modifier onlyCreator() { + modifier onlyOperator() { require( - flowRoles.isCreator(_msgSender()), + flowRoles.isOperator(_msgSender()), "PhygitalA: User is not authorized" ); _; } - modifier onlyOperator() { + modifier onlyOwnerOrOperator(uint256 tokenId) { require( - flowRoles.isOperator(_msgSender()), - "PhygitalA: User is not authorized " + ownerOf(tokenId) == _msgSender() || + flowRoles.isOperator(_msgSender()), + "PhygitalA:User is not owner or operator" ); _; } @@ -99,206 +95,228 @@ contract PhygitalA is address ownerOrApproved ); - event FundTransferred( - address sender, - address reciepient, + event FundTransferred(address sender, address reciepient, uint256 amount); + + event UpdateAssetStatus( + address user, uint256 tokenId, - uint256 amount + ItemStatus assetStatus, + uint256 time ); - event RentalInfo( + event UpdateAssetPrice(address user, uint256 updatedPrice); + + event UpdateAssetMaxMint(address user, uint256 updatedMaxMint); + + event AssetRegistered( + address user, uint256 tokenId, - bool isRentable, - uint256 price, - address indexed renter + bytes uuid, + uint256 time ); + /** + * contract details :- + * 1. NFT PRICE. + * 2. maxsupply for the token. + * 3.roytaltybps points. + * 4. maxmint , is the number tokens can be minted + * by any wallet address . + * + */ constructor( string memory name, string memory symbol, address tradeHubAddress, address accessControlAddress, - uint256 _maxSupply, - uint256 _royaltyBPS, + address _tokenAddr, + uint256[] memory contractDetails, string memory _baseUri - ) ERC721A(name, symbol) { + ) ERC721A(name, symbol) { flowRoles = IACCESSMASTER(accessControlAddress); tradeHub = tradeHubAddress; - maxSupply = _maxSupply; - baseURI = _baseUri; + token = IERC20(_tokenAddr); + require(contractDetails.length == 4, "Phygital: Invalid Input!"); + nftPrice = contractDetails[0]; + maxSupply = contractDetails[1]; // SET DEFAULT ROYALTY - _setDefaultRoyalty(_msgSender(), uint96(_royaltyBPS)); + _setDefaultRoyalty(_msgSender(), uint96(contractDetails[2])); + maxMint = uint16(contractDetails[3]); + baseURI = _baseUri; accessMasterAddress = accessControlAddress; } - /// @dev transferring funds - function _transferFunds( - address sender, - address recipient, + function setNFTPrice(uint256 amount) external onlyOperator { + nftPrice = amount; + emit UpdateAssetPrice(_msgSender(), amount); + } + + function setMaxMint(uint16 amount) external onlyOperator { + maxMint = amount; + emit UpdateAssetMaxMint(_msgSender(), amount); + } + + function setItemStatus( uint256 tokenId, - uint256 amount + ItemStatus _status + ) external onlyOwnerOrOperator(tokenId) { + phygitalAssets[tokenId].status = _status; + emit UpdateAssetStatus(_msgSender(), tokenId, _status, block.timestamp); + } + + /// @dev to transfer ERC20/Native token Funds from one address to another + function _transferFunds( + address from, + address to, + uint256 amount, + bool isNative ) private { - // get the balance of the contract - (bool callSuccess, ) = payable(recipient).call{value: amount}(""); - require(callSuccess, "PhygitalA: Transfer failed"); - emit FundTransferred(sender, recipient, tokenId, amount); + bool success; + if (isNative) { + (success, ) = payable(to).call{value: amount}(""); + } else { + success = token.transferFrom(from, to, amount); + } + + require(success, "PhygitalA: Transfer failed"); + + emit FundTransferred(from, to, amount); } - function mint( - uint256 quantity - ) external payable onlyCreator returns (uint256, uint256) { + /** + * @dev Mints `quantity` number of new NFTs to the caller's address, provided they meet the specified requirements. + * The function checks if the caller has enough ERC20 tokens for the minting fee, adheres to the max mint limit per wallet, + * and if the total minted NFTs would not exceed the contract's max supply. It transfers the minting fee from the caller + * to the payout address and mints the NFTs. The function then sets the trade hub as an approved operator for these NFTs, + * facilitating further trading operations. Emits a `PhygitalAAssetCreated` event upon successful minting. + * + * Requirements: + * - The caller must have a sufficient balance of ERC20 tokens to cover the minting fee. + * - The quantity to mint must not exceed the per-wallet `maxMint` limit unless `maxMint` is set to 0 (indicating no limit). + * - The total supply of minted NFTs after the operation must not exceed the `maxSupply` of the contract. + * + * @param quantity The number of NFTs the caller wishes to mint. + * @return prevQuantity The total number of NFTs minted in the contract before this minting operation. + * @return newQuantity The number of NFTs successfully minted in this operation. + */ + function mint(uint256 quantity) external returns (uint256, uint256) { uint prevQuantity = _totalMinted(); + uint256 afterMintReserves = userBalance[_msgSender()] + quantity; + + if (maxMint != 0) { + require( + afterMintReserves <= maxMint, + "PhygitalA: Quantity should be less than max mint" + ); + } require( _totalMinted() + quantity <= maxSupply, "PhygitalA: Exceeding max token supply!" ); + require( + token.balanceOf(_msgSender()) >= calculateRequiredPrice(quantity), + "PhygitalA: Not enough funds!" + ); + address recipient = flowRoles.getPayoutAddress(); + + _transferFunds( + _msgSender(), + recipient, + calculateRequiredPrice(quantity), + false + ); + + userBalance[_msgSender()] += quantity; _safeMint(_msgSender(), quantity); setApprovalForAll(tradeHub, true); - address recipient = flowRoles.getPayoutAddress(); - _transferFunds(_msgSender(), recipient, quantity, msg.value); - emit PhygitalAAssetCreated(_totalMinted(), quantity, _msgSender()); return (prevQuantity, quantity); } - /// @dev to register Asset NFC ID TO the tokenID - function registerAssetId( - uint256 tokenId, - bytes16 _phygitalID - ) external onlyOperator { - require(!assetStatus[_phygitalID],"PhygitalA: It's already registerd"); - phygitalID[tokenId] = _phygitalID; - assetStatus[_phygitalID] = true; - } - - /** - * @notice Burns `tokenId`. See {ERC721-_burn}. - * - * @dev Requirements: - * - * - The caller must own `tokenId` or be an approved operator. - */ - function burnNFT(uint256 tokenId) external { - address owner = ownerOf(tokenId); + /// @dev Allows operators to mint tokens on behalf of other addresses. + function delegateMint( + address reciever, + uint256 quantity + ) external onlyOperator returns (uint256, uint256) { + uint prevQuantity = _totalMinted(); require( - ownerOf(tokenId) == _msgSender() || - isApprovedForAll(owner, _msgSender()), - "PhygitalA: Not Owner Or Approved" + quantity <= maxMint || maxMint == 0, + "Phygital: Quantity should be less than max mint" ); - _burn(tokenId, true); - _resetTokenRoyalty(tokenId); - emit PhygitalAAssetDestroyed(tokenId, _msgSender()); - } + require( + _totalMinted() + quantity <= maxSupply, + "PhygitalA: Exceeding max token supply!" + ); + + _safeMint(reciever, quantity); + setApprovalForAll(tradeHub, true); - + emit PhygitalAAssetCreated(_totalMinted(), quantity, _msgSender()); + return (prevQuantity, quantity); + } - /********************* ERC4907 *********************************/ - /// @dev Owner can set the rental status of the token - function setRentInfo( + /// @dev Registers a phygital asset's NFC ID to a tokenId. + function registerAssetId( uint256 tokenId, - bool isRentable, - uint256 pricePerHour - ) external { - address owner = ownerOf(tokenId); + bytes memory _phygitalID + ) external onlyOwnerOrOperator(tokenId) { + require(_exists(tokenId), "PhygitalA: Token does not exists"); require( - owner == _msgSender() || isApprovedForAll(owner, _msgSender()), - "PhygitalA: Caller is not token owner " + !phygitalIdCheck[_phygitalID] && + phygitalAssets[tokenId].registerTime == 0, + "PhygitalA: NFC Tag is already stored!" ); - rentables[tokenId].isRentable = isRentable; - rentables[tokenId].hourlyRate = pricePerHour; - emit RentalInfo( - tokenId, - isRentable, - rentables[tokenId].hourlyRate, - _msgSender() + + phygitalAssets[tokenId] = PhygitalInfo( + block.timestamp, + _phygitalID, + ItemStatus.REGISTERED ); - } - /// @notice set the user and expires of an NFT - /// @dev This function is used to gift a person by the owner, - /// The zero address indicates there is no user - /// Throws if `tokenId` is not valid NFT - /// @param user The new user of the NFT - /// @param expires UNIX timestamp, The new user could use the NFT before expires + phygitalIdCheck[_phygitalID] = true; - function setUser(uint256 tokenId, address user, uint64 expires) public { - address owner = ownerOf(tokenId); - require( - owner == _msgSender() || isApprovedForAll(owner, _msgSender()), - "PhygitalA: Caller is not token owner " - ); - require( - userOf(tokenId) == address(0), - "PhygitalA: Item is already subscribed" + emit AssetRegistered( + _msgSender(), + tokenId, + _phygitalID, + block.timestamp ); - RentableItems storage info = rentables[tokenId]; - info.user = user; - info.expires = uint64(block.timestamp + expires); - emit UpdateUser(tokenId, user, expires); } - /// @notice to use for renting an item - /// @dev The zero address indicates there is no user - /// Throws if `tokenId` is not valid NFT, - /// time cannot be less than 1 hour or more than 6 months - /// @param _timeInHours is in hours , Ex- 1,2,3 - function rent(uint256 _tokenId, uint256 _timeInHours) external payable { - require(_exists(_tokenId), "SignatureSeries: Invalide Token Id"); - require( - rentables[_tokenId].isRentable, - "PhygitalA: Not available for rent" - ); + /** + * @notice Burns `tokenId`. See {ERC721-_burn}. + * + * @dev Requirements: + * + * - The caller must own `tokenId` or be an approved operator. + */ + function burnAsset(uint256 tokenId) external { require( - userOf(_tokenId) == address(0), - "PhygitalA: NFT Already Subscribed" + ownerOf(tokenId) == _msgSender(), + "PhygitalA: User is not asset owner!" ); - require(_timeInHours > 0, "PhygitalA: Time can't be less than 1 hour"); require( - _timeInHours <= 4320, - "PhygitalA: Time can't be more than 6 months" + phygitalAssets[tokenId].status == ItemStatus.DESTROYED, + "PhygitalA: Asset cannot be destroyed!" ); - - uint256 amount = amountRequired(_tokenId, _timeInHours); - - require(msg.value >= amount, "PhygitalA: Insufficient Funds"); - _transferFunds(_msgSender(), ownerOf(_tokenId), _tokenId, msg.value); - - RentableItems storage info = rentables[_tokenId]; - info.user = _msgSender(); - info.expires = uint64(block.timestamp + (_timeInHours * 3600)); - emit UpdateUser(_tokenId, _msgSender(), info.expires); + _burn(tokenId, true); + _resetTokenRoyalty(tokenId); + emit PhygitalAAssetDestroyed(tokenId, _msgSender()); } /** Getter Functions **/ - /// @dev IERC4907 implementation - function userOf(uint256 tokenId) public view returns (address) { - if (rentables[tokenId].expires >= block.timestamp) { - return rentables[tokenId].user; - } else { - return address(0); - } - } - - /// @dev IERC4907 implementation - function userExpires(uint256 tokenId) public view returns (uint256) { - return rentables[tokenId].expires; - } + ///////////////////////////////////////////////// - /// @notice to calculate the amount of money required - /// to rent an item for a certain time - function amountRequired( - uint256 tokenId, - uint256 time + function calculateRequiredPrice( + uint256 quantity ) public view returns (uint256 amount) { - amount = rentables[tokenId].hourlyRate * time; + amount = quantity * nftPrice; } - ///////////////////////////////////////////////// - function _baseURI() internal view override returns (string memory) { return baseURI; } @@ -307,7 +325,6 @@ contract PhygitalA is bytes4 interfaceId ) public view virtual override(IERC721A, ERC721A, ERC2981) returns (bool) { if (interfaceId == _INTERFACE_ID_ERC2981) return true; - if (interfaceId == type(IERC4907).interfaceId) return true; return super.supportsInterface(interfaceId); } } diff --git a/contracts/signatureseries/SignatureSeries.sol b/contracts/signatureseries/SignatureSeries.sol index 5eef2ca..5724082 100644 --- a/contracts/signatureseries/SignatureSeries.sol +++ b/contracts/signatureseries/SignatureSeries.sol @@ -8,6 +8,7 @@ import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "@openzeppelin/contracts/token/common/ERC2981.sol"; import "../common/interface/IERC4907.sol"; import "../accessmaster/interfaces/IAccessMaster.sol"; + /** * @dev {ERC721} token, including: * @@ -18,7 +19,7 @@ import "../accessmaster/interfaces/IAccessMaster.sol"; * - ability for holders to give for rent (4907) * - royalty is present (2981) * - Lazy Minting is present - * + * * * This contract uses {AccessControl} to lock permissioned functions using the * different roles - head to its documentation for details. @@ -27,11 +28,16 @@ import "../accessmaster/interfaces/IAccessMaster.sol"; * roles, as well as the default admin role, which will let it grant both creator * and pauser roles to other accounts. */ -contract SignatureSeries is Context, ERC721Enumerable, ERC2981, IERC4907 , EIP712 { - - // Set Constants for Interface ID and Roles +contract SignatureSeries is + Context, + ERC721Enumerable, + ERC2981, + IERC4907, + EIP712 +{ + // Set Constants for Interface ID and Roles bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; - + using Strings for uint256; address public tradeHub; @@ -39,12 +45,11 @@ contract SignatureSeries is Context, ERC721Enumerable, ERC2981, IERC4907 , EIP71 string public SIGNING_DOMAIN; string public SIGNATURE_VERSION; - uint8 public version = 1; + uint8 public constant version = 1; uint256 public nftPrice; uint256 public Counter; - struct LazyNFTVoucher { uint256 price; string uri; @@ -87,7 +92,10 @@ contract SignatureSeries is Context, ERC721Enumerable, ERC2981, IERC4907 , EIP71 address indexed creator, string metaDataURI ); - event SignatureSeriesAssetDestroyed(uint indexed tokenId, address ownerOrApproved); + event SignatureSeriesAssetDestroyed( + uint indexed tokenId, + address ownerOrApproved + ); event RentalInfo( uint256 tokenId, bool isRentable, @@ -95,9 +103,12 @@ contract SignatureSeries is Context, ERC721Enumerable, ERC2981, IERC4907 , EIP71 address indexed renter ); - event FundTransferred(address sender,address reciepient , uint256 tokenId,uint256 amount); - - + event FundTransferred( + address sender, + address reciepient, + uint256 tokenId, + uint256 amount + ); /** * @dev Grants `FLOW_ADMIN_ROLE`, `FLOW_CREATOR_ROLE` and `FLOW_OPERATOR_ROLE` to the @@ -114,7 +125,7 @@ contract SignatureSeries is Context, ERC721Enumerable, ERC2981, IERC4907 , EIP71 uint256 _nftPrice, address tradeHubAddress, address flowContract - ) ERC721(name, symbol) EIP712(domain,_version){ + ) ERC721(name, symbol) EIP712(domain, _version) { flowRoles = IACCESSMASTER(flowContract); tradeHub = tradeHubAddress; accessMasterAddress = flowContract; @@ -124,7 +135,7 @@ contract SignatureSeries is Context, ERC721Enumerable, ERC2981, IERC4907 , EIP71 nftPrice = _nftPrice; } - /// @notice transferring funds + /// @notice transferring funds function _transferFunds( address sender, address recipient, @@ -132,14 +143,11 @@ contract SignatureSeries is Context, ERC721Enumerable, ERC2981, IERC4907 , EIP71 uint256 amount ) private { // get the balance of the contract - (bool callSuccess, ) = payable(recipient).call{ - value: amount - }(""); + (bool callSuccess, ) = payable(recipient).call{value: amount}(""); require(callSuccess, "SignatureSeries: Transfer failed"); - emit FundTransferred(sender,recipient,tokenId,amount); + emit FundTransferred(sender, recipient, tokenId, amount); } - function setNftPrice(uint256 _nftPrice) external onlyOperator { nftPrice = _nftPrice; } @@ -178,7 +186,11 @@ contract SignatureSeries is Context, ERC721Enumerable, ERC2981, IERC4907 , EIP71 // Approve tradeHub to transfer NFTs setApprovalForAll(tradeHub, true); - emit SignatureSeriesAssetCreated(currentTokenID, _msgSender(), metadataURI); + emit SignatureSeriesAssetCreated( + currentTokenID, + _msgSender(), + metadataURI + ); return currentTokenID; } @@ -221,11 +233,14 @@ contract SignatureSeries is Context, ERC721Enumerable, ERC2981, IERC4907 , EIP71 function lazyAssetCreation( LazyNFTVoucher calldata voucher, - uint96 royaltyPercentBasisPoint - ) external payable returns(uint256){ - require(flowRoles.isOperator(recover(voucher)),"SignatureSeries: Invalid Signature!"); - if(nftPrice != 0){ - require(msg.value >= voucher.price,"Not Enough ether sent."); + uint96 royaltyPercentBasisPoint + ) external payable returns (uint256) { + require( + flowRoles.isOperator(recover(voucher)), + "SignatureSeries: Invalid Signature!" + ); + if (nftPrice != 0) { + require(msg.value >= voucher.price, "Not Enough ether sent."); } Counter++; uint256 currentTokenID = Counter; @@ -243,10 +258,14 @@ contract SignatureSeries is Context, ERC721Enumerable, ERC2981, IERC4907 , EIP71 ); // send funds directly to payout Address address recipient = flowRoles.getPayoutAddress(); - _transferFunds(_msgSender(),recipient,currentTokenID,msg.value); + _transferFunds(_msgSender(), recipient, currentTokenID, msg.value); // Approve tradeHub to transfer NFTs setApprovalForAll(tradeHub, true); - emit SignatureSeriesAssetCreated(currentTokenID, _msgSender(), voucher.uri); + emit SignatureSeriesAssetCreated( + currentTokenID, + _msgSender(), + voucher.uri + ); return currentTokenID; } @@ -282,7 +301,6 @@ contract SignatureSeries is Context, ERC721Enumerable, ERC2981, IERC4907 , EIP71 _tokenURIs[tokenId] = _tokenURI; } - /********************* Rental(ERC4907) *********************************/ /// @notice Owner can set the NFT's rental price and status function setRentInfo( @@ -328,12 +346,10 @@ contract SignatureSeries is Context, ERC721Enumerable, ERC2981, IERC4907 , EIP71 * Throws if `tokenId` is not valid NFT, * time cannot be less than 1 hour or more than 6 months * @param _timeInHours is in hours , Ex- 1,2,3 - */ + */ function rent(uint256 _tokenId, uint256 _timeInHours) external payable { - require(_exists(_tokenId), - "SignatureSeries: Invalide Token Id" - ); + require(_exists(_tokenId), "SignatureSeries: Invalide Token Id"); require( rentables[_tokenId].isRentable, "SignatureSeries: Not available for rent" @@ -365,13 +381,19 @@ contract SignatureSeries is Context, ERC721Enumerable, ERC2981, IERC4907 , EIP71 /** Getter Functions **/ ///@dev To recover the singer who has signed - function recover(LazyNFTVoucher calldata voucher) public view returns (address) { - bytes32 digest = _hashTypedDataV4(keccak256(abi.encode( - keccak256("LazyNFTVoucher(uint256 price,string uri)"), - voucher.price, - keccak256(bytes(voucher.uri)) - ))); - address signer = ECDSA.recover(digest,voucher.signature); + function recover( + LazyNFTVoucher calldata voucher + ) public view returns (address) { + bytes32 digest = _hashTypedDataV4( + keccak256( + abi.encode( + keccak256("LazyNFTVoucher(uint256 price,string uri)"), + voucher.price, + keccak256(bytes(voucher.uri)) + ) + ) + ); + address signer = ECDSA.recover(digest, voucher.signature); return signer; } @@ -386,8 +408,9 @@ contract SignatureSeries is Context, ERC721Enumerable, ERC2981, IERC4907 , EIP71 return _tokenURI; } + /************* Rental(ERC4907) ***************** */ - /// @dev IERC4907 implementation + /// @dev IERC4907 implementation function userOf(uint256 tokenId) public view returns (address) { if (userExpires(tokenId) >= block.timestamp) { return rentables[tokenId].user; diff --git a/contracts/tradehub/TradeHub.sol b/contracts/tradehub/TradeHub.sol index aad2582..d6db9c0 100644 --- a/contracts/tradehub/TradeHub.sol +++ b/contracts/tradehub/TradeHub.sol @@ -33,7 +33,8 @@ contract TradeHub is address public accessMasterAddress; uint96 public platformFeeBasisPoint; - uint8 public version = 1; + + uint8 public constant version = 1; string public name; @@ -61,7 +62,8 @@ contract TradeHub is mapping(uint256 => MarketItem) public idToMarketItem; /// @dev Mappings to track NFTs listed for sale and their owners mapping(address => mapping(uint256 => uint256)) public marketItemERC721; - mapping(address => mapping(address => mapping(uint256 => uint256))) public marketItemERC1155; + mapping(address => mapping(address => mapping(uint256 => uint256))) + public marketItemERC1155; IACCESSMASTER flowRoles; @@ -118,7 +120,7 @@ contract TradeHub is string metaDataURI, address seller ); - + ///@notice Modifier to ensure that an item is currently for sale modifier onlyWhenItemIsForSale(uint256 itemId) { require( @@ -127,7 +129,7 @@ contract TradeHub is ); _; } - ///@notice Modifier to ensure that an item is currently in an auction + ///@notice Modifier to ensure that an item is currently in an auction modifier onlyWhenItemIsForAuction(uint256 itemId) { require( idToMarketItem[itemId].status == ItemStatus.AUCTION, @@ -170,9 +172,9 @@ contract TradeHub is _; } - /** + /** * @dev Constructor for TradeHub - * @param _platformFee The platform fee in basis points(10%) + * @param _platformFee The platform fee in basis points(10%) * @param _name The name of the marketplace * @param flowContract The address of the Access Master contract */ @@ -187,20 +189,17 @@ contract TradeHub is accessMasterAddress = flowContract; } - /** * @dev Change the platform fees along with the payout address * Allows only Admins to perform this operation * @param newPlatformFee The new platform fee in basis points */ - function changeFee( - uint96 newPlatformFee - ) public onlyOperator { + function changeFee(uint96 newPlatformFee) public onlyOperator { platformFeeBasisPoint = newPlatformFee; } /** - * @dev Check if the item already exists in Sale or Auction. + * @dev Check if the item already exists in Sale or Auction. * If it does, return the previous value ,if not generate new one * @param nftContract The address of the NFT contract * @param tokenId The ID of the NFT @@ -211,7 +210,9 @@ contract TradeHub is uint256 tokenId ) private returns (uint256 itemId) { if (checkERC1155(nftContract)) { - uint256 marketItemId = marketItemERC1155[_msgSender()][nftContract][tokenId]; + uint256 marketItemId = marketItemERC1155[_msgSender()][nftContract][ + tokenId + ]; if (marketItemId == 0) { Counter++; itemId = Counter; @@ -243,7 +244,7 @@ contract TradeHub is } } - /** + /** * @dev Get the metadata URI of an NFT * @param nftContract The address of the NFT contract * @param tokenId The ID of the NFT @@ -260,7 +261,7 @@ contract TradeHub is } } - /** + /** * @dev Transfer an NFT from one address to another * @param nftContract The address of the NFT contract * @param from The address of the sender @@ -349,26 +350,26 @@ contract TradeHub is } } - /** + /** * @notice List an NFT item for sale or auction * @dev It can only be called when the item is not currently up for auction or sale on the marketplace. * Or else Error will be thrown ItemExist() - * + * * Emits a "SaleStarted" or "AuctionStarted" event, depending on the listing type. * * Requirements: * - The price must be greater than 0 wei. * - For auction listings, the auction duration must be at least 1 minute (60 seconds). - * + * * @param nftContract The address of the NFT contract * @param tokenId The ID of the NFT * @param price The sale price per unit * @param quantity The quantity of NFTs to list (only relevant for ERC1155) * @param forAuction Whether the item is listed for auction * @param time The duration of the auction in seconds (only relevant for auctions) - * + * * @return itemId The unique item ID for the NFT - * + * */ function listItem( address nftContract, @@ -385,10 +386,7 @@ contract TradeHub is } if (forAuction == true) { - require( - time >= 60, - "TradeHub: Time cannot be less than 1 min" - ); + require(time >= 60, "TradeHub: Time cannot be less than 1 min"); } itemId = _getItemId(nftContract, tokenId); @@ -445,7 +443,6 @@ contract TradeHub is uint256 endAt = block.timestamp + time; uint256 startingBid = price * quantity; - idToMarketItem[itemId] = MarketItem( itemId, nftContract, @@ -508,11 +505,11 @@ contract TradeHub is } /** - * @notice Initiates the sale of an item automatically after an auction has ended. - * This function is called internally and transitions the item's status from 'AUCTION' to 'SALE'. - * - * @param itemId The unique identifier of the item with the ended auction. - */ + * @notice Initiates the sale of an item automatically after an auction has ended. + * This function is called internally and transitions the item's status from 'AUCTION' to 'SALE'. + * + * @param itemId The unique identifier of the item with the ended auction. + */ function _invokeStartSale(uint itemId) private { idToMarketItem[itemId].auctioneEndTime = 0; idToMarketItem[itemId].status = ItemStatus.SALE; @@ -590,14 +587,14 @@ contract TradeHub is ); } - /** + /** * @notice Starts an auction for an item, allowing users to place bids. * The duration of the auction is specified in seconds. - * + * * @dev The default "Auction price" is automatically set to the current "Sale Price" of the item - * in the time of conversion occurs. - * In the case of ERC1155 tokens, the entire quantity of tokens for that specific tokenId is made available for auction - * without requiring additional approval from the Seller + * in the time of conversion occurs. + * In the case of ERC1155 tokens, the entire quantity of tokens for that specific tokenId is made available for auction + * without requiring additional approval from the Seller * * @param itemId The unique identifier of the item to be auctioned. * @param time The duration of the auction in seconds. @@ -617,12 +614,10 @@ contract TradeHub is uint256 time ) external onlySeller(itemId) onlyWhenItemIsForSale(itemId) { address nftContract = idToMarketItem[itemId].nftContract; - require( - time >= 60, - "TradeHub: Timer cannot be less than One Minute" - ); + require(time >= 60, "TradeHub: Timer cannot be less than One Minute"); - uint256 price = idToMarketItem[itemId].price * idToMarketItem[itemId].supply; + uint256 price = idToMarketItem[itemId].price * + idToMarketItem[itemId].supply; uint256 endTime = block.timestamp + time; @@ -685,7 +680,7 @@ contract TradeHub is address nftContract = idToMarketItem[itemId].nftContract; uint256 tokenId = idToMarketItem[itemId].tokenId; string memory metadataURI = _getMetaDataURI(nftContract, tokenId); - + if (checkERC1155(nftContract)) { uint256 quantity = idToMarketItem[itemId].supply; _paymentSplit( @@ -717,16 +712,16 @@ contract TradeHub is _invokeStartSale(itemId); } } - + /** * @notice Allows the seller to accept the current highest bid, concluding the auction. * If no bidder exists, the item is automatically listed for sale. * Requirements: * - The caller must be the seller of the item. * - The item must be in Auction State. - * + * * @param itemId The unique identifier of the item with the ongoing auction. - */ + */ function acceptBidAndEndAuction( uint256 itemId ) external onlyWhenItemIsForAuction(itemId) onlySeller(itemId) { @@ -734,12 +729,12 @@ contract TradeHub is } /** - * @notice After the auction's time has run out, anybody can conclude the bidding by - * confirming the highest bid and bidder, and therefore transferring the NFT. - * If no bidder exists, the item is automatically listed for sale. - * - * @param itemId The unique identifier of the item with the ongoing auction. - */ + * @notice After the auction's time has run out, anybody can conclude the bidding by + * confirming the highest bid and bidder, and therefore transferring the NFT. + * If no bidder exists, the item is automatically listed for sale. + * + * @param itemId The unique identifier of the item with the ongoing auction. + */ function concludeAuction( uint256 itemId ) external onlyWhenItemIsForAuction(itemId) { @@ -757,7 +752,7 @@ contract TradeHub is * @param itemId The unique identifier of the item with the updated price. * @param pricePerUnit The new price per unit for the item. * @return The updated price per unit. - */ + */ function updatePrice( uint256 itemId, uint256 pricePerUnit @@ -788,11 +783,11 @@ contract TradeHub is } /** - * @notice Checks if a contract supports the ERC1155 interface. - * - * @param contractAddress The address of the contract to check. - * @return True if the contract supports ERC1155, otherwise false. - */ + * @notice Checks if a contract supports the ERC1155 interface. + * + * @param contractAddress The address of the contract to check. + * @return True if the contract supports ERC1155, otherwise false. + */ function checkERC1155(address contractAddress) private view returns (bool) { return IERC1155(contractAddress).supportsInterface(_INTERFACE_ID_ERC1155); @@ -803,18 +798,17 @@ contract TradeHub is * * @param contractAddress The address of the contract to check. * @return True if the contract supports ERC721, otherwise false. - */ + */ function checkERC721(address contractAddress) private view returns (bool) { - return - IERC721(contractAddress).supportsInterface(_INTERFACE_ID_ERC721); + return IERC721(contractAddress).supportsInterface(_INTERFACE_ID_ERC721); } /** - * @notice Overrides the supportsInterface function to include ERC2981 and ERC1155Receiver interfaces. - * - * @param interfaceId The interface ID to check. - * @return True if the contract supports the interface, otherwise false. - */ + * @notice Overrides the supportsInterface function to include ERC2981 and ERC1155Receiver interfaces. + * + * @param interfaceId The interface ID to check. + * @return True if the contract supports the interface, otherwise false. + */ function supportsInterface( bytes4 interfaceId ) public view virtual override(ERC2981, ERC1155Receiver) returns (bool) { diff --git a/hardhat.config.ts b/hardhat.config.ts index 0754a1d..4b9ff36 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -105,18 +105,18 @@ module.exports = { maticmum: { networkId: 80001, url: MATICMUM_RPC_URL, - // accounts: [PRIVATE_KEY], - accounts: { - mnemonic: MNEMONIC, - }, + accounts: [PRIVATE_KEY], + // accounts: { + // mnemonic: MNEMONIC, + // }, }, sepolia: { networkId: 11155111, url: SEPOLIA_RPC_URL, - // accounts: [PRIVATE_KEY], - accounts: { - mnemonic: MNEMONIC, - }, + accounts: [PRIVATE_KEY], + // accounts: { + // mnemonic: MNEMONIC, + // }, }, arbiGoerli: { networkId: 421613, diff --git a/package.json b/package.json index 00f23d2..bd6be0a 100644 --- a/package.json +++ b/package.json @@ -11,11 +11,6 @@ "deploy": "hardhat run scripts/deploy.ts --network $NETWORK", "compile": "hardhat compile", "launch": "hardhat run scripts/launch/launch.js", - "launchMumbai": "hardhat run scripts/launch/launch.js --network maticmum", - "launchSepolia": "hardhat run scripts/launch/launch.js --network sepolia", - "launchBNBTest": "hardhat run scripts/launch/launch.js --network bnbTest", - "launchFilCalibration": "hardhat run scripts/launch/launch.js --network filecoinCalibaration", - "launchLineaGoerli": "hardhat run scripts/launch/launch.js --network lineaGoerli", "contractAddress": "hardhat run scripts/contractAddress.js", "revokeRole": "hardhat run scripts/revokeRole.js" }, diff --git a/scripts/launch/README.md b/scripts/launch/README.md index bfada5e..aeba888 100644 --- a/scripts/launch/README.md +++ b/scripts/launch/README.md @@ -59,7 +59,7 @@ The JSON file should have the following format: "param2" : "NFB",// Symbol "param3" : "Voucher-Domain",// Domain "param4" : "1",// Version - "param5" : "1000000000000000000",// NFT Price for Lazy minting + "param5" : "1000000000000000000",// NFT Price for Lazy minting "param6" : "0x1B8683e1885B3ee93524cD58BC10Cf3Ed6af4298", // TradeHub Address "param7" : "0xEFf4209584cc2cE0409a5FA06175002537b055DC"// AccessMaster Address } @@ -131,11 +131,12 @@ The JSON file should have the following format: "constructorParams":{ "param1": "Alice Clothing", "param2" : "AC", - "param3" : "0x3A29EA5Ee6AB0326D72b55837dD9fD45b7a867Dd", - TradeHub + "param3" : "0x3A29EA5Ee6AB0326D72b55837dD9fD45b7a867Dd", - TradeHub "param4" : "0xc3fE1c3bCCE02d7A115Df2d4737137A15ff830F9" - AccessMaster } } ``` + `PhygitalA` ```shell @@ -146,14 +147,13 @@ The JSON file should have the following format: "param2" : "AC", "param3" : "0x3A29EA5Ee6AB0326D72b55837dD9fD45b7a867Dd" , //tradehub "param4" : "0xc3fE1c3bCCE02d7A115Df2d4737137A15ff830F9", // accessmaster - "param5" : 200, // maxsupply - "param6" : 300, // royalty + "param5" : "0xe6b8a5CF854791412c1f6EFC7CAf629f5Df1c747", // stablecoin address + "param6" : "["10000000000000000",100,300,6]", // stablecoin address "param7" : "www.xyz.com" } } ``` - `FlowSubscription Contract` ```shell diff --git a/scripts/launch/launch.json b/scripts/launch/launch.json index 6c31bad..5924cb3 100644 --- a/scripts/launch/launch.json +++ b/scripts/launch/launch.json @@ -4,9 +4,9 @@ "param1": "Alice Clothing", "param2" : "AC", "param3" : "0x3A29EA5Ee6AB0326D72b55837dD9fD45b7a867Dd" , - "param4" : "0xc3fE1c3bCCE02d7A115Df2d4737137A15ff830F9", - "param5" : 200, - "param6" : 300, + "param4" : "0xc3fE1c3bCCE02d7A115Df2d4737137A15ff830F9", + "param5" : "0xe6b8a5CF854791412c1f6EFC7CAf629f5Df1c747", + "param6" : ["10000000000000000",100,300,6], "param7" : "www.xyz.com" } } \ No newline at end of file diff --git a/test/08-phygital.test.ts b/test/08-phygital.test.ts new file mode 100644 index 0000000..2216b78 --- /dev/null +++ b/test/08-phygital.test.ts @@ -0,0 +1,256 @@ +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers" +import { expect, assert } from "chai" +import { ethers, network } from "hardhat" +import { Phygital, TradeHub, AccessMaster } from "../typechain-types" +import exp from "constants" +import { stat } from "fs" +import { log } from "console" + +describe("Phygital Contract", () => { + let [owner, creator, creator2, buyer, operator]: SignerWithAddress[] = + new Array(5) + before(async () => { + ;[owner, operator, creator, creator2, buyer] = await ethers.getSigners() + }) + + let accessmaster: AccessMaster + let phygital: Phygital + let tradehub: TradeHub + + const metadata = { + name: "StoreFront V1", + symbol: "SFv1", + baseTokenURI: "", + tradehubAddress: "", + } + + before(async () => { + const AccessMasterFactory = await ethers.getContractFactory( + "AccessMaster" + ) + accessmaster = await AccessMasterFactory.deploy(owner.address) + + let TradeHubFactory = await ethers.getContractFactory("TradeHub") + tradehub = await TradeHubFactory.deploy( + 300, + "MyMarketplace", + accessmaster.address + ) + + const PhygitalFactory = await ethers.getContractFactory("Phygital") + + phygital = await PhygitalFactory.deploy( + metadata.name, + metadata.symbol, + tradehub.address, + accessmaster.address + ) + }) + it("Should return the right name and symbol of the token once Phygital is deployed", async () => { + expect(await phygital.name()).to.equal(metadata.name) + expect(await phygital.symbol()).to.equal(metadata.symbol) + }) + + it("Should get the right owner", async () => { + const FLOW_ADMIN_ROLE = await accessmaster.FLOW_ADMIN_ROLE() + expect( + await accessmaster.getRoleMember(FLOW_ADMIN_ROLE, 0) + ).to.be.equal(owner.address) + }) + + // TODO TradeHub don't have owner property or function + + it("Should grant role", async () => { + const FLOW_OPERATOR_ROLE = await accessmaster.FLOW_OPERATOR_ROLE() + expect( + await accessmaster.grantRole(FLOW_OPERATOR_ROLE, operator.address) + ) + .to.emit(accessmaster, "RoleGranted") + .withArgs(FLOW_OPERATOR_ROLE, operator.address, owner.address) + + let hasRole = await accessmaster.hasRole( + FLOW_OPERATOR_ROLE, + operator.address + ) + expect(hasRole).to.be.true + + const FLOW_CREATOR_ROLE = await accessmaster.FLOW_CREATOR_ROLE() + + expect( + await accessmaster + .connect(operator) + .grantRole(FLOW_CREATOR_ROLE, creator.address) + ) + .to.emit(accessmaster, "RoleGranted") + .withArgs(FLOW_CREATOR_ROLE, creator.address, operator.address) + + hasRole = await accessmaster.hasRole(FLOW_CREATOR_ROLE, creator.address) + expect(hasRole).to.be.true + }) + const metaDataHash = "ipfs://QmbXvKra8Re7sxCMAEpquWJEq5qmSqis5VPCvo9uTA7AcF" + + it("Should delegate artifact creation", async () => { + expect( + await phygital.connect(operator).delegateAssetCreation( + creator2.address, + metaDataHash, + 500, + "0x04547032214B80" + // "0xd3b9733f92d113a903d0580c4e9d5de39a4e73a6e058a9c2d8396c4aecec4c34" + ) + ) + .to.emit(phygital, "AssetCreated") + .withArgs(1, creator2.address, metaDataHash) + + /// to check the item status should be original (4) + let status = await phygital.phygitalAssets(1) + expect(status.status).to.be.equal(5) + + const tokenURI = await phygital.tokenURI(1) + expect(tokenURI).to.equal(metaDataHash) + }) + + it("Should Mint artifact ", async () => { + /// To check if the same Id cannot be entered twice + expect(phygital.createAsset(metaDataHash, 500, "0x0454703221B80")).to.be + .reverted + + await phygital.createAsset(metaDataHash, 300, "0x0454703221b804") + + /// to check the item status should be original (4) + let status = await phygital.phygitalAssets(2) + expect(status.status).to.be.equal(5) + + expect(await phygital.ownerOf(2)).to.be.equal(owner.address) + expect(await phygital.Counter()).to.be.equal(2) + }) + + // const salePrice = ethers.utils.parseUnits("1", "ether") + it("should set item status", async () => { + await phygital + .connect(creator) + .createAsset("www.xyz.com", 300, "0x045A7032219B80") + + expect(await phygital.connect(creator).setItemStatus(3, 1)).to.emit( + phygital, + "UpdateAssetStatus" + ) + let status = await phygital.phygitalAssets(3) + expect(status.status).to.be.equal(1) + }) + + it("should destroy Asset", async () => { + // To check if the asset cannot be burned other than owner or operator + expect(phygital.connect(buyer).destroyAsset(3)).to.be.reverted + // Cannot burn until status is burned + expect(phygital.connect(creator).destroyAsset(3)).to.be.reverted + + await phygital.setItemStatus(3, 0) + expect(phygital.connect(creator).destroyAsset(3)).to.emit( + phygital, + "AssetDestroyed" + ) + expect(phygital.ownerOf(3)).to.be.reverted + + await phygital + .connect(creator) + .createAsset("www.xyz.com", 300, "0x045A5F") + await phygital.setItemStatus(4, 0) + // To check asset can be burned by operator too + await phygital.destroyAsset(4) + expect(phygital.ownerOf(4)).to.be.reverted + }) + it("To check ERC4907 for Phygital", async () => { + await phygital.createAsset("www.abcd.con", 300, "0x045A7032214B80") + let val = ethers.utils.parseUnits("100", "wei") + let currentTokenID = await phygital.Counter() + await phygital.setRentInfo(currentTokenID, true, val) + //// RENT USER FUNCTION + expect( + await phygital + .connect(creator) + .rent(currentTokenID, 1, { value: val }) + ).to.emit(phygital, "UpdateUser") + expect(await phygital.userOf(currentTokenID)).to.be.equal( + creator.address + ) + //// SET USER FUNCTION + await phygital.createAsset("www.abcde.con", 400, "0xF123") + currentTokenID = await phygital.Counter() + expect( + await phygital.setUser(currentTokenID, buyer.address, 3000) + ).to.emit(phygital, "UpdateUser") + /// SET RENT INFO + currentTokenID = await phygital.Counter() + expect( + phygital.connect(creator).rent(currentTokenID, 1, { value: val }) + ).to.be.revertedWith("Phygital: Not available for rent") + }) + it("To check rental for more failing test cases and transfer funds feature", async () => { + const rentPrice = ethers.utils.parseEther("1.0") + /// Creting a new asset + await phygital + .connect(creator) + .createAsset("www.abc.com", 300, "0x0F5A45") + let currentTokenID = await phygital.Counter() + /// Checking if rental status false item cannot be rented + expect(phygital.rent(currentTokenID, 1)).to.be.revertedWith( + "Phygital: Not available for rent" + ) + /// Rental Status True and setting the Price + await phygital + .connect(creator) + .setRentInfo(currentTokenID, true, rentPrice) + /// Invalide tokenId + currentTokenID = await phygital.Counter() + expect(phygital.rent(currentTokenID, 0)).to.be.revertedWith( + "Phygital: Invalide Token I" + ) + /// checking if the rental status can be taken for 0 hours or 4320 + expect(phygital.rent(currentTokenID, 0)).to.be.revertedWith( + "Phygital: Time can't be less than 1 hour" + ) + + expect(phygital.rent(currentTokenID, 4321)).to.be.revertedWith( + "Phygital: Time can't be more than 6 months" + ) + /// Calculate if transfer of Eth is happening after rental + // Assert + const startingOwnerBalance = await phygital.provider.getBalance( + creator.address + ) + const startingRentorBalance = await phygital.provider.getBalance( + owner.address + ) + ///ACT + const transactionResponse = await phygital.rent(currentTokenID, 1, { + value: rentPrice, + }) + const transactionReceipt = await transactionResponse.wait() + const { gasUsed, effectiveGasPrice } = transactionReceipt + const gasCost = gasUsed.mul(effectiveGasPrice) + + const endingOwnerBalance = await phygital.provider.getBalance( + creator.address + ) + const endingRentorBalance = await phygital.provider.getBalance( + owner.address + ) + + assert.equal( + endingOwnerBalance.sub(startingOwnerBalance).toString(), + startingRentorBalance + .sub(endingRentorBalance) + .sub(gasCost) + .toString() + ) + /// TO check the Rented User + expect(await phygital.userOf(currentTokenID)).to.be.equal(owner.address) + //// checking if user already exists it would throw error + expect( + phygital + .connect(operator) + .rent(currentTokenID, 1, { value: rentPrice }) + ).to.be.reverted + }) +}) diff --git a/test/09-phygitalA.test.ts b/test/09-phygitalA.test.ts new file mode 100644 index 0000000..df2ff4d --- /dev/null +++ b/test/09-phygitalA.test.ts @@ -0,0 +1,181 @@ +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers" +import { expect, assert } from "chai" +import { ethers, network } from "hardhat" +import { PhygitalA, AccessMaster, Token } from "../typechain-types" +import { BigNumber } from "ethers" +import exp from "constants" + +describe("PhygitalA contract", () => { + let [owner, creator, creator2, buyer, operator]: SignerWithAddress[] = + new Array(5) + before(async () => { + ;[owner, creator, creator2, buyer, operator] = await ethers.getSigners() + }) + + let accessmaster: AccessMaster + let phygital: PhygitalA + let token: Token + let saleprice: BigNumber + + const metadata = { + name: "StoreFront V1", + symbol: "SFv1", + baseTokenURI: "www.xyz.com", + marketplaceAddress: "", + } + + saleprice = ethers.utils.parseEther("0.01") + + before(async () => { + const AccessMasterFactory = await ethers.getContractFactory( + "AccessMaster" + ) + accessmaster = await AccessMasterFactory.deploy(owner.address) + + const TokenFactory = await ethers.getContractFactory("Token") + token = await TokenFactory.deploy() + + const accounts = await ethers.getSigners() + for (let i = 0; i < 5; i++) { + await token.connect(accounts[i]).mintToken(accounts[i].address, 100) + } + + const PhygitalAFactory = await ethers.getContractFactory("PhygitalA") + phygital = await PhygitalAFactory.deploy( + metadata.name, + metadata.symbol, + "0x419aa2E770A301cBdb81FEdB1f9B0C2D5F6E26bd", + accessmaster.address, + token.address, + [saleprice, 20, 300, 6], + "www.abc.com" + ) + await phygital.deployed() + }) + it("Should return the right name and symbol of the token, and other constructor parameters once Phygital is deployed", async () => { + expect(await phygital.name()).to.equal(metadata.name) + expect(await phygital.symbol()).to.equal(metadata.symbol) + expect(await phygital.nftPrice()).to.equal(saleprice) + expect(await phygital.maxSupply()).to.equal(20) + }) + /* The code snippet is a test case that checks the functionality of single minting and transferring + funds in the `PhygitalA` contract. */ + it("to check single minting and transferring funds", async () => { + // MINTING + // Calculate if transfer of ERC20 is happening after single minting + // Assert + let value = ethers.utils.parseEther("1") + let prevBalance = await token.balanceOf(creator.address) + + await token.connect(creator).approve(phygital.address, value) + expect(await phygital.connect(creator).mint(1)).to.emit( + phygital, + "PhygitalAAssetCreated" + ) + let afterBalance = await token.balanceOf(creator.address) + let diff = prevBalance.sub(afterBalance) + expect(diff).to.be.equal(saleprice) + + // TO check the ownerOF and BalanceOf for single minting + expect(await phygital.ownerOf(1)).to.be.equal(creator.address) + expect(await phygital.balanceOf(creator.address)).to.be.equal(1) + + await phygital.connect(creator).mint(5) + // should check if user cannot more than max mint + expect(phygital.connect(creator).mint(1)).to.be.reverted + }) + /* The code snippet is a test case that checks the functionality of the `setMaxMint` function in + the `PhygitalA` contract. */ + it("if maxmint is zero ,if user doesn't have funds && setMaxMint function", async () => { + // to check if the status of an item must be REGISTERED STATUS(4) + let status = await phygital.phygitalAssets(1) + expect(status.status).to.be.equal(0) + expect(status.registerTime).to.be.equal(0) + + /// to check not other than operator can setMaxMint + expect(phygital.connect(buyer).setMaxMint(0)).to.be.reverted + + let value = ethers.utils.parseEther("10") + + /// to check user can mint unlimited if max mint 0 + await phygital.setMaxMint(0) + await token.connect(buyer).approve(phygital.address, value) + await phygital.connect(buyer).mint(10) + + expect(await phygital.balanceOf(buyer.address)).to.be.equal(10) //check user token balance + + /// to check the max quantity cannot be exceeded + expect(phygital.connect(buyer).mint(10)).to.be.reverted + }) + it("to check set Price and what if user doesn't have enough funds to mint", async () => { + let val = ethers.utils.parseEther("1") + ////to check the Set NFT PRICE function is working or not + expect(await phygital.setNFTPrice(val)).to.emit( + phygital, + "UpdateAssetPrice" + ) + expect(await phygital.nftPrice()).to.be.equal(val) + /// to check what if the balance of the user not enough + let balance = await token.balanceOf(buyer.address) + await token.connect(buyer).transfer(creator.address, balance) + + expect(phygital.connect(buyer).mint(2)).to.be.reverted + }) + it("to check delegate Minting", async () => { + await phygital.setMaxMint(2) + /// to check the operator cannot mint more than Max Mint + expect(phygital.delegateMint(creator.address, 3)).to.be.reverted + + expect(await phygital.delegateMint(creator.address, 1)).to.emit( + phygital, + "PhygitalAAssetCreated" + ) + /// to check the operator cannot mint more than Max Supply + await phygital.setMaxMint(0) + expect(phygital.delegateMint(creator.address, 8)).to.be.reverted + //// to check delegate mint batch minting + let balance = await phygital.balanceOf(creator.address) + await phygital.delegateMint(creator.address, 3) + let balance2 = await phygital.balanceOf(creator.address) + + expect(balance2.sub(balance)).to.be.equal(3) + }) + + it("to check burn and set item status", async () => { + /// to check if the token cannot be burned other than owner, not by operator itself + expect(phygital.burnAsset(1)).to.be.reverted + /// to check the set item cannot be called other than Operator itself + expect(phygital.connect(buyer).setItemStatus(1, 0)).to.be.reverted + expect(await phygital.connect(creator).setItemStatus(1, 1)).to.emit( + phygital, + "UpdateAssetStatus" + ) + await phygital.setItemStatus(1, 0) + expect(await phygital.connect(creator).burnAsset(1)).to.emit( + phygital, + "PhygitalAAssetDestroyed" + ) + expect(phygital.ownerOf(1)).to.be.reverted + /// token cannot be burn which doesn't exist + expect(phygital.burnAsset(21)).to.be.reverted + }) + it("Register Asset Id", async () => { + /// to check the token must exists + expect(phygital.registerAssetId(21, "0x04A5")).to.be.reverted + /* The code snippet `expect(await phygital.registerAssetId(1, "0x0FA4")).to.emit(phygital, + "AssetRegistered")` is an assertion that checks if calling the `registerAssetId` function on + the `phygital` contract with the arguments `1` and `"0x0FA4"` emits an event of type + `"AssetRegistered"`. */ + expect(await phygital.registerAssetId(3, "0x0FA4")).to.emit( + phygital, + "AssetRegistered" + ) + let asset = await phygital.phygitalAssets(3) + expect(asset.phygitalId).to.be.equal("0x0fa4") + expect(asset.status).to.be.equal(4) + ///to check Same tokenId cannot be re-registered + expect(phygital.registerAssetId(1, "0x04A78")).to.be.reverted + ///to check same UUID cannot be used again + expect(phygital.registerAssetId(4, "0x0FA4")).to.be.reverted + }) +}) diff --git a/typechain-types/Phygital.ts b/typechain-types/Phygital.ts index ca17a4f..4526216 100644 --- a/typechain-types/Phygital.ts +++ b/typechain-types/Phygital.ts @@ -25,23 +25,23 @@ export interface PhygitalInterface extends utils.Interface { "accessMasterAddress()": FunctionFragment; "amountRequired(uint256,uint256)": FunctionFragment; "approve(address,uint256)": FunctionFragment; - "assetStatus(bytes16)": FunctionFragment; "balanceOf(address)": FunctionFragment; - "createAsset(string,uint96,bytes16)": FunctionFragment; - "delegateAssetCreation(address,string,uint96,bytes16)": FunctionFragment; + "createAsset(string,uint96,bytes)": FunctionFragment; + "delegateAssetCreation(address,string,uint96,bytes)": FunctionFragment; "destroyAsset(uint256)": FunctionFragment; "getApproved(uint256)": FunctionFragment; "isApprovedForAll(address,address)": FunctionFragment; "name()": FunctionFragment; "nftPrice()": FunctionFragment; "ownerOf(uint256)": FunctionFragment; - "phygitalID(uint256)": FunctionFragment; + "phygitalAssets(uint256)": FunctionFragment; + "phygitalIdCheck(bytes)": FunctionFragment; "rent(uint256,uint256)": FunctionFragment; "rentables(uint256)": FunctionFragment; "royaltyInfo(uint256,uint256)": FunctionFragment; "safeTransferFrom(address,address,uint256)": FunctionFragment; "setApprovalForAll(address,bool)": FunctionFragment; - "setNftPrice(uint256)": FunctionFragment; + "setItemStatus(uint256,uint8)": FunctionFragment; "setRentInfo(uint256,bool,uint256)": FunctionFragment; "setUser(uint256,address,uint64)": FunctionFragment; "supportsInterface(bytes4)": FunctionFragment; @@ -70,10 +70,6 @@ export interface PhygitalInterface extends utils.Interface { functionFragment: "approve", values: [string, BigNumberish] ): string; - encodeFunctionData( - functionFragment: "assetStatus", - values: [BytesLike] - ): string; encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; encodeFunctionData( functionFragment: "createAsset", @@ -102,9 +98,13 @@ export interface PhygitalInterface extends utils.Interface { values: [BigNumberish] ): string; encodeFunctionData( - functionFragment: "phygitalID", + functionFragment: "phygitalAssets", values: [BigNumberish] ): string; + encodeFunctionData( + functionFragment: "phygitalIdCheck", + values: [BytesLike] + ): string; encodeFunctionData( functionFragment: "rent", values: [BigNumberish, BigNumberish] @@ -126,8 +126,8 @@ export interface PhygitalInterface extends utils.Interface { values: [string, boolean] ): string; encodeFunctionData( - functionFragment: "setNftPrice", - values: [BigNumberish] + functionFragment: "setItemStatus", + values: [BigNumberish, BigNumberish] ): string; encodeFunctionData( functionFragment: "setRentInfo", @@ -183,10 +183,6 @@ export interface PhygitalInterface extends utils.Interface { data: BytesLike ): Result; decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; - decodeFunctionResult( - functionFragment: "assetStatus", - data: BytesLike - ): Result; decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; decodeFunctionResult( functionFragment: "createAsset", @@ -211,7 +207,14 @@ export interface PhygitalInterface extends utils.Interface { decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; decodeFunctionResult(functionFragment: "nftPrice", data: BytesLike): Result; decodeFunctionResult(functionFragment: "ownerOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "phygitalID", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "phygitalAssets", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "phygitalIdCheck", + data: BytesLike + ): Result; decodeFunctionResult(functionFragment: "rent", data: BytesLike): Result; decodeFunctionResult(functionFragment: "rentables", data: BytesLike): Result; decodeFunctionResult( @@ -227,7 +230,7 @@ export interface PhygitalInterface extends utils.Interface { data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "setNftPrice", + functionFragment: "setItemStatus", data: BytesLike ): Result; decodeFunctionResult( @@ -273,6 +276,7 @@ export interface PhygitalInterface extends utils.Interface { "PhygitalAssetDestroyed(uint256,address)": EventFragment; "RentalInfo(uint256,bool,uint256,address)": EventFragment; "Transfer(address,address,uint256)": EventFragment; + "UpdateAssetStatus(address,uint8,uint256)": EventFragment; "UpdateUser(uint256,address,uint64)": EventFragment; }; @@ -283,6 +287,7 @@ export interface PhygitalInterface extends utils.Interface { getEvent(nameOrSignatureOrTopic: "PhygitalAssetDestroyed"): EventFragment; getEvent(nameOrSignatureOrTopic: "RentalInfo"): EventFragment; getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UpdateAssetStatus"): EventFragment; getEvent(nameOrSignatureOrTopic: "UpdateUser"): EventFragment; } @@ -337,6 +342,14 @@ export type TransferEvent = TypedEvent< export type TransferEventFilter = TypedEventFilter; +export type UpdateAssetStatusEvent = TypedEvent< + [string, number, BigNumber], + { user: string; assetStatus: number; time: BigNumber } +>; + +export type UpdateAssetStatusEventFilter = + TypedEventFilter; + export type UpdateUserEvent = TypedEvent< [BigNumber, string, BigNumber], { tokenId: BigNumber; user: string; expires: BigNumber } @@ -388,8 +401,6 @@ export interface Phygital extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - assetStatus(arg0: BytesLike, overrides?: CallOverrides): Promise<[boolean]>; - balanceOf(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>; createAsset( @@ -403,7 +414,7 @@ export interface Phygital extends BaseContract { creator: string, metadataURI: string, royaltyPercentBasisPoint: BigNumberish, - _phygitalID: BytesLike, + phygitalID: BytesLike, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -432,10 +443,21 @@ export interface Phygital extends BaseContract { overrides?: CallOverrides ): Promise<[string]>; - phygitalID( + phygitalAssets( arg0: BigNumberish, overrides?: CallOverrides - ): Promise<[string]>; + ): Promise< + [BigNumber, string, number] & { + registerTime: BigNumber; + phygitalId: string; + status: number; + } + >; + + phygitalIdCheck( + arg0: BytesLike, + overrides?: CallOverrides + ): Promise<[boolean]>; rent( _tokenId: BigNumberish, @@ -482,8 +504,9 @@ export interface Phygital extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setNftPrice( - _nftPrice: BigNumberish, + setItemStatus( + tokenId: BigNumberish, + _status: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -561,8 +584,6 @@ export interface Phygital extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - assetStatus(arg0: BytesLike, overrides?: CallOverrides): Promise; - balanceOf(owner: string, overrides?: CallOverrides): Promise; createAsset( @@ -576,7 +597,7 @@ export interface Phygital extends BaseContract { creator: string, metadataURI: string, royaltyPercentBasisPoint: BigNumberish, - _phygitalID: BytesLike, + phygitalID: BytesLike, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -602,7 +623,18 @@ export interface Phygital extends BaseContract { ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - phygitalID(arg0: BigNumberish, overrides?: CallOverrides): Promise; + phygitalAssets( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise< + [BigNumber, string, number] & { + registerTime: BigNumber; + phygitalId: string; + status: number; + } + >; + + phygitalIdCheck(arg0: BytesLike, overrides?: CallOverrides): Promise; rent( _tokenId: BigNumberish, @@ -649,8 +681,9 @@ export interface Phygital extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setNftPrice( - _nftPrice: BigNumberish, + setItemStatus( + tokenId: BigNumberish, + _status: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -725,8 +758,6 @@ export interface Phygital extends BaseContract { overrides?: CallOverrides ): Promise; - assetStatus(arg0: BytesLike, overrides?: CallOverrides): Promise; - balanceOf(owner: string, overrides?: CallOverrides): Promise; createAsset( @@ -740,7 +771,7 @@ export interface Phygital extends BaseContract { creator: string, metadataURI: string, royaltyPercentBasisPoint: BigNumberish, - _phygitalID: BytesLike, + phygitalID: BytesLike, overrides?: CallOverrides ): Promise; @@ -766,7 +797,21 @@ export interface Phygital extends BaseContract { ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - phygitalID(arg0: BigNumberish, overrides?: CallOverrides): Promise; + phygitalAssets( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise< + [BigNumber, string, number] & { + registerTime: BigNumber; + phygitalId: string; + status: number; + } + >; + + phygitalIdCheck( + arg0: BytesLike, + overrides?: CallOverrides + ): Promise; rent( _tokenId: BigNumberish, @@ -813,8 +858,9 @@ export interface Phygital extends BaseContract { overrides?: CallOverrides ): Promise; - setNftPrice( - _nftPrice: BigNumberish, + setItemStatus( + tokenId: BigNumberish, + _status: BigNumberish, overrides?: CallOverrides ): Promise; @@ -953,6 +999,17 @@ export interface Phygital extends BaseContract { tokenId?: BigNumberish | null ): TransferEventFilter; + "UpdateAssetStatus(address,uint8,uint256)"( + user?: null, + assetStatus?: null, + time?: null + ): UpdateAssetStatusEventFilter; + UpdateAssetStatus( + user?: null, + assetStatus?: null, + time?: null + ): UpdateAssetStatusEventFilter; + "UpdateUser(uint256,address,uint64)"( tokenId?: BigNumberish | null, user?: string | null, @@ -982,8 +1039,6 @@ export interface Phygital extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - assetStatus(arg0: BytesLike, overrides?: CallOverrides): Promise; - balanceOf(owner: string, overrides?: CallOverrides): Promise; createAsset( @@ -997,7 +1052,7 @@ export interface Phygital extends BaseContract { creator: string, metadataURI: string, royaltyPercentBasisPoint: BigNumberish, - _phygitalID: BytesLike, + phygitalID: BytesLike, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -1026,11 +1081,16 @@ export interface Phygital extends BaseContract { overrides?: CallOverrides ): Promise; - phygitalID( + phygitalAssets( arg0: BigNumberish, overrides?: CallOverrides ): Promise; + phygitalIdCheck( + arg0: BytesLike, + overrides?: CallOverrides + ): Promise; + rent( _tokenId: BigNumberish, _timeInHours: BigNumberish, @@ -1069,8 +1129,9 @@ export interface Phygital extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setNftPrice( - _nftPrice: BigNumberish, + setItemStatus( + tokenId: BigNumberish, + _status: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -1154,11 +1215,6 @@ export interface Phygital extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - assetStatus( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - balanceOf( owner: string, overrides?: CallOverrides @@ -1175,7 +1231,7 @@ export interface Phygital extends BaseContract { creator: string, metadataURI: string, royaltyPercentBasisPoint: BigNumberish, - _phygitalID: BytesLike, + phygitalID: BytesLike, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -1204,11 +1260,16 @@ export interface Phygital extends BaseContract { overrides?: CallOverrides ): Promise; - phygitalID( + phygitalAssets( arg0: BigNumberish, overrides?: CallOverrides ): Promise; + phygitalIdCheck( + arg0: BytesLike, + overrides?: CallOverrides + ): Promise; + rent( _tokenId: BigNumberish, _timeInHours: BigNumberish, @@ -1247,8 +1308,9 @@ export interface Phygital extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setNftPrice( - _nftPrice: BigNumberish, + setItemStatus( + tokenId: BigNumberish, + _status: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; diff --git a/typechain-types/PhygitalA.ts b/typechain-types/PhygitalA.ts index 08b1784..c1bfaff 100644 --- a/typechain-types/PhygitalA.ts +++ b/typechain-types/PhygitalA.ts @@ -21,71 +21,63 @@ import { TypedEventFilter, TypedEvent, TypedListener, OnEvent } from "./common"; export interface PhygitalAInterface extends utils.Interface { contractName: "PhygitalA"; functions: { - "SIGNATURE_VERSION()": FunctionFragment; - "SIGNING_DOMAIN()": FunctionFragment; "accessMasterAddress()": FunctionFragment; - "amountRequired(uint256,uint256)": FunctionFragment; "approve(address,uint256)": FunctionFragment; - "assetStatus(bytes16)": FunctionFragment; "balanceOf(address)": FunctionFragment; "burn(uint256)": FunctionFragment; - "burnNFT(uint256)": FunctionFragment; + "burnAsset(uint256)": FunctionFragment; + "calculateRequiredPrice(uint256)": FunctionFragment; + "delegateMint(address,uint256)": FunctionFragment; "getApproved(uint256)": FunctionFragment; "isApprovedForAll(address,address)": FunctionFragment; + "maxMint()": FunctionFragment; "maxSupply()": FunctionFragment; "mint(uint256)": FunctionFragment; "name()": FunctionFragment; + "nftPrice()": FunctionFragment; "ownerOf(uint256)": FunctionFragment; - "phygitalID(uint256)": FunctionFragment; - "registerAssetId(uint256,bytes16)": FunctionFragment; - "rent(uint256,uint256)": FunctionFragment; + "phygitalAssets(uint256)": FunctionFragment; + "phygitalIdCheck(bytes)": FunctionFragment; + "registerAssetId(uint256,bytes)": FunctionFragment; "rentables(uint256)": FunctionFragment; "royaltyInfo(uint256,uint256)": FunctionFragment; "safeTransferFrom(address,address,uint256)": FunctionFragment; "setApprovalForAll(address,bool)": FunctionFragment; - "setRentInfo(uint256,bool,uint256)": FunctionFragment; - "setUser(uint256,address,uint64)": FunctionFragment; + "setItemStatus(uint256,uint8)": FunctionFragment; + "setMaxMint(uint16)": FunctionFragment; + "setNFTPrice(uint256)": FunctionFragment; "supportsInterface(bytes4)": FunctionFragment; "symbol()": FunctionFragment; "tokenURI(uint256)": FunctionFragment; "totalSupply()": FunctionFragment; "tradeHub()": FunctionFragment; "transferFrom(address,address,uint256)": FunctionFragment; - "userExpires(uint256)": FunctionFragment; - "userOf(uint256)": FunctionFragment; + "userBalance(address)": FunctionFragment; "version()": FunctionFragment; }; - encodeFunctionData( - functionFragment: "SIGNATURE_VERSION", - values?: undefined - ): string; - encodeFunctionData( - functionFragment: "SIGNING_DOMAIN", - values?: undefined - ): string; encodeFunctionData( functionFragment: "accessMasterAddress", values?: undefined ): string; - encodeFunctionData( - functionFragment: "amountRequired", - values: [BigNumberish, BigNumberish] - ): string; encodeFunctionData( functionFragment: "approve", values: [string, BigNumberish] ): string; - encodeFunctionData( - functionFragment: "assetStatus", - values: [BytesLike] - ): string; encodeFunctionData(functionFragment: "balanceOf", values: [string]): string; encodeFunctionData(functionFragment: "burn", values: [BigNumberish]): string; encodeFunctionData( - functionFragment: "burnNFT", + functionFragment: "burnAsset", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "calculateRequiredPrice", values: [BigNumberish] ): string; + encodeFunctionData( + functionFragment: "delegateMint", + values: [string, BigNumberish] + ): string; encodeFunctionData( functionFragment: "getApproved", values: [BigNumberish] @@ -94,24 +86,26 @@ export interface PhygitalAInterface extends utils.Interface { functionFragment: "isApprovedForAll", values: [string, string] ): string; + encodeFunctionData(functionFragment: "maxMint", values?: undefined): string; encodeFunctionData(functionFragment: "maxSupply", values?: undefined): string; encodeFunctionData(functionFragment: "mint", values: [BigNumberish]): string; encodeFunctionData(functionFragment: "name", values?: undefined): string; + encodeFunctionData(functionFragment: "nftPrice", values?: undefined): string; encodeFunctionData( functionFragment: "ownerOf", values: [BigNumberish] ): string; encodeFunctionData( - functionFragment: "phygitalID", + functionFragment: "phygitalAssets", values: [BigNumberish] ): string; encodeFunctionData( - functionFragment: "registerAssetId", - values: [BigNumberish, BytesLike] + functionFragment: "phygitalIdCheck", + values: [BytesLike] ): string; encodeFunctionData( - functionFragment: "rent", - values: [BigNumberish, BigNumberish] + functionFragment: "registerAssetId", + values: [BigNumberish, BytesLike] ): string; encodeFunctionData( functionFragment: "rentables", @@ -130,12 +124,16 @@ export interface PhygitalAInterface extends utils.Interface { values: [string, boolean] ): string; encodeFunctionData( - functionFragment: "setRentInfo", - values: [BigNumberish, boolean, BigNumberish] + functionFragment: "setItemStatus", + values: [BigNumberish, BigNumberish] ): string; encodeFunctionData( - functionFragment: "setUser", - values: [BigNumberish, string, BigNumberish] + functionFragment: "setMaxMint", + values: [BigNumberish] + ): string; + encodeFunctionData( + functionFragment: "setNFTPrice", + values: [BigNumberish] ): string; encodeFunctionData( functionFragment: "supportsInterface", @@ -155,40 +153,25 @@ export interface PhygitalAInterface extends utils.Interface { functionFragment: "transferFrom", values: [string, string, BigNumberish] ): string; - encodeFunctionData( - functionFragment: "userExpires", - values: [BigNumberish] - ): string; - encodeFunctionData( - functionFragment: "userOf", - values: [BigNumberish] - ): string; + encodeFunctionData(functionFragment: "userBalance", values: [string]): string; encodeFunctionData(functionFragment: "version", values?: undefined): string; - decodeFunctionResult( - functionFragment: "SIGNATURE_VERSION", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "SIGNING_DOMAIN", - data: BytesLike - ): Result; decodeFunctionResult( functionFragment: "accessMasterAddress", data: BytesLike ): Result; + decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "burnAsset", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "amountRequired", + functionFragment: "calculateRequiredPrice", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "assetStatus", + functionFragment: "delegateMint", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "burnNFT", data: BytesLike): Result; decodeFunctionResult( functionFragment: "getApproved", data: BytesLike @@ -197,16 +180,24 @@ export interface PhygitalAInterface extends utils.Interface { functionFragment: "isApprovedForAll", data: BytesLike ): Result; + decodeFunctionResult(functionFragment: "maxMint", data: BytesLike): Result; decodeFunctionResult(functionFragment: "maxSupply", data: BytesLike): Result; decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result; decodeFunctionResult(functionFragment: "name", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "nftPrice", data: BytesLike): Result; decodeFunctionResult(functionFragment: "ownerOf", data: BytesLike): Result; - decodeFunctionResult(functionFragment: "phygitalID", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "phygitalAssets", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "phygitalIdCheck", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "registerAssetId", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "rent", data: BytesLike): Result; decodeFunctionResult(functionFragment: "rentables", data: BytesLike): Result; decodeFunctionResult( functionFragment: "royaltyInfo", @@ -221,10 +212,14 @@ export interface PhygitalAInterface extends utils.Interface { data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "setRentInfo", + functionFragment: "setItemStatus", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "setMaxMint", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "setNFTPrice", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "setUser", data: BytesLike): Result; decodeFunctionResult( functionFragment: "supportsInterface", data: BytesLike @@ -241,33 +236,36 @@ export interface PhygitalAInterface extends utils.Interface { data: BytesLike ): Result; decodeFunctionResult( - functionFragment: "userExpires", + functionFragment: "userBalance", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "userOf", data: BytesLike): Result; decodeFunctionResult(functionFragment: "version", data: BytesLike): Result; events: { "Approval(address,address,uint256)": EventFragment; "ApprovalForAll(address,address,bool)": EventFragment; + "AssetRegistered(address,uint256,bytes,uint256)": EventFragment; "ConsecutiveTransfer(uint256,uint256,address,address)": EventFragment; - "FundTransferred(address,address,uint256,uint256)": EventFragment; + "FundTransferred(address,address,uint256)": EventFragment; "PhygitalAAssetCreated(uint256,uint256,address)": EventFragment; "PhygitalAAssetDestroyed(uint256,address)": EventFragment; - "RentalInfo(uint256,bool,uint256,address)": EventFragment; "Transfer(address,address,uint256)": EventFragment; - "UpdateUser(uint256,address,uint64)": EventFragment; + "UpdateAssetMaxMint(address,uint256)": EventFragment; + "UpdateAssetPrice(address,uint256)": EventFragment; + "UpdateAssetStatus(address,uint256,uint8,uint256)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment; getEvent(nameOrSignatureOrTopic: "ApprovalForAll"): EventFragment; + getEvent(nameOrSignatureOrTopic: "AssetRegistered"): EventFragment; getEvent(nameOrSignatureOrTopic: "ConsecutiveTransfer"): EventFragment; getEvent(nameOrSignatureOrTopic: "FundTransferred"): EventFragment; getEvent(nameOrSignatureOrTopic: "PhygitalAAssetCreated"): EventFragment; getEvent(nameOrSignatureOrTopic: "PhygitalAAssetDestroyed"): EventFragment; - getEvent(nameOrSignatureOrTopic: "RentalInfo"): EventFragment; getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment; - getEvent(nameOrSignatureOrTopic: "UpdateUser"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UpdateAssetMaxMint"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UpdateAssetPrice"): EventFragment; + getEvent(nameOrSignatureOrTopic: "UpdateAssetStatus"): EventFragment; } export type ApprovalEvent = TypedEvent< @@ -284,6 +282,13 @@ export type ApprovalForAllEvent = TypedEvent< export type ApprovalForAllEventFilter = TypedEventFilter; +export type AssetRegisteredEvent = TypedEvent< + [string, BigNumber, string, BigNumber], + { user: string; tokenId: BigNumber; uuid: string; time: BigNumber } +>; + +export type AssetRegisteredEventFilter = TypedEventFilter; + export type ConsecutiveTransferEvent = TypedEvent< [BigNumber, BigNumber, string, string], { fromTokenId: BigNumber; toTokenId: BigNumber; from: string; to: string } @@ -293,8 +298,8 @@ export type ConsecutiveTransferEventFilter = TypedEventFilter; export type FundTransferredEvent = TypedEvent< - [string, string, BigNumber, BigNumber], - { sender: string; reciepient: string; tokenId: BigNumber; amount: BigNumber } + [string, string, BigNumber], + { sender: string; reciepient: string; amount: BigNumber } >; export type FundTransferredEventFilter = TypedEventFilter; @@ -315,13 +320,6 @@ export type PhygitalAAssetDestroyedEvent = TypedEvent< export type PhygitalAAssetDestroyedEventFilter = TypedEventFilter; -export type RentalInfoEvent = TypedEvent< - [BigNumber, boolean, BigNumber, string], - { tokenId: BigNumber; isRentable: boolean; price: BigNumber; renter: string } ->; - -export type RentalInfoEventFilter = TypedEventFilter; - export type TransferEvent = TypedEvent< [string, string, BigNumber], { from: string; to: string; tokenId: BigNumber } @@ -329,12 +327,29 @@ export type TransferEvent = TypedEvent< export type TransferEventFilter = TypedEventFilter; -export type UpdateUserEvent = TypedEvent< - [BigNumber, string, BigNumber], - { tokenId: BigNumber; user: string; expires: BigNumber } +export type UpdateAssetMaxMintEvent = TypedEvent< + [string, BigNumber], + { user: string; updatedMaxMint: BigNumber } +>; + +export type UpdateAssetMaxMintEventFilter = + TypedEventFilter; + +export type UpdateAssetPriceEvent = TypedEvent< + [string, BigNumber], + { user: string; updatedPrice: BigNumber } +>; + +export type UpdateAssetPriceEventFilter = + TypedEventFilter; + +export type UpdateAssetStatusEvent = TypedEvent< + [string, BigNumber, number, BigNumber], + { user: string; tokenId: BigNumber; assetStatus: number; time: BigNumber } >; -export type UpdateUserEventFilter = TypedEventFilter; +export type UpdateAssetStatusEventFilter = + TypedEventFilter; export interface PhygitalA extends BaseContract { contractName: "PhygitalA"; @@ -364,26 +379,14 @@ export interface PhygitalA extends BaseContract { removeListener: OnEvent; functions: { - SIGNATURE_VERSION(overrides?: CallOverrides): Promise<[string]>; - - SIGNING_DOMAIN(overrides?: CallOverrides): Promise<[string]>; - accessMasterAddress(overrides?: CallOverrides): Promise<[string]>; - amountRequired( - tokenId: BigNumberish, - time: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber] & { amount: BigNumber }>; - approve( to: string, tokenId: BigNumberish, overrides?: PayableOverrides & { from?: string | Promise } ): Promise; - assetStatus(arg0: BytesLike, overrides?: CallOverrides): Promise<[boolean]>; - balanceOf(owner: string, overrides?: CallOverrides): Promise<[BigNumber]>; burn( @@ -391,11 +394,22 @@ export interface PhygitalA extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - burnNFT( + burnAsset( tokenId: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; + calculateRequiredPrice( + quantity: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber] & { amount: BigNumber }>; + + delegateMint( + reciever: string, + quantity: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + getApproved( tokenId: BigNumberish, overrides?: CallOverrides @@ -407,24 +421,39 @@ export interface PhygitalA extends BaseContract { overrides?: CallOverrides ): Promise<[boolean]>; + maxMint(overrides?: CallOverrides): Promise<[number]>; + maxSupply(overrides?: CallOverrides): Promise<[BigNumber]>; mint( quantity: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: Overrides & { from?: string | Promise } ): Promise; name(overrides?: CallOverrides): Promise<[string]>; + nftPrice(overrides?: CallOverrides): Promise<[BigNumber]>; + ownerOf( tokenId: BigNumberish, overrides?: CallOverrides ): Promise<[string]>; - phygitalID( + phygitalAssets( arg0: BigNumberish, overrides?: CallOverrides - ): Promise<[string]>; + ): Promise< + [BigNumber, string, number] & { + registerTime: BigNumber; + phygitalId: string; + status: number; + } + >; + + phygitalIdCheck( + arg0: BytesLike, + overrides?: CallOverrides + ): Promise<[boolean]>; registerAssetId( tokenId: BigNumberish, @@ -432,12 +461,6 @@ export interface PhygitalA extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - rent( - _tokenId: BigNumberish, - _timeInHours: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - rentables( arg0: BigNumberish, overrides?: CallOverrides @@ -477,17 +500,19 @@ export interface PhygitalA extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setRentInfo( + setItemStatus( tokenId: BigNumberish, - isRentable: boolean, - pricePerHour: BigNumberish, + _status: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; - setUser( - tokenId: BigNumberish, - user: string, - expires: BigNumberish, + setMaxMint( + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setNFTPrice( + amount: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -514,36 +539,19 @@ export interface PhygitalA extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; - userExpires( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise<[BigNumber]>; - - userOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise<[string]>; + userBalance(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>; version(overrides?: CallOverrides): Promise<[number]>; }; - SIGNATURE_VERSION(overrides?: CallOverrides): Promise; - - SIGNING_DOMAIN(overrides?: CallOverrides): Promise; - accessMasterAddress(overrides?: CallOverrides): Promise; - amountRequired( - tokenId: BigNumberish, - time: BigNumberish, - overrides?: CallOverrides - ): Promise; - approve( to: string, tokenId: BigNumberish, overrides?: PayableOverrides & { from?: string | Promise } ): Promise; - assetStatus(arg0: BytesLike, overrides?: CallOverrides): Promise; - balanceOf(owner: string, overrides?: CallOverrides): Promise; burn( @@ -551,11 +559,22 @@ export interface PhygitalA extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - burnNFT( + burnAsset( tokenId: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; + calculateRequiredPrice( + quantity: BigNumberish, + overrides?: CallOverrides + ): Promise; + + delegateMint( + reciever: string, + quantity: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + getApproved( tokenId: BigNumberish, overrides?: CallOverrides @@ -567,18 +586,33 @@ export interface PhygitalA extends BaseContract { overrides?: CallOverrides ): Promise; + maxMint(overrides?: CallOverrides): Promise; + maxSupply(overrides?: CallOverrides): Promise; mint( quantity: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: Overrides & { from?: string | Promise } ): Promise; name(overrides?: CallOverrides): Promise; + nftPrice(overrides?: CallOverrides): Promise; + ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - phygitalID(arg0: BigNumberish, overrides?: CallOverrides): Promise; + phygitalAssets( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise< + [BigNumber, string, number] & { + registerTime: BigNumber; + phygitalId: string; + status: number; + } + >; + + phygitalIdCheck(arg0: BytesLike, overrides?: CallOverrides): Promise; registerAssetId( tokenId: BigNumberish, @@ -586,12 +620,6 @@ export interface PhygitalA extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - rent( - _tokenId: BigNumberish, - _timeInHours: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - rentables( arg0: BigNumberish, overrides?: CallOverrides @@ -631,17 +659,19 @@ export interface PhygitalA extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setRentInfo( + setItemStatus( tokenId: BigNumberish, - isRentable: boolean, - pricePerHour: BigNumberish, + _status: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; - setUser( - tokenId: BigNumberish, - user: string, - expires: BigNumberish, + setMaxMint( + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setNFTPrice( + amount: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -665,41 +695,35 @@ export interface PhygitalA extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; - userExpires( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - userOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; + userBalance(arg0: string, overrides?: CallOverrides): Promise; version(overrides?: CallOverrides): Promise; callStatic: { - SIGNATURE_VERSION(overrides?: CallOverrides): Promise; - - SIGNING_DOMAIN(overrides?: CallOverrides): Promise; - accessMasterAddress(overrides?: CallOverrides): Promise; - amountRequired( - tokenId: BigNumberish, - time: BigNumberish, - overrides?: CallOverrides - ): Promise; - approve( to: string, tokenId: BigNumberish, overrides?: CallOverrides ): Promise; - assetStatus(arg0: BytesLike, overrides?: CallOverrides): Promise; - balanceOf(owner: string, overrides?: CallOverrides): Promise; burn(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - burnNFT(tokenId: BigNumberish, overrides?: CallOverrides): Promise; + burnAsset(tokenId: BigNumberish, overrides?: CallOverrides): Promise; + + calculateRequiredPrice( + quantity: BigNumberish, + overrides?: CallOverrides + ): Promise; + + delegateMint( + reciever: string, + quantity: BigNumberish, + overrides?: CallOverrides + ): Promise<[BigNumber, BigNumber]>; getApproved( tokenId: BigNumberish, @@ -712,6 +736,8 @@ export interface PhygitalA extends BaseContract { overrides?: CallOverrides ): Promise; + maxMint(overrides?: CallOverrides): Promise; + maxSupply(overrides?: CallOverrides): Promise; mint( @@ -721,9 +747,25 @@ export interface PhygitalA extends BaseContract { name(overrides?: CallOverrides): Promise; + nftPrice(overrides?: CallOverrides): Promise; + ownerOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; - phygitalID(arg0: BigNumberish, overrides?: CallOverrides): Promise; + phygitalAssets( + arg0: BigNumberish, + overrides?: CallOverrides + ): Promise< + [BigNumber, string, number] & { + registerTime: BigNumber; + phygitalId: string; + status: number; + } + >; + + phygitalIdCheck( + arg0: BytesLike, + overrides?: CallOverrides + ): Promise; registerAssetId( tokenId: BigNumberish, @@ -731,12 +773,6 @@ export interface PhygitalA extends BaseContract { overrides?: CallOverrides ): Promise; - rent( - _tokenId: BigNumberish, - _timeInHours: BigNumberish, - overrides?: CallOverrides - ): Promise; - rentables( arg0: BigNumberish, overrides?: CallOverrides @@ -776,19 +812,15 @@ export interface PhygitalA extends BaseContract { overrides?: CallOverrides ): Promise; - setRentInfo( + setItemStatus( tokenId: BigNumberish, - isRentable: boolean, - pricePerHour: BigNumberish, + _status: BigNumberish, overrides?: CallOverrides ): Promise; - setUser( - tokenId: BigNumberish, - user: string, - expires: BigNumberish, - overrides?: CallOverrides - ): Promise; + setMaxMint(amount: BigNumberish, overrides?: CallOverrides): Promise; + + setNFTPrice(amount: BigNumberish, overrides?: CallOverrides): Promise; supportsInterface( interfaceId: BytesLike, @@ -810,12 +842,7 @@ export interface PhygitalA extends BaseContract { overrides?: CallOverrides ): Promise; - userExpires( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - userOf(tokenId: BigNumberish, overrides?: CallOverrides): Promise; + userBalance(arg0: string, overrides?: CallOverrides): Promise; version(overrides?: CallOverrides): Promise; }; @@ -843,6 +870,19 @@ export interface PhygitalA extends BaseContract { approved?: null ): ApprovalForAllEventFilter; + "AssetRegistered(address,uint256,bytes,uint256)"( + user?: null, + tokenId?: null, + uuid?: null, + time?: null + ): AssetRegisteredEventFilter; + AssetRegistered( + user?: null, + tokenId?: null, + uuid?: null, + time?: null + ): AssetRegisteredEventFilter; + "ConsecutiveTransfer(uint256,uint256,address,address)"( fromTokenId?: BigNumberish | null, toTokenId?: null, @@ -856,16 +896,14 @@ export interface PhygitalA extends BaseContract { to?: string | null ): ConsecutiveTransferEventFilter; - "FundTransferred(address,address,uint256,uint256)"( + "FundTransferred(address,address,uint256)"( sender?: null, reciepient?: null, - tokenId?: null, amount?: null ): FundTransferredEventFilter; FundTransferred( sender?: null, reciepient?: null, - tokenId?: null, amount?: null ): FundTransferredEventFilter; @@ -889,19 +927,6 @@ export interface PhygitalA extends BaseContract { ownerOrApproved?: null ): PhygitalAAssetDestroyedEventFilter; - "RentalInfo(uint256,bool,uint256,address)"( - tokenId?: null, - isRentable?: null, - price?: null, - renter?: string | null - ): RentalInfoEventFilter; - RentalInfo( - tokenId?: null, - isRentable?: null, - price?: null, - renter?: string | null - ): RentalInfoEventFilter; - "Transfer(address,address,uint256)"( from?: string | null, to?: string | null, @@ -913,39 +938,47 @@ export interface PhygitalA extends BaseContract { tokenId?: BigNumberish | null ): TransferEventFilter; - "UpdateUser(uint256,address,uint64)"( - tokenId?: BigNumberish | null, - user?: string | null, - expires?: null - ): UpdateUserEventFilter; - UpdateUser( - tokenId?: BigNumberish | null, - user?: string | null, - expires?: null - ): UpdateUserEventFilter; + "UpdateAssetMaxMint(address,uint256)"( + user?: null, + updatedMaxMint?: null + ): UpdateAssetMaxMintEventFilter; + UpdateAssetMaxMint( + user?: null, + updatedMaxMint?: null + ): UpdateAssetMaxMintEventFilter; + + "UpdateAssetPrice(address,uint256)"( + user?: null, + updatedPrice?: null + ): UpdateAssetPriceEventFilter; + UpdateAssetPrice( + user?: null, + updatedPrice?: null + ): UpdateAssetPriceEventFilter; + + "UpdateAssetStatus(address,uint256,uint8,uint256)"( + user?: null, + tokenId?: null, + assetStatus?: null, + time?: null + ): UpdateAssetStatusEventFilter; + UpdateAssetStatus( + user?: null, + tokenId?: null, + assetStatus?: null, + time?: null + ): UpdateAssetStatusEventFilter; }; estimateGas: { - SIGNATURE_VERSION(overrides?: CallOverrides): Promise; - - SIGNING_DOMAIN(overrides?: CallOverrides): Promise; - accessMasterAddress(overrides?: CallOverrides): Promise; - amountRequired( - tokenId: BigNumberish, - time: BigNumberish, - overrides?: CallOverrides - ): Promise; - approve( to: string, tokenId: BigNumberish, overrides?: PayableOverrides & { from?: string | Promise } ): Promise; - assetStatus(arg0: BytesLike, overrides?: CallOverrides): Promise; - balanceOf(owner: string, overrides?: CallOverrides): Promise; burn( @@ -953,11 +986,22 @@ export interface PhygitalA extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - burnNFT( + burnAsset( tokenId: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; + calculateRequiredPrice( + quantity: BigNumberish, + overrides?: CallOverrides + ): Promise; + + delegateMint( + reciever: string, + quantity: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + getApproved( tokenId: BigNumberish, overrides?: CallOverrides @@ -969,37 +1013,40 @@ export interface PhygitalA extends BaseContract { overrides?: CallOverrides ): Promise; + maxMint(overrides?: CallOverrides): Promise; + maxSupply(overrides?: CallOverrides): Promise; mint( quantity: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: Overrides & { from?: string | Promise } ): Promise; name(overrides?: CallOverrides): Promise; + nftPrice(overrides?: CallOverrides): Promise; + ownerOf( tokenId: BigNumberish, overrides?: CallOverrides ): Promise; - phygitalID( + phygitalAssets( arg0: BigNumberish, overrides?: CallOverrides ): Promise; + phygitalIdCheck( + arg0: BytesLike, + overrides?: CallOverrides + ): Promise; + registerAssetId( tokenId: BigNumberish, _phygitalID: BytesLike, overrides?: Overrides & { from?: string | Promise } ): Promise; - rent( - _tokenId: BigNumberish, - _timeInHours: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - rentables( arg0: BigNumberish, overrides?: CallOverrides @@ -1032,17 +1079,19 @@ export interface PhygitalA extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setRentInfo( + setItemStatus( tokenId: BigNumberish, - isRentable: boolean, - pricePerHour: BigNumberish, + _status: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; - setUser( - tokenId: BigNumberish, - user: string, - expires: BigNumberish, + setMaxMint( + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setNFTPrice( + amount: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -1069,45 +1118,22 @@ export interface PhygitalA extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; - userExpires( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - userOf( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; + userBalance(arg0: string, overrides?: CallOverrides): Promise; version(overrides?: CallOverrides): Promise; }; populateTransaction: { - SIGNATURE_VERSION(overrides?: CallOverrides): Promise; - - SIGNING_DOMAIN(overrides?: CallOverrides): Promise; - accessMasterAddress( overrides?: CallOverrides ): Promise; - amountRequired( - tokenId: BigNumberish, - time: BigNumberish, - overrides?: CallOverrides - ): Promise; - approve( to: string, tokenId: BigNumberish, overrides?: PayableOverrides & { from?: string | Promise } ): Promise; - assetStatus( - arg0: BytesLike, - overrides?: CallOverrides - ): Promise; - balanceOf( owner: string, overrides?: CallOverrides @@ -1118,11 +1144,22 @@ export interface PhygitalA extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - burnNFT( + burnAsset( tokenId: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; + calculateRequiredPrice( + quantity: BigNumberish, + overrides?: CallOverrides + ): Promise; + + delegateMint( + reciever: string, + quantity: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + getApproved( tokenId: BigNumberish, overrides?: CallOverrides @@ -1134,37 +1171,40 @@ export interface PhygitalA extends BaseContract { overrides?: CallOverrides ): Promise; + maxMint(overrides?: CallOverrides): Promise; + maxSupply(overrides?: CallOverrides): Promise; mint( quantity: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } + overrides?: Overrides & { from?: string | Promise } ): Promise; name(overrides?: CallOverrides): Promise; + nftPrice(overrides?: CallOverrides): Promise; + ownerOf( tokenId: BigNumberish, overrides?: CallOverrides ): Promise; - phygitalID( + phygitalAssets( arg0: BigNumberish, overrides?: CallOverrides ): Promise; + phygitalIdCheck( + arg0: BytesLike, + overrides?: CallOverrides + ): Promise; + registerAssetId( tokenId: BigNumberish, _phygitalID: BytesLike, overrides?: Overrides & { from?: string | Promise } ): Promise; - rent( - _tokenId: BigNumberish, - _timeInHours: BigNumberish, - overrides?: PayableOverrides & { from?: string | Promise } - ): Promise; - rentables( arg0: BigNumberish, overrides?: CallOverrides @@ -1197,17 +1237,19 @@ export interface PhygitalA extends BaseContract { overrides?: Overrides & { from?: string | Promise } ): Promise; - setRentInfo( + setItemStatus( tokenId: BigNumberish, - isRentable: boolean, - pricePerHour: BigNumberish, + _status: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; - setUser( - tokenId: BigNumberish, - user: string, - expires: BigNumberish, + setMaxMint( + amount: BigNumberish, + overrides?: Overrides & { from?: string | Promise } + ): Promise; + + setNFTPrice( + amount: BigNumberish, overrides?: Overrides & { from?: string | Promise } ): Promise; @@ -1234,13 +1276,8 @@ export interface PhygitalA extends BaseContract { overrides?: PayableOverrides & { from?: string | Promise } ): Promise; - userExpires( - tokenId: BigNumberish, - overrides?: CallOverrides - ): Promise; - - userOf( - tokenId: BigNumberish, + userBalance( + arg0: string, overrides?: CallOverrides ): Promise; diff --git a/typechain-types/factories/AccessMaster__factory.ts b/typechain-types/factories/AccessMaster__factory.ts index d87d850..0610c1b 100644 --- a/typechain-types/factories/AccessMaster__factory.ts +++ b/typechain-types/factories/AccessMaster__factory.ts @@ -454,7 +454,7 @@ const _abi = [ ]; const _bytecode = - "0x60c0604052600f60809081526e26bc9020b1b1b2b9b9a6b0b9ba32b960891b60a052600290620000309082620006aa565b50604080518082019091526002815261414d60f01b6020820152600390620000599082620006aa565b506004805460ff191660011790553480156200007457600080fd5b50604051620019b0380380620019b0833981016040819052620000979162000776565b620000b26000805160206200197083398151915233620001b9565b620000cd6000805160206200197083398151915280620001c9565b620000f76000805160206200199083398151915260008051602062001970833981519152620001c9565b620001216000805160206200195083398151915260008051602062001990833981519152620001c9565b6200013c600080516020620019908339815191523362000214565b62000157600080516020620019708339815191528262000214565b62000172600080516020620019908339815191528262000214565b6200018d600080516020620019508339815191528262000214565b600480546001600160a01b0390921661010002610100600160a81b0319909216919091179055620008eb565b620001c5828262000242565b5050565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600082815260208190526040902060010154620002318162000280565b6200023d838362000242565b505050565b6200025982826200028f60201b620006a41760201c565b60008281526001602090815260409091206200023d918390620007286200032f821b17901c565b6200028c81336200034f565b50565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620001c5576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002eb3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600062000346836001600160a01b038416620003e8565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620001c5576200038e816200043a60201b6200073d1760201c565b620003a48360206200074f6200044d821b17811c565b604051602001620003b7929190620007c7565b60408051601f198184030181529082905262461bcd60e51b8252620003df9160040162000840565b60405180910390fd5b6000818152600183016020526040812054620004315750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000349565b50600062000349565b6060620003496001600160a01b03831660145b606060006200045e8360026200088b565b6200046b906002620008a5565b6001600160401b0381111562000485576200048562000606565b6040519080825280601f01601f191660200182016040528015620004b0576020820181803683370190505b509050600360fc1b81600081518110620004ce57620004ce620008bb565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620005005762000500620008bb565b60200101906001600160f81b031916908160001a9053506000620005268460026200088b565b62000533906001620008a5565b90505b6001811115620005b5576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106200056b576200056b620008bb565b1a60f81b828281518110620005845762000584620008bb565b60200101906001600160f81b031916908160001a90535060049490941c93620005ad81620008d1565b905062000536565b508315620003465760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401620003df565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200063157607f821691505b6020821081036200065257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200023d57600081815260208120601f850160051c81016020861015620006815750805b601f850160051c820191505b81811015620006a2578281556001016200068d565b505050505050565b81516001600160401b03811115620006c657620006c662000606565b620006de81620006d784546200061c565b8462000658565b602080601f831160018114620007165760008415620006fd5750858301515b600019600386901b1c1916600185901b178555620006a2565b600085815260208120601f198616915b82811015620007475788860151825594840194600190910190840162000726565b5085821015620007665787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200078957600080fd5b81516001600160a01b03811681146200034657600080fd5b60005b83811015620007be578181015183820152602001620007a4565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835162000801816017850160208801620007a1565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000834816028840160208801620007a1565b01602801949350505050565b602081526000825180602084015262000861816040850160208701620007a1565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000349576200034962000875565b8082018082111562000349576200034962000875565b634e487b7160e01b600052603260045260246000fd5b600081620008e357620008e362000875565b506000190190565b61105580620008fb6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80637b75083c116100b85780639ea5722b1161007c5780639ea5722b146102dd578063a217fddf14610304578063ca15c8731461030c578063d547741f1461031f578063e554d23414610332578063efd460651461034857600080fd5b80637b75083c1461026f57806384da92a7146102845780639010d07c1461029757806391d14854146102c257806395d89b41146102d557600080fd5b806333ea51a81161010a57806333ea51a8146101dd57806336568abe146101f0578063537f53121461020357806354fd4d5014610216578063611ed8cb146102355780636d70f7ae1461025c57600080fd5b806301ffc9a71461014757806306fdde031461016f578063248a9ca31461018457806324d7806c146101b55780632f2ff15d146101c8575b600080fd5b61015a610155366004610bc6565b61035b565b60405190151581526020015b60405180910390f35b610177610386565b6040516101669190610c14565b6101a7610192366004610c47565b60009081526020819052604090206001015490565b604051908152602001610166565b61015a6101c3366004610c7c565b610414565b6101db6101d6366004610c97565b61042e565b005b6101db6101eb366004610c7c565b610458565b6101db6101fe366004610c97565b6104f5565b6101db610211366004610cd9565b610573565b6004546102239060ff1681565b60405160ff9091168152602001610166565b6101a77f9e62e2fe49176359be731211a93beb8a4b41d6d0345b62f64c4f4e7b56ba503281565b61015a61026a366004610c7c565b610597565b6101a760008051602061100083398151915281565b6101db610292366004610cd9565b6105c3565b6102aa6102a5366004610d8a565b6105e7565b6040516001600160a01b039091168152602001610166565b61015a6102d0366004610c97565b610606565b61017761062f565b6101a77fb75d0c3e4b0e01fa592ef743acc55a0b7765ffd271595abd71aa99cbf3518c0781565b6101a7600081565b6101a761031a366004610c47565b61063c565b6101db61032d366004610c97565b610653565b60045461010090046001600160a01b03166102aa565b61015a610356366004610c7c565b610678565b60006001600160e01b03198216635a05180f60e01b14806103805750610380826108eb565b92915050565b6002805461039390610dac565b80601f01602080910402602001604051908101604052809291908181526020018280546103bf90610dac565b801561040c5780601f106103e15761010080835404028352916020019161040c565b820191906000526020600020905b8154815290600101906020018083116103ef57829003601f168201915b505050505081565b600061038060008051602061100083398151915283610606565b60008281526020819052604090206001015461044981610920565b610453838361092d565b505050565b61047060008051602061100083398151915233610606565b6104cd5760405162461bcd60e51b8152602060048201526024808201527f4163636573734d61737465723a2055736572206973206e6f7420617574686f726044820152631a5e995960e21b60648201526084015b60405180910390fd5b600480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b03811633146105655760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016104c4565b61056f828261094f565b5050565b60008051602061100083398151915261058b81610920565b60036104538382610e34565b60006103807f9e62e2fe49176359be731211a93beb8a4b41d6d0345b62f64c4f4e7b56ba503283610606565b6000805160206110008339815191526105db81610920565b60026104538382610e34565b60008281526001602052604081206105ff9083610971565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6003805461039390610dac565b60008181526001602052604081206103809061097d565b60008281526020819052604090206001015461066e81610920565b610453838361094f565b60006103807fb75d0c3e4b0e01fa592ef743acc55a0b7765ffd271595abd71aa99cbf3518c0783610606565b6106ae8282610606565b61056f576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556106e43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006105ff836001600160a01b038416610987565b60606103806001600160a01b03831660145b6060600061075e836002610f0a565b610769906002610f21565b67ffffffffffffffff81111561078157610781610cc3565b6040519080825280601f01601f1916602001820160405280156107ab576020820181803683370190505b509050600360fc1b816000815181106107c6576107c6610f34565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106107f5576107f5610f34565b60200101906001600160f81b031916908160001a9053506000610819846002610f0a565b610824906001610f21565b90505b600181111561089c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061085857610858610f34565b1a60f81b82828151811061086e5761086e610f34565b60200101906001600160f81b031916908160001a90535060049490941c9361089581610f4a565b9050610827565b5083156105ff5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104c4565b60006001600160e01b03198216637965db0b60e01b148061038057506301ffc9a760e01b6001600160e01b0319831614610380565b61092a81336109d6565b50565b61093782826106a4565b60008281526001602052604090206104539082610728565b6109598282610a2f565b60008281526001602052604090206104539082610a94565b60006105ff8383610aa9565b6000610380825490565b60008181526001830160205260408120546109ce57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610380565b506000610380565b6109e08282610606565b61056f576109ed8161073d565b6109f883602061074f565b604051602001610a09929190610f61565b60408051601f198184030181529082905262461bcd60e51b82526104c491600401610c14565b610a398282610606565b1561056f576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006105ff836001600160a01b038416610ad3565b6000826000018281548110610ac057610ac0610f34565b9060005260206000200154905092915050565b60008181526001830160205260408120548015610bbc576000610af7600183610fd6565b8554909150600090610b0b90600190610fd6565b9050818114610b70576000866000018281548110610b2b57610b2b610f34565b9060005260206000200154905080876000018481548110610b4e57610b4e610f34565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610b8157610b81610fe9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610380565b6000915050610380565b600060208284031215610bd857600080fd5b81356001600160e01b0319811681146105ff57600080fd5b60005b83811015610c0b578181015183820152602001610bf3565b50506000910152565b6020815260008251806020840152610c33816040850160208701610bf0565b601f01601f19169190910160400192915050565b600060208284031215610c5957600080fd5b5035919050565b80356001600160a01b0381168114610c7757600080fd5b919050565b600060208284031215610c8e57600080fd5b6105ff82610c60565b60008060408385031215610caa57600080fd5b82359150610cba60208401610c60565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610ceb57600080fd5b813567ffffffffffffffff80821115610d0357600080fd5b818401915084601f830112610d1757600080fd5b813581811115610d2957610d29610cc3565b604051601f8201601f19908116603f01168101908382118183101715610d5157610d51610cc3565b81604052828152876020848701011115610d6a57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215610d9d57600080fd5b50508035926020909101359150565b600181811c90821680610dc057607f821691505b602082108103610de057634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561045357600081815260208120601f850160051c81016020861015610e0d5750805b601f850160051c820191505b81811015610e2c57828155600101610e19565b505050505050565b815167ffffffffffffffff811115610e4e57610e4e610cc3565b610e6281610e5c8454610dac565b84610de6565b602080601f831160018114610e975760008415610e7f5750858301515b600019600386901b1c1916600185901b178555610e2c565b600085815260208120601f198616915b82811015610ec657888601518255948401946001909101908401610ea7565b5085821015610ee45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761038057610380610ef4565b8082018082111561038057610380610ef4565b634e487b7160e01b600052603260045260246000fd5b600081610f5957610f59610ef4565b506000190190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610f99816017850160208801610bf0565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610fca816028840160208801610bf0565b01602801949350505050565b8181038181111561038057610380610ef4565b634e487b7160e01b600052603160045260246000fdfe8f882e9b3b0c043c8507802fbb9a0ed808c8f0587361ab18424493e6841512a8a26469706673582212201e441b4ad3c74c2e8cc6aa5e7398782e49bb3e2ba1dc30fccb8d9798b0b8238b64736f6c63430008110033b75d0c3e4b0e01fa592ef743acc55a0b7765ffd271595abd71aa99cbf3518c078f882e9b3b0c043c8507802fbb9a0ed808c8f0587361ab18424493e6841512a89e62e2fe49176359be731211a93beb8a4b41d6d0345b62f64c4f4e7b56ba5032"; + "0x60c0604052600f60809081526e26bc9020b1b1b2b9b9a6b0b9ba32b960891b60a05260029062000030908262000697565b50604080518082019091526002815261414d60f01b602082015260039062000059908262000697565b503480156200006757600080fd5b506040516200198d3803806200198d8339810160408190526200008a9162000763565b620000a56000805160206200194d83398151915233620001a6565b620000c06000805160206200194d83398151915280620001b6565b620000ea6000805160206200196d8339815191526000805160206200194d833981519152620001b6565b620001146000805160206200192d8339815191526000805160206200196d833981519152620001b6565b6200012f6000805160206200196d8339815191523362000201565b6200014a6000805160206200194d8339815191528262000201565b620001656000805160206200196d8339815191528262000201565b620001806000805160206200192d8339815191528262000201565b600480546001600160a01b0319166001600160a01b0392909216919091179055620008d8565b620001b282826200022f565b5050565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000828152602081905260409020600101546200021e816200026d565b6200022a83836200022f565b505050565b6200024682826200027c60201b620006941760201c565b60008281526001602090815260409091206200022a918390620007186200031c821b17901c565b6200027981336200033c565b50565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620001b2576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002d83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600062000333836001600160a01b038416620003d5565b90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16620001b2576200037b816200042760201b6200072d1760201c565b620003918360206200073f6200043a821b17811c565b604051602001620003a4929190620007b4565b60408051601f198184030181529082905262461bcd60e51b8252620003cc916004016200082d565b60405180910390fd5b60008181526001830160205260408120546200041e5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000336565b50600062000336565b6060620003366001600160a01b03831660145b606060006200044b83600262000878565b6200045890600262000892565b6001600160401b03811115620004725762000472620005f3565b6040519080825280601f01601f1916602001820160405280156200049d576020820181803683370190505b509050600360fc1b81600081518110620004bb57620004bb620008a8565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620004ed57620004ed620008a8565b60200101906001600160f81b031916908160001a90535060006200051384600262000878565b6200052090600162000892565b90505b6001811115620005a2576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110620005585762000558620008a8565b1a60f81b828281518110620005715762000571620008a8565b60200101906001600160f81b031916908160001a90535060049490941c936200059a81620008be565b905062000523565b508315620003335760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401620003cc565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200061e57607f821691505b6020821081036200063f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200022a57600081815260208120601f850160051c810160208610156200066e5750805b601f850160051c820191505b818110156200068f578281556001016200067a565b505050505050565b81516001600160401b03811115620006b357620006b3620005f3565b620006cb81620006c4845462000609565b8462000645565b602080601f831160018114620007035760008415620006ea5750858301515b600019600386901b1c1916600185901b1785556200068f565b600085815260208120601f198616915b82811015620007345788860151825594840194600190910190840162000713565b5085821015620007535787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200077657600080fd5b81516001600160a01b03811681146200033357600080fd5b60005b83811015620007ab57818101518382015260200162000791565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351620007ee8160178501602088016200078e565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351620008218160288401602088016200078e565b01602801949350505050565b60208152600082518060208401526200084e8160408501602087016200078e565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000336576200033662000862565b8082018082111562000336576200033662000862565b634e487b7160e01b600052603260045260246000fd5b600081620008d057620008d062000862565b506000190190565b61104580620008e86000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80637b75083c116100b85780639ea5722b1161007c5780639ea5722b146102d8578063a217fddf146102ff578063ca15c87314610307578063d547741f1461031a578063e554d2341461032d578063efd460651461033e57600080fd5b80637b75083c1461026a57806384da92a71461027f5780639010d07c1461029257806391d14854146102bd57806395d89b41146102d057600080fd5b806333ea51a81161010a57806333ea51a8146101dd57806336568abe146101f0578063537f53121461020357806354fd4d5014610216578063611ed8cb146102305780636d70f7ae1461025757600080fd5b806301ffc9a71461014757806306fdde031461016f578063248a9ca31461018457806324d7806c146101b55780632f2ff15d146101c8575b600080fd5b61015a610155366004610bb6565b610351565b60405190151581526020015b60405180910390f35b61017761037c565b6040516101669190610c04565b6101a7610192366004610c37565b60009081526020819052604090206001015490565b604051908152602001610166565b61015a6101c3366004610c6c565b61040a565b6101db6101d6366004610c87565b610424565b005b6101db6101eb366004610c6c565b61044e565b6101db6101fe366004610c87565b6104e5565b6101db610211366004610cc9565b610563565b61021e600181565b60405160ff9091168152602001610166565b6101a77f9e62e2fe49176359be731211a93beb8a4b41d6d0345b62f64c4f4e7b56ba503281565b61015a610265366004610c6c565b610587565b6101a7600080516020610ff083398151915281565b6101db61028d366004610cc9565b6105b3565b6102a56102a0366004610d7a565b6105d7565b6040516001600160a01b039091168152602001610166565b61015a6102cb366004610c87565b6105f6565b61017761061f565b6101a77fb75d0c3e4b0e01fa592ef743acc55a0b7765ffd271595abd71aa99cbf3518c0781565b6101a7600081565b6101a7610315366004610c37565b61062c565b6101db610328366004610c87565b610643565b6004546001600160a01b03166102a5565b61015a61034c366004610c6c565b610668565b60006001600160e01b03198216635a05180f60e01b14806103765750610376826108db565b92915050565b6002805461038990610d9c565b80601f01602080910402602001604051908101604052809291908181526020018280546103b590610d9c565b80156104025780601f106103d757610100808354040283529160200191610402565b820191906000526020600020905b8154815290600101906020018083116103e557829003601f168201915b505050505081565b6000610376600080516020610ff0833981519152836105f6565b60008281526020819052604090206001015461043f81610910565b610449838361091d565b505050565b610466600080516020610ff0833981519152336105f6565b6104c35760405162461bcd60e51b8152602060048201526024808201527f4163636573734d61737465723a2055736572206973206e6f7420617574686f726044820152631a5e995960e21b60648201526084015b60405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811633146105555760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016104ba565b61055f828261093f565b5050565b600080516020610ff083398151915261057b81610910565b60036104498382610e24565b60006103767f9e62e2fe49176359be731211a93beb8a4b41d6d0345b62f64c4f4e7b56ba5032836105f6565b600080516020610ff08339815191526105cb81610910565b60026104498382610e24565b60008281526001602052604081206105ef9083610961565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6003805461038990610d9c565b60008181526001602052604081206103769061096d565b60008281526020819052604090206001015461065e81610910565b610449838361093f565b60006103767fb75d0c3e4b0e01fa592ef743acc55a0b7765ffd271595abd71aa99cbf3518c07836105f6565b61069e82826105f6565b61055f576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556106d43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006105ef836001600160a01b038416610977565b60606103766001600160a01b03831660145b6060600061074e836002610efa565b610759906002610f11565b67ffffffffffffffff81111561077157610771610cb3565b6040519080825280601f01601f19166020018201604052801561079b576020820181803683370190505b509050600360fc1b816000815181106107b6576107b6610f24565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106107e5576107e5610f24565b60200101906001600160f81b031916908160001a9053506000610809846002610efa565b610814906001610f11565b90505b600181111561088c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061084857610848610f24565b1a60f81b82828151811061085e5761085e610f24565b60200101906001600160f81b031916908160001a90535060049490941c9361088581610f3a565b9050610817565b5083156105ef5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016104ba565b60006001600160e01b03198216637965db0b60e01b148061037657506301ffc9a760e01b6001600160e01b0319831614610376565b61091a81336109c6565b50565b6109278282610694565b60008281526001602052604090206104499082610718565b6109498282610a1f565b60008281526001602052604090206104499082610a84565b60006105ef8383610a99565b6000610376825490565b60008181526001830160205260408120546109be57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610376565b506000610376565b6109d082826105f6565b61055f576109dd8161072d565b6109e883602061073f565b6040516020016109f9929190610f51565b60408051601f198184030181529082905262461bcd60e51b82526104ba91600401610c04565b610a2982826105f6565b1561055f576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006105ef836001600160a01b038416610ac3565b6000826000018281548110610ab057610ab0610f24565b9060005260206000200154905092915050565b60008181526001830160205260408120548015610bac576000610ae7600183610fc6565b8554909150600090610afb90600190610fc6565b9050818114610b60576000866000018281548110610b1b57610b1b610f24565b9060005260206000200154905080876000018481548110610b3e57610b3e610f24565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610b7157610b71610fd9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610376565b6000915050610376565b600060208284031215610bc857600080fd5b81356001600160e01b0319811681146105ef57600080fd5b60005b83811015610bfb578181015183820152602001610be3565b50506000910152565b6020815260008251806020840152610c23816040850160208701610be0565b601f01601f19169190910160400192915050565b600060208284031215610c4957600080fd5b5035919050565b80356001600160a01b0381168114610c6757600080fd5b919050565b600060208284031215610c7e57600080fd5b6105ef82610c50565b60008060408385031215610c9a57600080fd5b82359150610caa60208401610c50565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215610cdb57600080fd5b813567ffffffffffffffff80821115610cf357600080fd5b818401915084601f830112610d0757600080fd5b813581811115610d1957610d19610cb3565b604051601f8201601f19908116603f01168101908382118183101715610d4157610d41610cb3565b81604052828152876020848701011115610d5a57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215610d8d57600080fd5b50508035926020909101359150565b600181811c90821680610db057607f821691505b602082108103610dd057634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561044957600081815260208120601f850160051c81016020861015610dfd5750805b601f850160051c820191505b81811015610e1c57828155600101610e09565b505050505050565b815167ffffffffffffffff811115610e3e57610e3e610cb3565b610e5281610e4c8454610d9c565b84610dd6565b602080601f831160018114610e875760008415610e6f5750858301515b600019600386901b1c1916600185901b178555610e1c565b600085815260208120601f198616915b82811015610eb657888601518255948401946001909101908401610e97565b5085821015610ed45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761037657610376610ee4565b8082018082111561037657610376610ee4565b634e487b7160e01b600052603260045260246000fd5b600081610f4957610f49610ee4565b506000190190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610f89816017850160208801610be0565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351610fba816028840160208801610be0565b01602801949350505050565b8181038181111561037657610376610ee4565b634e487b7160e01b600052603160045260246000fdfe8f882e9b3b0c043c8507802fbb9a0ed808c8f0587361ab18424493e6841512a8a26469706673582212208f270800ce771534938de32c0d3373ffdd78d2eb754c09a2b201d4ff77357fb764736f6c63430008110033b75d0c3e4b0e01fa592ef743acc55a0b7765ffd271595abd71aa99cbf3518c078f882e9b3b0c043c8507802fbb9a0ed808c8f0587361ab18424493e6841512a89e62e2fe49176359be731211a93beb8a4b41d6d0345b62f64c4f4e7b56ba5032"; type AccessMasterConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/EternalSoul__factory.ts b/typechain-types/factories/EternalSoul__factory.ts index 73e52dd..8dd3980 100644 --- a/typechain-types/factories/EternalSoul__factory.ts +++ b/typechain-types/factories/EternalSoul__factory.ts @@ -755,7 +755,7 @@ const _abi = [ ]; const _bytecode = - "0x610140604052600c805460ff191660011790553480156200001f57600080fd5b50604051620030323803806200303283398101604081905262000042916200024d565b838388886000620000548382620003d9565b506001620000638282620003d9565b5050825160209384012082519284019290922060e08390526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818901819052818301979097526060810194909452608080850193909352308483018190528151808603909301835260c0948501909152815191909601209052929092526101205250600d620001038682620003d9565b50601080546001600160a01b0319166001600160a01b038316908117909155600c8054610100600160a81b031916610100909202919091179055600e6200014b8582620003d9565b50600f6200015a8482620003d9565b5050600a5550620004a59350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200019357600080fd5b81516001600160401b0380821115620001b057620001b06200016b565b604051601f8301601f19908116603f01168101908282118183101715620001db57620001db6200016b565b81604052838152602092508683858801011115620001f857600080fd5b600091505b838210156200021c5785820183015181830184015290820190620001fd565b600093810190920192909252949350505050565b80516001600160a01b03811681146200024857600080fd5b919050565b600080600080600080600060e0888a0312156200026957600080fd5b87516001600160401b03808211156200028157600080fd5b6200028f8b838c0162000181565b985060208a0151915080821115620002a657600080fd5b620002b48b838c0162000181565b975060408a0151915080821115620002cb57600080fd5b620002d98b838c0162000181565b965060608a0151915080821115620002f057600080fd5b620002fe8b838c0162000181565b955060808a01519150808211156200031557600080fd5b50620003248a828b0162000181565b93505060a088015191506200033c60c0890162000230565b905092959891949750929550565b600181811c908216806200035f57607f821691505b6020821081036200038057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003d457600081815260208120601f850160051c81016020861015620003af5750805b601f850160051c820191505b81811015620003d057828155600101620003bb565b5050505b505050565b81516001600160401b03811115620003f557620003f56200016b565b6200040d816200040684546200034a565b8462000386565b602080601f8311600181146200044557600084156200042c5750858301515b600019600386901b1c1916600185901b178555620003d0565b600085815260208120601f198616915b82811015620004765788860151825594840194600190910190840162000455565b5085821015620004955787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161012051612b3d620004f56000396000611b0601526000611b5501526000611b3001526000611a8901526000611ab301526000611add0152612b3d6000f3fe6080604052600436106101c25760003560e01c806354fd4d50116100f757806395d89b4111610095578063c87b56dd11610064578063c87b56dd14610501578063e3faad9414610521578063e985e9c514610536578063f26d66c01461057f57600080fd5b806395d89b4114610497578063a22cb465146104ac578063a4157296146104cc578063b88d4fde146104e157600080fd5b80636771309b116100d15780636771309b146104225780636c0360eb1461044257806370a082311461045757806381530b681461047757600080fd5b806354fd4d50146103b657806355f804b3146103e25780636352211e1461040257600080fd5b806318160ddd116101645780633a61d52c1161013e5780633a61d52c1461033657806342842e0e14610356578063474c1520146103765780634f6ccce71461039657600080fd5b806318160ddd146102e157806323b872dd146102f65780632f745c591461031657600080fd5b8063081812fc116101a0578063081812fc1461024c578063095ea7b3146102845780630aa7c854146102a65780630d39fc81146102cb57600080fd5b806301ffc9a7146101c757806304b444d9146101fc57806306fdde031461022a575b600080fd5b3480156101d357600080fd5b506101e76101e236600461236a565b610592565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5061021c610217366004612448565b6105a3565b6040519081526020016101f3565b34801561023657600080fd5b5061023f6106f2565b6040516101f391906124de565b34801561025857600080fd5b5061026c6102673660046124f1565b610784565b6040516001600160a01b0390911681526020016101f3565b34801561029057600080fd5b506102a461029f36600461250a565b6107ab565b005b3480156102b257600080fd5b50600c5461026c9061010090046001600160a01b031681565b3480156102d757600080fd5b5061021c600a5481565b3480156102ed57600080fd5b5060085461021c565b34801561030257600080fd5b506102a4610311366004612536565b6108c0565b34801561032257600080fd5b5061021c61033136600461250a565b6108f2565b34801561034257600080fd5b5061026c610351366004612577565b610988565b34801561036257600080fd5b506102a4610371366004612536565b610a66565b34801561038257600080fd5b506102a46103913660046124f1565b610a81565b3480156103a257600080fd5b5061021c6103b13660046124f1565b610b3b565b3480156103c257600080fd5b50600c546103d09060ff1681565b60405160ff90911681526020016101f3565b3480156103ee57600080fd5b506102a46103fd3660046125b2565b610bce565b34801561040e57600080fd5b5061026c61041d3660046124f1565b610c74565b34801561042e57600080fd5b5061021c61043d366004612448565b610cd4565b34801561044e57600080fd5b5061023f610dd3565b34801561046357600080fd5b5061021c6104723660046125e7565b610e61565b34801561048357600080fd5b506102a46104923660046124f1565b600a55565b3480156104a357600080fd5b5061023f610ee7565b3480156104b857600080fd5b506102a46104c7366004612612565b610ef6565b3480156104d857600080fd5b5061023f610f01565b3480156104ed57600080fd5b506102a46104fc36600461264b565b610f0e565b34801561050d57600080fd5b5061023f61051c3660046124f1565b610f46565b34801561052d57600080fd5b5061023f61107e565b34801561054257600080fd5b506101e76105513660046126cb565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61021c61058d366004612577565b61108b565b600061059d826112d7565b92915050565b6010546000906001600160a01b031663efd46065336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156105fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062091906126f9565b61067d5760405162461bcd60e51b815260206004820152602360248201527f457465726e616c536f756c3a2055736572206973206e6f7420617574686f72696044820152621e995960ea1b60648201526084015b60405180910390fd5b600b805490600061068d8361272c565b9091555050600b5461069f84826112fc565b6106a98184611316565b336001600160a01b0316817fdb2bfbc11c8a6350afe6406725431235c99ed05824d40daee07eae3d1fafb70b856040516106e391906124de565b60405180910390a39392505050565b60606000805461070190612745565b80601f016020809104026020016040519081016040528092919081815260200182805461072d90612745565b801561077a5780601f1061074f5761010080835404028352916020019161077a565b820191906000526020600020905b81548152906001019060200180831161075d57829003601f168201915b5050505050905090565b600061078f82611392565b506000908152600460205260409020546001600160a01b031690565b60006107b682610c74565b9050806001600160a01b0316836001600160a01b0316036108235760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610674565b336001600160a01b038216148061083f575061083f8133610551565b6108b15760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610674565b6108bb83836113f4565b505050565b6108cb335b82611462565b6108e75760405162461bcd60e51b81526004016106749061277f565b6108bb8383836114e0565b60006108fd83610e61565b821061095f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610674565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600080610a0f7f6a50cd13df4d49c839384eb15944b5713af5a276ddb78e79557d1798dbca09fa84356109be60208701876127cc565b6040516109cc929190612813565b6040519081900381206109f49392916020019283526020830191909152604082015260600190565b60405160208183030381529060405280519060200120611651565b90506000610a5e82610a2460408701876127cc565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061169f92505050565b949350505050565b6108bb83838360405180602001604052806000815250610f0e565b610a8a336108c5565b610af15760405162461bcd60e51b815260206004820152603260248201527f457465726e616c536f756c3a2043616c6c6572206973206e6f7420746f6b656e604482015271081bdddb995c881bdc88185c1c1c9bdd995960721b6064820152608401610674565b610afa816116c3565b807fc3a3686eed3b315ba4f3b1a0bf88b63a4525e3f27314495ba7dc0a40a6c4cd90336040516001600160a01b03909116815260200160405180910390a250565b6000610b4660085490565b8210610ba95760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610674565b60088281548110610bbc57610bbc612823565b90600052602060002001549050919050565b6010546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4891906126f9565b610c645760405162461bcd60e51b815260040161067490612839565b600d610c7082826128cb565b5050565b6000818152600260205260408120546001600160a01b03168061059d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610674565b6010546000906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610d2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5191906126f9565b610d6d5760405162461bcd60e51b815260040161067490612839565b600b8054906000610d7d8361272c565b9091555050600b54610d8f84826112fc565b610d998184611316565b836001600160a01b0316817fdb2bfbc11c8a6350afe6406725431235c99ed05824d40daee07eae3d1fafb70b856040516106e391906124de565b600d8054610de090612745565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0c90612745565b8015610e595780601f10610e2e57610100808354040283529160200191610e59565b820191906000526020600020905b815481529060010190602001808311610e3c57829003601f168201915b505050505081565b60006001600160a01b038216610ecb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610674565b506001600160a01b031660009081526003602052604090205490565b60606001805461070190612745565b610c70338383611766565b600f8054610de090612745565b610f183383611462565b610f345760405162461bcd60e51b81526004016106749061277f565b610f4084848484611834565b50505050565b6000818152600260205260409020546060906001600160a01b0316610fad5760405162461bcd60e51b815260206004820152601f60248201527f457465726e616c536f756c3a204e6f6e2d4578697374656e74204173736574006044820152606401610674565b60008281526011602052604090208054610fc690612745565b9050600003610fe0576000610fd9611867565b9392505050565b60008281526011602052604090208054610ff990612745565b80601f016020809104026020016040519081016040528092919081815260200182805461102590612745565b80156110725780601f1061104757610100808354040283529160200191611072565b820191906000526020600020905b81548152906001019060200180831161105557829003601f168201915b50505050509050919050565b600e8054610de090612745565b6010546000906001600160a01b0316636d70f7ae6110a884610988565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156110ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111091906126f9565b61114f5760405162461bcd60e51b815260206004820152601060248201526f2bb937b7339039b4b3b730ba3ab9329760811b6044820152606401610674565b600a54156111a15781353410156111a15760405162461bcd60e51b81526020600482015260166024820152752737ba1022b737bab3b41032ba3432b91039b2b73a1760511b6044820152606401610674565b600b80549060006111b18361272c565b9091555050600b546111c333826112fc565b61120e816111d460208601866127cc565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061131692505050565b60105460408051633955348d60e21b815290516000926001600160a01b03169163e554d2349160048083019260209291908290030181865afa158015611258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127c919061298b565b905061128a33828434611876565b33827fdb2bfbc11c8a6350afe6406725431235c99ed05824d40daee07eae3d1fafb70b6112ba60208801886127cc565b6040516112c89291906129a8565b60405180910390a35092915050565b60006001600160e01b0319821663780e9d6360e01b148061059d575061059d82611972565b610c708282604051806020016040528060008152506119c2565b6000828152600260205260409020546001600160a01b031661137a5760405162461bcd60e51b815260206004820152601f60248201527f457465726e616c536f756c3a204e6f6e2d4578697374656e74204173736574006044820152606401610674565b60008281526011602052604090206108bb82826128cb565b6000818152600260205260409020546001600160a01b03166113f15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610674565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061142982610c74565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061146e83610c74565b9050806001600160a01b0316846001600160a01b031614806114b557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610a5e5750836001600160a01b03166114ce84610784565b6001600160a01b031614949350505050565b826001600160a01b03166114f382610c74565b6001600160a01b0316146115195760405162461bcd60e51b8152600401610674906129d7565b6001600160a01b03821661157b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610674565b61158883838360016119f5565b826001600160a01b031661159b82610c74565b6001600160a01b0316146115c15760405162461bcd60e51b8152600401610674906129d7565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600061059d61165e611a7c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006116ae8585611ba3565b915091506116bb81611be8565b509392505050565b60006116ce82610c74565b90506116de8160008460016119f5565b6116e782610c74565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b0316036117c75760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610674565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61183f8484846114e0565b61184b84848484611d32565b610f405760405162461bcd60e51b815260040161067490612a1c565b6060600d805461070190612745565b6000836001600160a01b03168260405160006040518083038185875af1925050503d80600081146118c3576040519150601f19603f3d011682016040523d82523d6000602084013e6118c8565b606091505b50509050806119195760405162461bcd60e51b815260206004820152601c60248201527f457465726e616c536f756c3a205472616e73666572206661696c6564000000006044820152606401610674565b604080516001600160a01b03808816825286166020820152908101849052606081018390527faeadc2c673108f922a1042ef404b73ae1af992c9ae54249a4a7d13ef21ef2c189060800160405180910390a15050505050565b60006001600160e01b031982166380ac58cd60e01b14806119a357506001600160e01b03198216635b5e139f60e01b145b8061059d57506301ffc9a760e01b6001600160e01b031983161461059d565b6119cc8383611e33565b6119d96000848484611d32565b6108bb5760405162461bcd60e51b815260040161067490612a1c565b6001600160a01b0384161580611a1257506001600160a01b038316155b611a705760405162461bcd60e51b815260206004820152602960248201527f457465726e616c536f756c203a2041737365742063616e6e6f74206265207472604482015268185b9cd9995c9c995960ba1b6064820152608401610674565b610f4084848484611fcc565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611ad557507f000000000000000000000000000000000000000000000000000000000000000046145b15611aff57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000808251604103611bd95760208301516040840151606085015160001a611bcd87828585612100565b94509450505050611be1565b506000905060025b9250929050565b6000816004811115611bfc57611bfc612a6e565b03611c045750565b6001816004811115611c1857611c18612a6e565b03611c655760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610674565b6002816004811115611c7957611c79612a6e565b03611cc65760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610674565b6003816004811115611cda57611cda612a6e565b036113f15760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610674565b60006001600160a01b0384163b15611e2857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d76903390899088908890600401612a84565b6020604051808303816000875af1925050508015611db1575060408051601f3d908101601f19168201909252611dae91810190612ac1565b60015b611e0e573d808015611ddf576040519150601f19603f3d011682016040523d82523d6000602084013e611de4565b606091505b508051600003611e065760405162461bcd60e51b815260040161067490612a1c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610a5e565b506001949350505050565b6001600160a01b038216611e895760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610674565b6000818152600260205260409020546001600160a01b031615611eee5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610674565b611efc6000838360016119f5565b6000818152600260205260409020546001600160a01b031615611f615760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610674565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600181111561203b5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610674565b816001600160a01b0385166120975761209281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6120ba565b836001600160a01b0316856001600160a01b0316146120ba576120ba85826121c4565b6001600160a01b0384166120d6576120d181612261565b6120f9565b846001600160a01b0316846001600160a01b0316146120f9576120f98482612310565b5050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561213757506000905060036121bb565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561218b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166121b4576000600192509250506121bb565b9150600090505b94509492505050565b600060016121d184610e61565b6121db9190612ade565b60008381526007602052604090205490915080821461222e576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061227390600190612ade565b6000838152600960205260408120546008805493945090928490811061229b5761229b612823565b9060005260206000200154905080600883815481106122bc576122bc612823565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806122f4576122f4612af1565b6001900381819060005260206000200160009055905550505050565b600061231b83610e61565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b0319811681146113f157600080fd5b60006020828403121561237c57600080fd5b8135610fd981612354565b6001600160a01b03811681146113f157600080fd5b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156123cd576123cd61239c565b604051601f8501601f19908116603f011681019082821181831017156123f5576123f561239c565b8160405280935085815286868601111561240e57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261243957600080fd5b610fd9838335602085016123b2565b6000806040838503121561245b57600080fd5b823561246681612387565b9150602083013567ffffffffffffffff81111561248257600080fd5b61248e85828601612428565b9150509250929050565b6000815180845260005b818110156124be576020818501810151868301820152016124a2565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610fd96020830184612498565b60006020828403121561250357600080fd5b5035919050565b6000806040838503121561251d57600080fd5b823561252881612387565b946020939093013593505050565b60008060006060848603121561254b57600080fd5b833561255681612387565b9250602084013561256681612387565b929592945050506040919091013590565b60006020828403121561258957600080fd5b813567ffffffffffffffff8111156125a057600080fd5b820160608185031215610fd957600080fd5b6000602082840312156125c457600080fd5b813567ffffffffffffffff8111156125db57600080fd5b610a5e84828501612428565b6000602082840312156125f957600080fd5b8135610fd981612387565b80151581146113f157600080fd5b6000806040838503121561262557600080fd5b823561263081612387565b9150602083013561264081612604565b809150509250929050565b6000806000806080858703121561266157600080fd5b843561266c81612387565b9350602085013561267c81612387565b925060408501359150606085013567ffffffffffffffff81111561269f57600080fd5b8501601f810187136126b057600080fd5b6126bf878235602084016123b2565b91505092959194509250565b600080604083850312156126de57600080fd5b82356126e981612387565b9150602083013561264081612387565b60006020828403121561270b57600080fd5b8151610fd981612604565b634e487b7160e01b600052601160045260246000fd5b60006001820161273e5761273e612716565b5060010190565b600181811c9082168061275957607f821691505b60208210810361277957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6000808335601e198436030181126127e357600080fd5b83018035915067ffffffffffffffff8211156127fe57600080fd5b602001915036819003821315611be157600080fd5b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b60208082526024908201527f457465726e616c536f756c3a2055736572206973206e6f7420617574686f726960408201526303d32b2160e51b606082015260800190565b601f8211156108bb57600081815260208120601f850160051c810160208610156128a45750805b601f850160051c820191505b818110156128c3578281556001016128b0565b505050505050565b815167ffffffffffffffff8111156128e5576128e561239c565b6128f9816128f38454612745565b8461287d565b602080601f83116001811461292e57600084156129165750858301515b600019600386901b1c1916600185901b1785556128c3565b600085815260208120601f198616915b8281101561295d5788860151825594840194600190910190840161293e565b508582101561297b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561299d57600080fd5b8151610fd981612387565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ab790830184612498565b9695505050505050565b600060208284031215612ad357600080fd5b8151610fd981612354565b8181038181111561059d5761059d612716565b634e487b7160e01b600052603160045260246000fdfea26469706673582212204dfb2ad1687490775200e52675e8d5e16c05ff9ede6cb1de2e6b5f5e366ce9fc64736f6c63430008110033"; + "0x6101406040523480156200001257600080fd5b506040516200300d3803806200300d833981016040819052620000359162000232565b838388886000620000478382620003be565b506001620000568282620003be565b5050825160209384012082519284019290922060e08390526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818901819052818301979097526060810194909452608080850193909352308483018190528151808603909301835260c0948501909152815191909601209052929092526101205250600d620000f68682620003be565b50601080546001600160a01b0383166001600160a01b03199182168117909255600c80549091169091179055600e620001308582620003be565b50600f6200013f8482620003be565b5050600a55506200048a9350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200017857600080fd5b81516001600160401b038082111562000195576200019562000150565b604051601f8301601f19908116603f01168101908282118183101715620001c057620001c062000150565b81604052838152602092508683858801011115620001dd57600080fd5b600091505b83821015620002015785820183015181830184015290820190620001e2565b600093810190920192909252949350505050565b80516001600160a01b03811681146200022d57600080fd5b919050565b600080600080600080600060e0888a0312156200024e57600080fd5b87516001600160401b03808211156200026657600080fd5b620002748b838c0162000166565b985060208a01519150808211156200028b57600080fd5b620002998b838c0162000166565b975060408a0151915080821115620002b057600080fd5b620002be8b838c0162000166565b965060608a0151915080821115620002d557600080fd5b620002e38b838c0162000166565b955060808a0151915080821115620002fa57600080fd5b50620003098a828b0162000166565b93505060a088015191506200032160c0890162000215565b905092959891949750929550565b600181811c908216806200034457607f821691505b6020821081036200036557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003b957600081815260208120601f850160051c81016020861015620003945750805b601f850160051c820191505b81811015620003b557828155600101620003a0565b5050505b505050565b81516001600160401b03811115620003da57620003da62000150565b620003f281620003eb84546200032f565b846200036b565b602080601f8311600181146200042a5760008415620004115750858301515b600019600386901b1c1916600185901b178555620003b5565b600085815260208120601f198616915b828110156200045b578886015182559484019460019091019084016200043a565b50858210156200047a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161012051612b33620004da6000396000611afc01526000611b4b01526000611b2601526000611a7f01526000611aa901526000611ad30152612b336000f3fe6080604052600436106101c25760003560e01c806354fd4d50116100f757806395d89b4111610095578063c87b56dd11610064578063c87b56dd146104f7578063e3faad9414610517578063e985e9c51461052c578063f26d66c01461057557600080fd5b806395d89b411461048d578063a22cb465146104a2578063a4157296146104c2578063b88d4fde146104d757600080fd5b80636771309b116100d15780636771309b146104185780636c0360eb1461043857806370a082311461044d57806381530b681461046d57600080fd5b806354fd4d50146103b157806355f804b3146103d85780636352211e146103f857600080fd5b806318160ddd116101645780633a61d52c1161013e5780633a61d52c1461033157806342842e0e14610351578063474c1520146103715780634f6ccce71461039157600080fd5b806318160ddd146102dc57806323b872dd146102f15780632f745c591461031157600080fd5b8063081812fc116101a0578063081812fc1461024c578063095ea7b3146102845780630aa7c854146102a65780630d39fc81146102c657600080fd5b806301ffc9a7146101c757806304b444d9146101fc57806306fdde031461022a575b600080fd5b3480156101d357600080fd5b506101e76101e2366004612360565b610588565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5061021c61021736600461243e565b610599565b6040519081526020016101f3565b34801561023657600080fd5b5061023f6106e8565b6040516101f391906124d4565b34801561025857600080fd5b5061026c6102673660046124e7565b61077a565b6040516001600160a01b0390911681526020016101f3565b34801561029057600080fd5b506102a461029f366004612500565b6107a1565b005b3480156102b257600080fd5b50600c5461026c906001600160a01b031681565b3480156102d257600080fd5b5061021c600a5481565b3480156102e857600080fd5b5060085461021c565b3480156102fd57600080fd5b506102a461030c36600461252c565b6108b6565b34801561031d57600080fd5b5061021c61032c366004612500565b6108e8565b34801561033d57600080fd5b5061026c61034c36600461256d565b61097e565b34801561035d57600080fd5b506102a461036c36600461252c565b610a5c565b34801561037d57600080fd5b506102a461038c3660046124e7565b610a77565b34801561039d57600080fd5b5061021c6103ac3660046124e7565b610b31565b3480156103bd57600080fd5b506103c6600181565b60405160ff90911681526020016101f3565b3480156103e457600080fd5b506102a46103f33660046125a8565b610bc4565b34801561040457600080fd5b5061026c6104133660046124e7565b610c6a565b34801561042457600080fd5b5061021c61043336600461243e565b610cca565b34801561044457600080fd5b5061023f610dc9565b34801561045957600080fd5b5061021c6104683660046125dd565b610e57565b34801561047957600080fd5b506102a46104883660046124e7565b600a55565b34801561049957600080fd5b5061023f610edd565b3480156104ae57600080fd5b506102a46104bd366004612608565b610eec565b3480156104ce57600080fd5b5061023f610ef7565b3480156104e357600080fd5b506102a46104f2366004612641565b610f04565b34801561050357600080fd5b5061023f6105123660046124e7565b610f3c565b34801561052357600080fd5b5061023f611074565b34801561053857600080fd5b506101e76105473660046126c1565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61021c61058336600461256d565b611081565b6000610593826112cd565b92915050565b6010546000906001600160a01b031663efd46065336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156105f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061691906126ef565b6106735760405162461bcd60e51b815260206004820152602360248201527f457465726e616c536f756c3a2055736572206973206e6f7420617574686f72696044820152621e995960ea1b60648201526084015b60405180910390fd5b600b805490600061068383612722565b9091555050600b5461069584826112f2565b61069f818461130c565b336001600160a01b0316817fdb2bfbc11c8a6350afe6406725431235c99ed05824d40daee07eae3d1fafb70b856040516106d991906124d4565b60405180910390a39392505050565b6060600080546106f79061273b565b80601f01602080910402602001604051908101604052809291908181526020018280546107239061273b565b80156107705780601f1061074557610100808354040283529160200191610770565b820191906000526020600020905b81548152906001019060200180831161075357829003601f168201915b5050505050905090565b600061078582611388565b506000908152600460205260409020546001600160a01b031690565b60006107ac82610c6a565b9050806001600160a01b0316836001600160a01b0316036108195760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161066a565b336001600160a01b038216148061083557506108358133610547565b6108a75760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161066a565b6108b183836113ea565b505050565b6108c1335b82611458565b6108dd5760405162461bcd60e51b815260040161066a90612775565b6108b18383836114d6565b60006108f383610e57565b82106109555760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161066a565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600080610a057f6a50cd13df4d49c839384eb15944b5713af5a276ddb78e79557d1798dbca09fa84356109b460208701876127c2565b6040516109c2929190612809565b6040519081900381206109ea9392916020019283526020830191909152604082015260600190565b60405160208183030381529060405280519060200120611647565b90506000610a5482610a1a60408701876127c2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061169592505050565b949350505050565b6108b183838360405180602001604052806000815250610f04565b610a80336108bb565b610ae75760405162461bcd60e51b815260206004820152603260248201527f457465726e616c536f756c3a2043616c6c6572206973206e6f7420746f6b656e604482015271081bdddb995c881bdc88185c1c1c9bdd995960721b606482015260840161066a565b610af0816116b9565b807fc3a3686eed3b315ba4f3b1a0bf88b63a4525e3f27314495ba7dc0a40a6c4cd90336040516001600160a01b03909116815260200160405180910390a250565b6000610b3c60085490565b8210610b9f5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161066a565b60088281548110610bb257610bb2612819565b90600052602060002001549050919050565b6010546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3e91906126ef565b610c5a5760405162461bcd60e51b815260040161066a9061282f565b600d610c6682826128c1565b5050565b6000818152600260205260408120546001600160a01b0316806105935760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161066a565b6010546000906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4791906126ef565b610d635760405162461bcd60e51b815260040161066a9061282f565b600b8054906000610d7383612722565b9091555050600b54610d8584826112f2565b610d8f818461130c565b836001600160a01b0316817fdb2bfbc11c8a6350afe6406725431235c99ed05824d40daee07eae3d1fafb70b856040516106d991906124d4565b600d8054610dd69061273b565b80601f0160208091040260200160405190810160405280929190818152602001828054610e029061273b565b8015610e4f5780601f10610e2457610100808354040283529160200191610e4f565b820191906000526020600020905b815481529060010190602001808311610e3257829003601f168201915b505050505081565b60006001600160a01b038216610ec15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161066a565b506001600160a01b031660009081526003602052604090205490565b6060600180546106f79061273b565b610c6633838361175c565b600f8054610dd69061273b565b610f0e3383611458565b610f2a5760405162461bcd60e51b815260040161066a90612775565b610f368484848461182a565b50505050565b6000818152600260205260409020546060906001600160a01b0316610fa35760405162461bcd60e51b815260206004820152601f60248201527f457465726e616c536f756c3a204e6f6e2d4578697374656e7420417373657400604482015260640161066a565b60008281526011602052604090208054610fbc9061273b565b9050600003610fd6576000610fcf61185d565b9392505050565b60008281526011602052604090208054610fef9061273b565b80601f016020809104026020016040519081016040528092919081815260200182805461101b9061273b565b80156110685780601f1061103d57610100808354040283529160200191611068565b820191906000526020600020905b81548152906001019060200180831161104b57829003601f168201915b50505050509050919050565b600e8054610dd69061273b565b6010546000906001600160a01b0316636d70f7ae61109e8461097e565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110691906126ef565b6111455760405162461bcd60e51b815260206004820152601060248201526f2bb937b7339039b4b3b730ba3ab9329760811b604482015260640161066a565b600a54156111975781353410156111975760405162461bcd60e51b81526020600482015260166024820152752737ba1022b737bab3b41032ba3432b91039b2b73a1760511b604482015260640161066a565b600b80549060006111a783612722565b9091555050600b546111b933826112f2565b611204816111ca60208601866127c2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061130c92505050565b60105460408051633955348d60e21b815290516000926001600160a01b03169163e554d2349160048083019260209291908290030181865afa15801561124e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112729190612981565b90506112803382843461186c565b33827fdb2bfbc11c8a6350afe6406725431235c99ed05824d40daee07eae3d1fafb70b6112b060208801886127c2565b6040516112be92919061299e565b60405180910390a35092915050565b60006001600160e01b0319821663780e9d6360e01b1480610593575061059382611968565b610c668282604051806020016040528060008152506119b8565b6000828152600260205260409020546001600160a01b03166113705760405162461bcd60e51b815260206004820152601f60248201527f457465726e616c536f756c3a204e6f6e2d4578697374656e7420417373657400604482015260640161066a565b60008281526011602052604090206108b182826128c1565b6000818152600260205260409020546001600160a01b03166113e75760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161066a565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061141f82610c6a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061146483610c6a565b9050806001600160a01b0316846001600160a01b031614806114ab57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610a545750836001600160a01b03166114c48461077a565b6001600160a01b031614949350505050565b826001600160a01b03166114e982610c6a565b6001600160a01b03161461150f5760405162461bcd60e51b815260040161066a906129cd565b6001600160a01b0382166115715760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161066a565b61157e83838360016119eb565b826001600160a01b031661159182610c6a565b6001600160a01b0316146115b75760405162461bcd60e51b815260040161066a906129cd565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000610593611654611a72565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006116a48585611b99565b915091506116b181611bde565b509392505050565b60006116c482610c6a565b90506116d48160008460016119eb565b6116dd82610c6a565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b0316036117bd5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161066a565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6118358484846114d6565b61184184848484611d28565b610f365760405162461bcd60e51b815260040161066a90612a12565b6060600d80546106f79061273b565b6000836001600160a01b03168260405160006040518083038185875af1925050503d80600081146118b9576040519150601f19603f3d011682016040523d82523d6000602084013e6118be565b606091505b505090508061190f5760405162461bcd60e51b815260206004820152601c60248201527f457465726e616c536f756c3a205472616e73666572206661696c656400000000604482015260640161066a565b604080516001600160a01b03808816825286166020820152908101849052606081018390527faeadc2c673108f922a1042ef404b73ae1af992c9ae54249a4a7d13ef21ef2c189060800160405180910390a15050505050565b60006001600160e01b031982166380ac58cd60e01b148061199957506001600160e01b03198216635b5e139f60e01b145b8061059357506301ffc9a760e01b6001600160e01b0319831614610593565b6119c28383611e29565b6119cf6000848484611d28565b6108b15760405162461bcd60e51b815260040161066a90612a12565b6001600160a01b0384161580611a0857506001600160a01b038316155b611a665760405162461bcd60e51b815260206004820152602960248201527f457465726e616c536f756c203a2041737365742063616e6e6f74206265207472604482015268185b9cd9995c9c995960ba1b606482015260840161066a565b610f3684848484611fc2565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611acb57507f000000000000000000000000000000000000000000000000000000000000000046145b15611af557507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000808251604103611bcf5760208301516040840151606085015160001a611bc3878285856120f6565b94509450505050611bd7565b506000905060025b9250929050565b6000816004811115611bf257611bf2612a64565b03611bfa5750565b6001816004811115611c0e57611c0e612a64565b03611c5b5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161066a565b6002816004811115611c6f57611c6f612a64565b03611cbc5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161066a565b6003816004811115611cd057611cd0612a64565b036113e75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161066a565b60006001600160a01b0384163b15611e1e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d6c903390899088908890600401612a7a565b6020604051808303816000875af1925050508015611da7575060408051601f3d908101601f19168201909252611da491810190612ab7565b60015b611e04573d808015611dd5576040519150601f19603f3d011682016040523d82523d6000602084013e611dda565b606091505b508051600003611dfc5760405162461bcd60e51b815260040161066a90612a12565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610a54565b506001949350505050565b6001600160a01b038216611e7f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161066a565b6000818152600260205260409020546001600160a01b031615611ee45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161066a565b611ef26000838360016119eb565b6000818152600260205260409020546001600160a01b031615611f575760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161066a565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60018111156120315760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b606482015260840161066a565b816001600160a01b03851661208d5761208881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6120b0565b836001600160a01b0316856001600160a01b0316146120b0576120b085826121ba565b6001600160a01b0384166120cc576120c781612257565b6120ef565b846001600160a01b0316846001600160a01b0316146120ef576120ef8482612306565b5050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561212d57506000905060036121b1565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612181573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166121aa576000600192509250506121b1565b9150600090505b94509492505050565b600060016121c784610e57565b6121d19190612ad4565b600083815260076020526040902054909150808214612224576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061226990600190612ad4565b6000838152600960205260408120546008805493945090928490811061229157612291612819565b9060005260206000200154905080600883815481106122b2576122b2612819565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806122ea576122ea612ae7565b6001900381819060005260206000200160009055905550505050565b600061231183610e57565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b0319811681146113e757600080fd5b60006020828403121561237257600080fd5b8135610fcf8161234a565b6001600160a01b03811681146113e757600080fd5b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156123c3576123c3612392565b604051601f8501601f19908116603f011681019082821181831017156123eb576123eb612392565b8160405280935085815286868601111561240457600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261242f57600080fd5b610fcf838335602085016123a8565b6000806040838503121561245157600080fd5b823561245c8161237d565b9150602083013567ffffffffffffffff81111561247857600080fd5b6124848582860161241e565b9150509250929050565b6000815180845260005b818110156124b457602081850181015186830182015201612498565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610fcf602083018461248e565b6000602082840312156124f957600080fd5b5035919050565b6000806040838503121561251357600080fd5b823561251e8161237d565b946020939093013593505050565b60008060006060848603121561254157600080fd5b833561254c8161237d565b9250602084013561255c8161237d565b929592945050506040919091013590565b60006020828403121561257f57600080fd5b813567ffffffffffffffff81111561259657600080fd5b820160608185031215610fcf57600080fd5b6000602082840312156125ba57600080fd5b813567ffffffffffffffff8111156125d157600080fd5b610a548482850161241e565b6000602082840312156125ef57600080fd5b8135610fcf8161237d565b80151581146113e757600080fd5b6000806040838503121561261b57600080fd5b82356126268161237d565b91506020830135612636816125fa565b809150509250929050565b6000806000806080858703121561265757600080fd5b84356126628161237d565b935060208501356126728161237d565b925060408501359150606085013567ffffffffffffffff81111561269557600080fd5b8501601f810187136126a657600080fd5b6126b5878235602084016123a8565b91505092959194509250565b600080604083850312156126d457600080fd5b82356126df8161237d565b915060208301356126368161237d565b60006020828403121561270157600080fd5b8151610fcf816125fa565b634e487b7160e01b600052601160045260246000fd5b6000600182016127345761273461270c565b5060010190565b600181811c9082168061274f57607f821691505b60208210810361276f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6000808335601e198436030181126127d957600080fd5b83018035915067ffffffffffffffff8211156127f457600080fd5b602001915036819003821315611bd757600080fd5b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b60208082526024908201527f457465726e616c536f756c3a2055736572206973206e6f7420617574686f726960408201526303d32b2160e51b606082015260800190565b601f8211156108b157600081815260208120601f850160051c8101602086101561289a5750805b601f850160051c820191505b818110156128b9578281556001016128a6565b505050505050565b815167ffffffffffffffff8111156128db576128db612392565b6128ef816128e9845461273b565b84612873565b602080601f831160018114612924576000841561290c5750858301515b600019600386901b1c1916600185901b1785556128b9565b600085815260208120601f198616915b8281101561295357888601518255948401946001909101908401612934565b50858210156129715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561299357600080fd5b8151610fcf8161237d565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612aad9083018461248e565b9695505050505050565b600060208284031215612ac957600080fd5b8151610fcf8161234a565b818103818111156105935761059361270c565b634e487b7160e01b600052603160045260246000fdfea264697066735822122066dad26f01da1e081b4dc128cd1f79891b9501fc7035d4e0245601ab4847a3c264736f6c63430008110033"; type EternalSoulConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/EternumPass__factory.ts b/typechain-types/factories/EternumPass__factory.ts index ca88746..063d74f 100644 --- a/typechain-types/factories/EternumPass__factory.ts +++ b/typechain-types/factories/EternumPass__factory.ts @@ -1124,7 +1124,7 @@ const _abi = [ ]; const _bytecode = - "0x6080604052600c8054600160ff1991821681179092556011805490911690911790553480156200002e57600080fd5b506040516200419238038062004192833981016040819052620000519162000300565b8888600262000061838262000476565b50600362000070828262000476565b5050601980546001600160a01b0319166001600160a01b0385161790555060126200009c888262000476565b50600d869055600e859055600f849055620000b8338462000101565b601380546001600160a01b039283166001600160a01b03199182161790915560198054939092169281168317909155601480549091169091179055506200054295505050505050565b6127106001600160601b0382161115620001755760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620001cd5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016200016c565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600055565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200022e57600080fd5b81516001600160401b03808211156200024b576200024b62000206565b604051601f8301601f19908116603f0116810190828211818310171562000276576200027662000206565b816040528381526020925086838588010111156200029357600080fd5b600091505b83821015620002b7578582018301518183018401529082019062000298565b600093810190920192909252949350505050565b80516001600160601b0381168114620002e357600080fd5b919050565b80516001600160a01b0381168114620002e357600080fd5b60008060008060008060008060006101208a8c0312156200032057600080fd5b89516001600160401b03808211156200033857600080fd5b620003468d838e016200021c565b9a5060208c01519150808211156200035d57600080fd5b6200036b8d838e016200021c565b995060408c01519150808211156200038257600080fd5b50620003918c828d016200021c565b97505060608a0151955060808a0151945060a08a01519350620003b760c08b01620002cb565b9250620003c760e08b01620002e8565b9150620003d86101008b01620002e8565b90509295985092959850929598565b600181811c90821680620003fc57607f821691505b6020821081036200041d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200047157600081815260208120601f850160051c810160208610156200044c5750805b601f850160051c820191505b818110156200046d5782815560010162000458565b5050505b505050565b81516001600160401b0381111562000492576200049262000206565b620004aa81620004a38454620003e7565b8462000423565b602080601f831160018114620004e25760008415620004c95750858301515b600019600386901b1c1916600185901b1785556200046d565b600085815260208120601f198616915b828110156200051357888601518255948401946001909101908401620004f2565b5085821015620005325787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b613c4080620005526000396000f3fe6080604052600436106102935760003560e01c8063659e2aef1161015a57806398bdf6f5116100c1578063c2f1f14a1161007a578063c2f1f14a146107ec578063c87b56dd1461080c578063cde317af1461082c578063d5999a5c1461084c578063e030565e14610863578063e985e9c51461088357600080fd5b806398bdf6f51461074a5780639b6860c814610760578063a22cb46514610776578063a518f3dd14610796578063b88d4fde146107ac578063ba91caae146107cc57600080fd5b80638456cb59116101135780638456cb591461069b5780638f449a05146106b05780638fc88c48146106b85780639012c4a8146106f557806391b7f5ed1461071557806395d89b411461073557600080fd5b8063659e2aef146106065780636c0360eb1461062657806370a082311461063b578063776ce8681461065b578063783a112b1461066e5780637e4831d31461068157600080fd5b806321235083116101fe57806342842e0e116101b757806342842e0e1461053a5780634f6ccce71461055a57806354fd4d501461057a57806355f804b3146105a65780636352211e146105c6578063655bc8db146105e657600080fd5b8063212350831461047357806323b872dd146104865780632a55205a146104a65780632f745c59146104e55780633171f5b0146105055780633f4ba83a1461052557600080fd5b80630ab0df87116102505780630ab0df871461038d578063112f9024146103a0578063162094c4146103c057806317c95709146103e057806318160ddd1461042e578063210542c71461044357600080fd5b806301ffc9a714610298578063022b50c0146102cd57806306fdde03146102f1578063081812fc14610313578063095ea7b31461034b5780630aa7c8541461036d575b600080fd5b3480156102a457600080fd5b506102b86102b3366004613349565b6108cc565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e3600f5481565b6040519081526020016102c4565b3480156102fd57600080fd5b5061030661093d565b6040516102c491906133bd565b34801561031f57600080fd5b5061033361032e3660046133d0565b6109cf565b6040516001600160a01b0390911681526020016102c4565b34801561035757600080fd5b5061036b6103663660046133fe565b6109f6565b005b34801561037957600080fd5b50601454610333906001600160a01b031681565b34801561039957600080fd5b50426102e3565b3480156103ac57600080fd5b5061036b6103bb3660046133d0565b610b10565b3480156103cc57600080fd5b5061036b6103db3660046134d5565b610bab565b3480156103ec57600080fd5b506104166103fb3660046133d0565b6000908152601660205260409020546001600160401b031690565b6040516001600160401b0390911681526020016102c4565b34801561043a57600080fd5b50600a546102e3565b34801561044f57600080fd5b506102b861045e3660046133d0565b60176020526000908152604090205460ff1681565b61036b6104813660046133d0565b610c59565b34801561049257600080fd5b5061036b6104a136600461351b565b610f31565b3480156104b257600080fd5b506104c66104c136600461355c565b610f63565b604080516001600160a01b0390931683526020830191909152016102c4565b3480156104f157600080fd5b506102e36105003660046133fe565b61100f565b34801561051157600080fd5b506102e361052036600461357e565b6110a5565b34801561053157600080fd5b5061036b6111b3565b34801561054657600080fd5b5061036b61055536600461351b565b611255565b34801561056657600080fd5b506102e36105753660046133d0565b611270565b34801561058657600080fd5b506011546105949060ff1681565b60405160ff90911681526020016102c4565b3480156105b257600080fd5b5061036b6105c136600461359b565b611303565b3480156105d257600080fd5b506103336105e13660046133d0565b6113a9565b3480156105f257600080fd5b5061036b6106013660046135dd565b611409565b34801561061257600080fd5b5061036b6106213660046133d0565b6114f4565b34801561063257600080fd5b506103066115a6565b34801561064757600080fd5b506102e361065636600461357e565b611634565b61036b61066936600461361b565b6116ba565b61036b61067c36600461355c565b611ab7565b34801561068d57600080fd5b50600c546102b89060ff1681565b3480156106a757600080fd5b5061036b611e99565b6102e3611f3e565b3480156106c457600080fd5b506102e36106d33660046133d0565b600090815260156020526040902054600160a81b90046001600160401b031690565b34801561070157600080fd5b5061036b6107103660046133d0565b6120e1565b34801561072157600080fd5b5061036b6107303660046133d0565b61217c565b34801561074157600080fd5b50610306612217565b34801561075657600080fd5b506102e360105481565b34801561076c57600080fd5b506102e3600d5481565b34801561078257600080fd5b5061036b610791366004613647565b612226565b3480156107a257600080fd5b506102e3600e5481565b3480156107b857600080fd5b5061036b6107c7366004613680565b612231565b3480156107d857600080fd5b506102e36107e736600461355c565b612269565b3480156107f857600080fd5b506103336108073660046133d0565b612290565b34801561081857600080fd5b506103066108273660046133d0565b6122e4565b34801561083857600080fd5b506102b86108473660046133d0565b6123e6565b34801561085857600080fd5b506102e362278d0081565b34801561086f57600080fd5b5061036b61087e3660046136ff565b61240e565b34801561088f57600080fd5b506102b861089e36600461373d565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6000636ad56fd360e11b6001600160e01b03198316016108ee57506001919050565b6314bdb52960e21b6001600160e01b031983160161090e57506001919050565b63739a07b360e01b6001600160e01b031983160161092e57506001919050565b61093782612588565b92915050565b60606002805461094c9061376b565b80601f01602080910402602001604051908101604052809291908181526020018280546109789061376b565b80156109c55780601f1061099a576101008083540402835291602001916109c5565b820191906000526020600020905b8154815290600101906020018083116109a857829003601f168201915b5050505050905090565b60006109da826125ad565b506000908152600660205260409020546001600160a01b031690565b6000610a01826113a9565b9050806001600160a01b0316836001600160a01b031603610a735760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610a8f5750610a8f813361089e565b610b015760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610a6a565b610b0b83836125fd565b505050565b6019546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a91906137a5565b610ba65760405162461bcd60e51b8152600401610a6a906137c2565b600f55565b6019546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2591906137a5565b610c415760405162461bcd60e51b8152600401610a6a906137c2565b6000828152601860205260409020610b0b8282613847565b80610c638161266b565b610caf5760405162461bcd60e51b815260206004820181905260248201527f457465726e756d506173733a204e6f7420612076616c696420746f6b656e49646044820152606401610a6a565b6019546000906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610d08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2c91906137a5565b905080610e6857610d3e335b84612688565b610d9c5760405162461bcd60e51b815260206004820152602960248201527f457465726e756d506173733a2043616c6c6572206973206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610a6a565b610da5836123e6565b15610dc25760405162461bcd60e51b8152600401610a6a90613906565b60008381526017602052604090205460ff1615610df15760405162461bcd60e51b8152600401610a6a9061394b565b60008381526017602090815260408083208054600160ff1990911681179091556016909252808320805467ffffffffffffffff1916426001600160401b0381169190911790915590519192909186917fb83b155d49314a3067fe7919746d542e9559033726537f2a9daa8f63a44dedd091a4505050565b60008381526017602052604081205460ff1615159003610ed157610e8b836123e6565b15610ea85760405162461bcd60e51b8152600401610a6a90613906565b6000838152601660205260409020805467ffffffffffffffff1916426001600160401b03161790555b3415610eeb57610eeb33610ee4856113a9565b8534612706565b600083815260176020526040808220805460ff1916905551429085907fb83b155d49314a3067fe7919746d542e9559033726537f2a9daa8f63a44dedd0908490a4505050565b610f3c335b82612688565b610f585760405162461bcd60e51b8152600401610a6a90613992565b610b0b838383612802565b60008281526001602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610fd85750604080518082019091526000546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610ff7906001600160601b0316876139f5565b6110019190613a0c565b915196919550909350505050565b600061101a83611634565b821061107c5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a6a565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b6019546000906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156110fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112291906137a5565b61113e5760405162461bcd60e51b8152600401610a6a906137c2565b6010805490600061114e83613a2e565b919050555060105490506111628282612973565b601354611179906001600160a01b03166001612226565b60405181815233907f0176f203df400d7bd5f1b1c9ef36c16709bf3b5d9fd35f000a6bae32393f66c39060200160405180910390a2919050565b6019546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122d91906137a5565b6112495760405162461bcd60e51b8152600401610a6a906137c2565b600c805460ff19169055565b610b0b83838360405180602001604052806000815250612231565b600061127b600a5490565b82106112de5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a6a565b600a82815481106112f1576112f1613a47565b90600052602060002001549050919050565b6019546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137d91906137a5565b6113995760405162461bcd60e51b8152600401610a6a906137c2565b60126113a58282613847565b5050565b6000818152600460205260408120546001600160a01b0316806109375760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a6a565b61141233610d38565b6114795760405162461bcd60e51b815260206004820152603260248201527f457465726e756d506173733a2043616c6c6572206973206e6f7420746f6b656e604482015271081bdddb995c881bdc88185c1c1c9bdd995960721b6064820152608401610a6a565b6000838152601560205260409020805460ff1916831515178155600101819055336001600160a01b03167fa9dcc06084f66afbdc1841a28e84400fcbf607131220fdcf404c8502f3c032038484846040516114e7939291909283529015156020830152604082015260600190565b60405180910390a2505050565b6114fd33610f36565b6115545760405162461bcd60e51b815260206004820152602260248201527f457465726e756d506173733a204e6f74204f776e6572204f7220417070726f76604482015261195960f21b6064820152608401610a6a565b61155d8161298d565b60405181815233907f2323944eca282b47450d5a4215add1792fe29eae53a5165998cb00f4c0f665c39060200160405180910390a2600090815260016020526040812055565b50565b601280546115b39061376b565b80601f01602080910402602001604051908101604052809291908181526020018280546115df9061376b565b801561162c5780601f106116015761010080835404028352916020019161162c565b820191906000526020600020905b81548152906001019060200180831161160f57829003601f168201915b505050505081565b60006001600160a01b03821661169e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610a6a565b506001600160a01b031660009081526005602052604090205490565b816116c48161266b565b6117105760405162461bcd60e51b815260206004820181905260248201527f457465726e756d506173733a204e6f7420612076616c696420746f6b656e49646044820152606401610a6a565b6019546000906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611769573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178d91906137a5565b90506117993385612688565b806117a15750805b6118135760405162461bcd60e51b815260206004820152603960248201527f457465726e756d506173733a2043616c6c6572206973206f776e6572206e6f7260448201527f20617070726f766564206f7220746865204f70657261746f72000000000000006064820152608401610a6a565b60008481526017602052604090205460ff16156118425760405162461bcd60e51b8152600401610a6a9061394b565b6000836001600160401b03161180156118655750600c836001600160401b031611155b6118cf5760405162461bcd60e51b815260206004820152603560248201527f457465726e756d506173733a204475726174696f6e206d757374206265206265604482015274747765656e203120746f203132206d6f6e7468732160581b6064820152608401610a6a565b60006118e762278d006001600160401b0386166139f5565b90508161195d57600f54611904906001600160401b0386166139f5565b34101561195d5760405162461bcd60e51b815260206004820152602160248201527f457465726e756d506173733a20496e73756666696369656e74205061796d656e6044820152601d60fa1b6064820152608401610a6a565b60195460408051633955348d60e21b815290516000926001600160a01b03169163e554d2349160048083019260209291908290030181865afa1580156119a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cb9190613a5d565b90506119d933828834612706565b60006119e4876123e6565b15611a22576119f38342613a7a565b6000888152601660205260409020805467ffffffffffffffff19166001600160401b0383161790559050611a70565b600087815260166020526040902054611a459084906001600160401b0316613a7a565b6000888152601660205260409020805467ffffffffffffffff19166001600160401b03831617905590505b6040516001600160401b038216815287907f2ec2be2c4b90c2cf13ecb6751a24daed6bb741ae5ed3f7371aabf9402f6d62e89060200160405180910390a250505050505050565b611ac08261266b565b611b175760405162461bcd60e51b815260206004820152602260248201527f5369676e61747572655365726965733a20496e76616c69646520546f6b656e20604482015261125960f21b6064820152608401610a6a565b60008281526015602052604090205460ff16611b815760405162461bcd60e51b815260206004820152602360248201527f457465726e756d506173733a204e6f7420617661696c61626c6520666f722072604482015262195b9d60ea1b6064820152608401610a6a565b6000611b8c83612290565b6001600160a01b031614611bee5760405162461bcd60e51b815260206004820152602360248201527f457465726e756d506173733a204e465420416c7265616479205375627363726960448201526218995960ea1b6064820152608401610a6a565b60008111611c525760405162461bcd60e51b815260206004820152602b60248201527f457465726e756d506173733a2054696d652063616e2774206265206c6573732060448201526a3a3430b71018903437bab960a91b6064820152608401610a6a565b6110e0811115611cba5760405162461bcd60e51b815260206004820152602d60248201527f457465726e756d506173733a2054696d652063616e2774206265206d6f72652060448201526c7468616e2036206d6f6e74687360981b6064820152608401610a6a565b6000611cc68383612269565b905080341015611d185760405162461bcd60e51b815260206004820152601f60248201527f457465726e756d506173733a20496e73756666696369656e742046756e6473006044820152606401610a6a565b60006103e8600e5434611d2b91906139f5565b611d359190613a0c565b90506000611d438234613a8d565b9050611d5933611d52876113a9565b8784612706565b60195460408051633955348d60e21b815290516000926001600160a01b03169163e554d2349160048083019260209291908290030181865afa158015611da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc79190613a5d565b9050611dd533828886612706565b60008681526015602052604090208054610100600160a81b0319166101003302178155611e0486610e106139f5565b611e0e9042613a7a565b81546001600160401b0391909116600160a81b0267ffffffffffffffff60a81b19909116178155611e3c3390565b8154604051600160a81b9091046001600160401b031681526001600160a01b03919091169088907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe9060200160405180910390a350505050505050565b6019546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1391906137a5565b611f2f5760405162461bcd60e51b8152600401610a6a906137c2565b600c805460ff19166001179055565b600c5460009060ff1615611f945760405162461bcd60e51b815260206004820152601f60248201527f457465726e756d506173733a204e4654204d696e74696e6720506175736564006044820152606401610a6a565b60108054906000611fa483613a2e565b9091555050601054600d543410156120095760405162461bcd60e51b815260206004820152602260248201527f457465726e756d506173733a20496e7375666669656369656e7420616d6f756e604482015261742160f01b6064820152608401610a6a565b6120133382612973565b60135461202a906001600160a01b03166001612226565b60195460408051633955348d60e21b815290516000926001600160a01b03169163e554d2349160048083019260209291908290030181865afa158015612074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120989190613a5d565b90506120a633828434612706565b60405182815233907f0176f203df400d7bd5f1b1c9ef36c16709bf3b5d9fd35f000a6bae32393f66c39060200160405180910390a250905090565b6019546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215b91906137a5565b6121775760405162461bcd60e51b8152600401610a6a906137c2565b600e55565b6019546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156121d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f691906137a5565b6122125760405162461bcd60e51b8152600401610a6a906137c2565b600d55565b60606003805461094c9061376b565b6113a5338383612a30565b61223b3383612688565b6122575760405162461bcd60e51b8152600401610a6a90613992565b61226384848484612afe565b50505050565b60008281526015602052604081206001015481906122889084906139f5565b949350505050565b60008181526015602052604081205442600160a81b9091046001600160401b0316106122d7575060009081526015602052604090205461010090046001600160a01b031690565b506000919050565b919050565b60008181526018602052604090208054606091906123019061376b565b9050600003612348576000612314612b31565b90508061232084612b40565b604051602001612331929190613aa0565b604051602081830303815290604052915050919050565b600082815260186020526040902080546123619061376b565b80601f016020809104026020016040519081016040528092919081815260200182805461238d9061376b565b80156123da5780601f106123af576101008083540402835291602001916123da565b820191906000526020600020905b8154815290600101906020018083116123bd57829003601f168201915b50505050509050919050565b600081815260166020526040812054426001600160401b03909116116122d757506001919050565b61241733610d38565b6124745760405162461bcd60e51b815260206004820152602860248201527f457465726e756d506173733a204e6f7420746f6b656e206f776e6572204f7220604482015267185c1c1c9bdd995960c21b6064820152608401610a6a565b600061247f84612290565b6001600160a01b0316146124e55760405162461bcd60e51b815260206004820152602760248201527f457465726e756d506173733a204974656d20697320616c7265616479207375626044820152661cd8dc9a58995960ca1b6064820152608401610a6a565b60008381526015602052604090208054610100600160a81b0319166101006001600160a01b0385160217815561251b4283613adc565b815467ffffffffffffffff60a81b1916600160a81b6001600160401b039283160217825560405190831681526001600160a01b0384169085907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe906020015b60405180910390a350505050565b60006001600160e01b0319821663780e9d6360e01b1480610937575061093782612bd2565b6125b68161266b565b6115a35760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a6a565b600081815260066020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612632826113a9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000908152600460205260409020546001600160a01b0316151590565b600080612694836113a9565b9050806001600160a01b0316846001600160a01b031614806126db57506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b806122885750836001600160a01b03166126f4846109cf565b6001600160a01b031614949350505050565b6000836001600160a01b03168260405160006040518083038185875af1925050503d8060008114612753576040519150601f19603f3d011682016040523d82523d6000602084013e612758565b606091505b50509050806127a95760405162461bcd60e51b815260206004820152601c60248201527f457465726e756d506173733a205472616e73666572206661696c6564000000006044820152606401610a6a565b604080516001600160a01b03808816825286166020820152908101849052606081018390527faeadc2c673108f922a1042ef404b73ae1af992c9ae54249a4a7d13ef21ef2c189060800160405180910390a15050505050565b826001600160a01b0316612815826113a9565b6001600160a01b03161461283b5760405162461bcd60e51b8152600401610a6a90613b03565b6001600160a01b03821661289d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6a565b6128aa8383836001612c12565b826001600160a01b03166128bd826113a9565b6001600160a01b0316146128e35760405162461bcd60e51b8152600401610a6a90613b03565b600081815260066020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260058552838620805460001901905590871680865283862080546001019055868652600490945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6113a5828260405180602001604052806000815250612cb3565b6000612998826113a9565b90506129a8816000846001612c12565b6129b1826113a9565b600083815260066020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526005845282852080546000190190558785526004909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b031603612a915760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a6a565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612b09848484612802565b612b1584848484612ce6565b6122635760405162461bcd60e51b8152600401610a6a90613b48565b60606012805461094c9061376b565b60606000612b4d83612de7565b60010190506000816001600160401b03811115612b6c57612b6c61342a565b6040519080825280601f01601f191660200182016040528015612b96576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612ba057509392505050565b60006001600160e01b031982166380ac58cd60e01b1480612c0357506001600160e01b03198216635b5e139f60e01b145b80610937575061093782612ebf565b612c1e84848484612ef4565b826001600160a01b0316846001600160a01b031614158015612c5b575060008281526015602052604090205461010090046001600160a01b031615155b1561226357600082815260156020908152604080832080546001600160e81b03191681556001018390555182815284917f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe910161257a565b612cbd8383613028565b612cca6000848484612ce6565b610b0b5760405162461bcd60e51b8152600401610a6a90613b48565b60006001600160a01b0384163b15612ddc57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612d2a903390899088908890600401613b9a565b6020604051808303816000875af1925050508015612d65575060408051601f3d908101601f19168201909252612d6291810190613bd7565b60015b612dc2573d808015612d93576040519150601f19603f3d011682016040523d82523d6000602084013e612d98565b606091505b508051600003612dba5760405162461bcd60e51b8152600401610a6a90613b48565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612288565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612e265772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612e52576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612e7057662386f26fc10000830492506010015b6305f5e1008310612e88576305f5e100830492506008015b6127108310612e9c57612710830492506004015b60648310612eae576064830492506002015b600a83106109375760010192915050565b60006001600160e01b0319821663152a902d60e11b148061093757506301ffc9a760e01b6001600160e01b0319831614610937565b6001811115612f635760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610a6a565b816001600160a01b038516612fbf57612fba81600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b612fe2565b836001600160a01b0316856001600160a01b031614612fe257612fe285826131a3565b6001600160a01b038416612ffe57612ff981613240565b613021565b846001600160a01b0316846001600160a01b0316146130215761302184826132ef565b5050505050565b6001600160a01b03821661307e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a6a565b6130878161266b565b156130d45760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a6a565b6130e2600083836001612c12565b6130eb8161266b565b156131385760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a6a565b6001600160a01b038216600081815260056020908152604080832080546001019055848352600490915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600060016131b084611634565b6131ba9190613a8d565b60008381526009602052604090205490915080821461320d576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a5460009061325290600190613a8d565b6000838152600b6020526040812054600a805493945090928490811061327a5761327a613a47565b9060005260206000200154905080600a838154811061329b5761329b613a47565b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a8054806132d3576132d3613bf4565b6001900381819060005260206000200160009055905550505050565b60006132fa83611634565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b6001600160e01b0319811681146115a357600080fd5b60006020828403121561335b57600080fd5b813561336681613333565b9392505050565b60005b83811015613388578181015183820152602001613370565b50506000910152565b600081518084526133a981602086016020860161336d565b601f01601f19169290920160200192915050565b6020815260006133666020830184613391565b6000602082840312156133e257600080fd5b5035919050565b6001600160a01b03811681146115a357600080fd5b6000806040838503121561341157600080fd5b823561341c816133e9565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561345a5761345a61342a565b604051601f8501601f19908116603f011681019082821181831017156134825761348261342a565b8160405280935085815286868601111561349b57600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126134c657600080fd5b61336683833560208501613440565b600080604083850312156134e857600080fd5b8235915060208301356001600160401b0381111561350557600080fd5b613511858286016134b5565b9150509250929050565b60008060006060848603121561353057600080fd5b833561353b816133e9565b9250602084013561354b816133e9565b929592945050506040919091013590565b6000806040838503121561356f57600080fd5b50508035926020909101359150565b60006020828403121561359057600080fd5b8135613366816133e9565b6000602082840312156135ad57600080fd5b81356001600160401b038111156135c357600080fd5b612288848285016134b5565b80151581146115a357600080fd5b6000806000606084860312156135f257600080fd5b83359250602084013561354b816135cf565b80356001600160401b03811681146122df57600080fd5b6000806040838503121561362e57600080fd5b8235915061363e60208401613604565b90509250929050565b6000806040838503121561365a57600080fd5b8235613665816133e9565b91506020830135613675816135cf565b809150509250929050565b6000806000806080858703121561369657600080fd5b84356136a1816133e9565b935060208501356136b1816133e9565b92506040850135915060608501356001600160401b038111156136d357600080fd5b8501601f810187136136e457600080fd5b6136f387823560208401613440565b91505092959194509250565b60008060006060848603121561371457600080fd5b833592506020840135613726816133e9565b915061373460408501613604565b90509250925092565b6000806040838503121561375057600080fd5b823561375b816133e9565b91506020830135613675816133e9565b600181811c9082168061377f57607f821691505b60208210810361379f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156137b757600080fd5b8151613366816135cf565b6020808252601a908201527f457465726e756d506173733a20556e617574686f72697a656421000000000000604082015260600190565b601f821115610b0b57600081815260208120601f850160051c810160208610156138205750805b601f850160051c820191505b8181101561383f5782815560010161382c565b505050505050565b81516001600160401b038111156138605761386061342a565b6138748161386e845461376b565b846137f9565b602080601f8311600181146138a957600084156138915750858301515b600019600386901b1c1916600185901b17855561383f565b600085815260208120601f198616915b828110156138d8578886015182559484019460019091019084016138b9565b50858210156138f65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526025908201527f457465726e756d706173733a20537562736372697074696f6e20697320696e61604082015264637469766560d81b606082015260800190565b60208082526027908201527f457465726e756d506173733a2043616e63656c6c6174696f6e20697320696e2060408201526670726f6365737360c81b606082015260800190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610937576109376139df565b600082613a2957634e487b7160e01b600052601260045260246000fd5b500490565b600060018201613a4057613a406139df565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613a6f57600080fd5b8151613366816133e9565b80820180821115610937576109376139df565b81810381811115610937576109376139df565b60008351613ab281846020880161336d565b602f60f81b9083019081528351613ad081600184016020880161336d565b01600101949350505050565b6001600160401b03818116838216019080821115613afc57613afc6139df565b5092915050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613bcd90830184613391565b9695505050505050565b600060208284031215613be957600080fd5b815161336681613333565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220f2fe40a5d7cc110a69fa4be5036daa8f47f1a3563c5ce0b95c211ebb33f4698464736f6c63430008110033"; + "0x6080604052600c805460ff191660011790553480156200001e57600080fd5b506040516200417d3803806200417d8339810160408190526200004191620002f0565b8888600262000051838262000466565b50600362000060828262000466565b5050601880546001600160a01b0319166001600160a01b0385161790555060116200008c888262000466565b50600d869055600e859055600f849055620000a83384620000f1565b601280546001600160a01b039283166001600160a01b03199182161790915560188054939092169281168317909155601380549091169091179055506200053295505050505050565b6127106001600160601b0382161115620001655760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620001bd5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016200015c565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600055565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021e57600080fd5b81516001600160401b03808211156200023b576200023b620001f6565b604051601f8301601f19908116603f01168101908282118183101715620002665762000266620001f6565b816040528381526020925086838588010111156200028357600080fd5b600091505b83821015620002a7578582018301518183018401529082019062000288565b600093810190920192909252949350505050565b80516001600160601b0381168114620002d357600080fd5b919050565b80516001600160a01b0381168114620002d357600080fd5b60008060008060008060008060006101208a8c0312156200031057600080fd5b89516001600160401b03808211156200032857600080fd5b620003368d838e016200020c565b9a5060208c01519150808211156200034d57600080fd5b6200035b8d838e016200020c565b995060408c01519150808211156200037257600080fd5b50620003818c828d016200020c565b97505060608a0151955060808a0151945060a08a01519350620003a760c08b01620002bb565b9250620003b760e08b01620002d8565b9150620003c86101008b01620002d8565b90509295985092959850929598565b600181811c90821680620003ec57607f821691505b6020821081036200040d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200046157600081815260208120601f850160051c810160208610156200043c5750805b601f850160051c820191505b818110156200045d5782815560010162000448565b5050505b505050565b81516001600160401b03811115620004825762000482620001f6565b6200049a81620004938454620003d7565b8462000413565b602080601f831160018114620004d25760008415620004b95750858301515b600019600386901b1c1916600185901b1785556200045d565b600085815260208120601f198616915b828110156200050357888601518255948401946001909101908401620004e2565b5085821015620005225787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b613c3b80620005426000396000f3fe6080604052600436106102935760003560e01c8063659e2aef1161015a57806398bdf6f5116100c1578063c2f1f14a1161007a578063c2f1f14a146107e7578063c87b56dd14610807578063cde317af14610827578063d5999a5c14610847578063e030565e1461085e578063e985e9c51461087e57600080fd5b806398bdf6f5146107455780639b6860c81461075b578063a22cb46514610771578063a518f3dd14610791578063b88d4fde146107a7578063ba91caae146107c757600080fd5b80638456cb59116101135780638456cb59146106965780638f449a05146106ab5780638fc88c48146106b35780639012c4a8146106f057806391b7f5ed1461071057806395d89b411461073057600080fd5b8063659e2aef146106015780636c0360eb1461062157806370a0823114610636578063776ce86814610656578063783a112b146106695780637e4831d31461067c57600080fd5b806321235083116101fe57806342842e0e116101b757806342842e0e1461053a5780634f6ccce71461055a57806354fd4d501461057a57806355f804b3146105a15780636352211e146105c1578063655bc8db146105e157600080fd5b8063212350831461047357806323b872dd146104865780632a55205a146104a65780632f745c59146104e55780633171f5b0146105055780633f4ba83a1461052557600080fd5b80630ab0df87116102505780630ab0df871461038d578063112f9024146103a0578063162094c4146103c057806317c95709146103e057806318160ddd1461042e578063210542c71461044357600080fd5b806301ffc9a714610298578063022b50c0146102cd57806306fdde03146102f1578063081812fc14610313578063095ea7b31461034b5780630aa7c8541461036d575b600080fd5b3480156102a457600080fd5b506102b86102b3366004613344565b6108c7565b60405190151581526020015b60405180910390f35b3480156102d957600080fd5b506102e3600f5481565b6040519081526020016102c4565b3480156102fd57600080fd5b50610306610938565b6040516102c491906133b8565b34801561031f57600080fd5b5061033361032e3660046133cb565b6109ca565b6040516001600160a01b0390911681526020016102c4565b34801561035757600080fd5b5061036b6103663660046133f9565b6109f1565b005b34801561037957600080fd5b50601354610333906001600160a01b031681565b34801561039957600080fd5b50426102e3565b3480156103ac57600080fd5b5061036b6103bb3660046133cb565b610b0b565b3480156103cc57600080fd5b5061036b6103db3660046134d0565b610ba6565b3480156103ec57600080fd5b506104166103fb3660046133cb565b6000908152601560205260409020546001600160401b031690565b6040516001600160401b0390911681526020016102c4565b34801561043a57600080fd5b50600a546102e3565b34801561044f57600080fd5b506102b861045e3660046133cb565b60166020526000908152604090205460ff1681565b61036b6104813660046133cb565b610c54565b34801561049257600080fd5b5061036b6104a1366004613516565b610f2c565b3480156104b257600080fd5b506104c66104c1366004613557565b610f5e565b604080516001600160a01b0390931683526020830191909152016102c4565b3480156104f157600080fd5b506102e36105003660046133f9565b61100a565b34801561051157600080fd5b506102e3610520366004613579565b6110a0565b34801561053157600080fd5b5061036b6111ae565b34801561054657600080fd5b5061036b610555366004613516565b611250565b34801561056657600080fd5b506102e36105753660046133cb565b61126b565b34801561058657600080fd5b5061058f600181565b60405160ff90911681526020016102c4565b3480156105ad57600080fd5b5061036b6105bc366004613596565b6112fe565b3480156105cd57600080fd5b506103336105dc3660046133cb565b6113a4565b3480156105ed57600080fd5b5061036b6105fc3660046135d8565b611404565b34801561060d57600080fd5b5061036b61061c3660046133cb565b6114ef565b34801561062d57600080fd5b506103066115a1565b34801561064257600080fd5b506102e3610651366004613579565b61162f565b61036b610664366004613616565b6116b5565b61036b610677366004613557565b611ab2565b34801561068857600080fd5b50600c546102b89060ff1681565b3480156106a257600080fd5b5061036b611e94565b6102e3611f39565b3480156106bf57600080fd5b506102e36106ce3660046133cb565b600090815260146020526040902054600160a81b90046001600160401b031690565b3480156106fc57600080fd5b5061036b61070b3660046133cb565b6120dc565b34801561071c57600080fd5b5061036b61072b3660046133cb565b612177565b34801561073c57600080fd5b50610306612212565b34801561075157600080fd5b506102e360105481565b34801561076757600080fd5b506102e3600d5481565b34801561077d57600080fd5b5061036b61078c366004613642565b612221565b34801561079d57600080fd5b506102e3600e5481565b3480156107b357600080fd5b5061036b6107c236600461367b565b61222c565b3480156107d357600080fd5b506102e36107e2366004613557565b612264565b3480156107f357600080fd5b506103336108023660046133cb565b61228b565b34801561081357600080fd5b506103066108223660046133cb565b6122df565b34801561083357600080fd5b506102b86108423660046133cb565b6123e1565b34801561085357600080fd5b506102e362278d0081565b34801561086a57600080fd5b5061036b6108793660046136fa565b612409565b34801561088a57600080fd5b506102b8610899366004613738565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6000636ad56fd360e11b6001600160e01b03198316016108e957506001919050565b6314bdb52960e21b6001600160e01b031983160161090957506001919050565b63739a07b360e01b6001600160e01b031983160161092957506001919050565b61093282612583565b92915050565b60606002805461094790613766565b80601f016020809104026020016040519081016040528092919081815260200182805461097390613766565b80156109c05780601f10610995576101008083540402835291602001916109c0565b820191906000526020600020905b8154815290600101906020018083116109a357829003601f168201915b5050505050905090565b60006109d5826125a8565b506000908152600660205260409020546001600160a01b031690565b60006109fc826113a4565b9050806001600160a01b0316836001600160a01b031603610a6e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610a8a5750610a8a8133610899565b610afc5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610a65565b610b0683836125f8565b505050565b6018546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8591906137a0565b610ba15760405162461bcd60e51b8152600401610a65906137bd565b600f55565b6018546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2091906137a0565b610c3c5760405162461bcd60e51b8152600401610a65906137bd565b6000828152601760205260409020610b068282613842565b80610c5e81612666565b610caa5760405162461bcd60e51b815260206004820181905260248201527f457465726e756d506173733a204e6f7420612076616c696420746f6b656e49646044820152606401610a65565b6018546000906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2791906137a0565b905080610e6357610d39335b84612683565b610d975760405162461bcd60e51b815260206004820152602960248201527f457465726e756d506173733a2043616c6c6572206973206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610a65565b610da0836123e1565b15610dbd5760405162461bcd60e51b8152600401610a6590613901565b60008381526016602052604090205460ff1615610dec5760405162461bcd60e51b8152600401610a6590613946565b60008381526016602090815260408083208054600160ff1990911681179091556015909252808320805467ffffffffffffffff1916426001600160401b0381169190911790915590519192909186917fb83b155d49314a3067fe7919746d542e9559033726537f2a9daa8f63a44dedd091a4505050565b60008381526016602052604081205460ff1615159003610ecc57610e86836123e1565b15610ea35760405162461bcd60e51b8152600401610a6590613901565b6000838152601560205260409020805467ffffffffffffffff1916426001600160401b03161790555b3415610ee657610ee633610edf856113a4565b8534612701565b600083815260166020526040808220805460ff1916905551429085907fb83b155d49314a3067fe7919746d542e9559033726537f2a9daa8f63a44dedd0908490a4505050565b610f37335b82612683565b610f535760405162461bcd60e51b8152600401610a659061398d565b610b068383836127fd565b60008281526001602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610fd35750604080518082019091526000546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610ff2906001600160601b0316876139f0565b610ffc9190613a07565b915196919550909350505050565b60006110158361162f565b82106110775760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a65565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b6018546000906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156110f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111d91906137a0565b6111395760405162461bcd60e51b8152600401610a65906137bd565b6010805490600061114983613a29565b9190505550601054905061115d828261296e565b601254611174906001600160a01b03166001612221565b60405181815233907f0176f203df400d7bd5f1b1c9ef36c16709bf3b5d9fd35f000a6bae32393f66c39060200160405180910390a2919050565b6018546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611204573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122891906137a0565b6112445760405162461bcd60e51b8152600401610a65906137bd565b600c805460ff19169055565b610b068383836040518060200160405280600081525061222c565b6000611276600a5490565b82106112d95760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a65565b600a82815481106112ec576112ec613a42565b90600052602060002001549050919050565b6018546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611354573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137891906137a0565b6113945760405162461bcd60e51b8152600401610a65906137bd565b60116113a08282613842565b5050565b6000818152600460205260408120546001600160a01b0316806109325760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a65565b61140d33610d33565b6114745760405162461bcd60e51b815260206004820152603260248201527f457465726e756d506173733a2043616c6c6572206973206e6f7420746f6b656e604482015271081bdddb995c881bdc88185c1c1c9bdd995960721b6064820152608401610a65565b6000838152601460205260409020805460ff1916831515178155600101819055336001600160a01b03167fa9dcc06084f66afbdc1841a28e84400fcbf607131220fdcf404c8502f3c032038484846040516114e2939291909283529015156020830152604082015260600190565b60405180910390a2505050565b6114f833610f31565b61154f5760405162461bcd60e51b815260206004820152602260248201527f457465726e756d506173733a204e6f74204f776e6572204f7220417070726f76604482015261195960f21b6064820152608401610a65565b61155881612988565b60405181815233907f2323944eca282b47450d5a4215add1792fe29eae53a5165998cb00f4c0f665c39060200160405180910390a2600090815260016020526040812055565b50565b601180546115ae90613766565b80601f01602080910402602001604051908101604052809291908181526020018280546115da90613766565b80156116275780601f106115fc57610100808354040283529160200191611627565b820191906000526020600020905b81548152906001019060200180831161160a57829003601f168201915b505050505081565b60006001600160a01b0382166116995760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610a65565b506001600160a01b031660009081526005602052604090205490565b816116bf81612666565b61170b5760405162461bcd60e51b815260206004820181905260248201527f457465726e756d506173733a204e6f7420612076616c696420746f6b656e49646044820152606401610a65565b6018546000906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611764573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178891906137a0565b90506117943385612683565b8061179c5750805b61180e5760405162461bcd60e51b815260206004820152603960248201527f457465726e756d506173733a2043616c6c6572206973206f776e6572206e6f7260448201527f20617070726f766564206f7220746865204f70657261746f72000000000000006064820152608401610a65565b60008481526016602052604090205460ff161561183d5760405162461bcd60e51b8152600401610a6590613946565b6000836001600160401b03161180156118605750600c836001600160401b031611155b6118ca5760405162461bcd60e51b815260206004820152603560248201527f457465726e756d506173733a204475726174696f6e206d757374206265206265604482015274747765656e203120746f203132206d6f6e7468732160581b6064820152608401610a65565b60006118e262278d006001600160401b0386166139f0565b90508161195857600f546118ff906001600160401b0386166139f0565b3410156119585760405162461bcd60e51b815260206004820152602160248201527f457465726e756d506173733a20496e73756666696369656e74205061796d656e6044820152601d60fa1b6064820152608401610a65565b60185460408051633955348d60e21b815290516000926001600160a01b03169163e554d2349160048083019260209291908290030181865afa1580156119a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c69190613a58565b90506119d433828834612701565b60006119df876123e1565b15611a1d576119ee8342613a75565b6000888152601560205260409020805467ffffffffffffffff19166001600160401b0383161790559050611a6b565b600087815260156020526040902054611a409084906001600160401b0316613a75565b6000888152601560205260409020805467ffffffffffffffff19166001600160401b03831617905590505b6040516001600160401b038216815287907f2ec2be2c4b90c2cf13ecb6751a24daed6bb741ae5ed3f7371aabf9402f6d62e89060200160405180910390a250505050505050565b611abb82612666565b611b125760405162461bcd60e51b815260206004820152602260248201527f5369676e61747572655365726965733a20496e76616c69646520546f6b656e20604482015261125960f21b6064820152608401610a65565b60008281526014602052604090205460ff16611b7c5760405162461bcd60e51b815260206004820152602360248201527f457465726e756d506173733a204e6f7420617661696c61626c6520666f722072604482015262195b9d60ea1b6064820152608401610a65565b6000611b878361228b565b6001600160a01b031614611be95760405162461bcd60e51b815260206004820152602360248201527f457465726e756d506173733a204e465420416c7265616479205375627363726960448201526218995960ea1b6064820152608401610a65565b60008111611c4d5760405162461bcd60e51b815260206004820152602b60248201527f457465726e756d506173733a2054696d652063616e2774206265206c6573732060448201526a3a3430b71018903437bab960a91b6064820152608401610a65565b6110e0811115611cb55760405162461bcd60e51b815260206004820152602d60248201527f457465726e756d506173733a2054696d652063616e2774206265206d6f72652060448201526c7468616e2036206d6f6e74687360981b6064820152608401610a65565b6000611cc18383612264565b905080341015611d135760405162461bcd60e51b815260206004820152601f60248201527f457465726e756d506173733a20496e73756666696369656e742046756e6473006044820152606401610a65565b60006103e8600e5434611d2691906139f0565b611d309190613a07565b90506000611d3e8234613a88565b9050611d5433611d4d876113a4565b8784612701565b60185460408051633955348d60e21b815290516000926001600160a01b03169163e554d2349160048083019260209291908290030181865afa158015611d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc29190613a58565b9050611dd033828886612701565b60008681526014602052604090208054610100600160a81b0319166101003302178155611dff86610e106139f0565b611e099042613a75565b81546001600160401b0391909116600160a81b0267ffffffffffffffff60a81b19909116178155611e373390565b8154604051600160a81b9091046001600160401b031681526001600160a01b03919091169088907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe9060200160405180910390a350505050505050565b6018546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0e91906137a0565b611f2a5760405162461bcd60e51b8152600401610a65906137bd565b600c805460ff19166001179055565b600c5460009060ff1615611f8f5760405162461bcd60e51b815260206004820152601f60248201527f457465726e756d506173733a204e4654204d696e74696e6720506175736564006044820152606401610a65565b60108054906000611f9f83613a29565b9091555050601054600d543410156120045760405162461bcd60e51b815260206004820152602260248201527f457465726e756d506173733a20496e7375666669656369656e7420616d6f756e604482015261742160f01b6064820152608401610a65565b61200e338261296e565b601254612025906001600160a01b03166001612221565b60185460408051633955348d60e21b815290516000926001600160a01b03169163e554d2349160048083019260209291908290030181865afa15801561206f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120939190613a58565b90506120a133828434612701565b60405182815233907f0176f203df400d7bd5f1b1c9ef36c16709bf3b5d9fd35f000a6bae32393f66c39060200160405180910390a250905090565b6018546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612132573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215691906137a0565b6121725760405162461bcd60e51b8152600401610a65906137bd565b600e55565b6018546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156121cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f191906137a0565b61220d5760405162461bcd60e51b8152600401610a65906137bd565b600d55565b60606003805461094790613766565b6113a0338383612a2b565b6122363383612683565b6122525760405162461bcd60e51b8152600401610a659061398d565b61225e84848484612af9565b50505050565b60008281526014602052604081206001015481906122839084906139f0565b949350505050565b60008181526014602052604081205442600160a81b9091046001600160401b0316106122d2575060009081526014602052604090205461010090046001600160a01b031690565b506000919050565b919050565b60008181526017602052604090208054606091906122fc90613766565b905060000361234357600061230f612b2c565b90508061231b84612b3b565b60405160200161232c929190613a9b565b604051602081830303815290604052915050919050565b6000828152601760205260409020805461235c90613766565b80601f016020809104026020016040519081016040528092919081815260200182805461238890613766565b80156123d55780601f106123aa576101008083540402835291602001916123d5565b820191906000526020600020905b8154815290600101906020018083116123b857829003601f168201915b50505050509050919050565b600081815260156020526040812054426001600160401b03909116116122d257506001919050565b61241233610d33565b61246f5760405162461bcd60e51b815260206004820152602860248201527f457465726e756d506173733a204e6f7420746f6b656e206f776e6572204f7220604482015267185c1c1c9bdd995960c21b6064820152608401610a65565b600061247a8461228b565b6001600160a01b0316146124e05760405162461bcd60e51b815260206004820152602760248201527f457465726e756d506173733a204974656d20697320616c7265616479207375626044820152661cd8dc9a58995960ca1b6064820152608401610a65565b60008381526014602052604090208054610100600160a81b0319166101006001600160a01b038516021781556125164283613ad7565b815467ffffffffffffffff60a81b1916600160a81b6001600160401b039283160217825560405190831681526001600160a01b0384169085907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe906020015b60405180910390a350505050565b60006001600160e01b0319821663780e9d6360e01b1480610932575061093282612bcd565b6125b181612666565b61159e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610a65565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416908117909155819061262d826113a4565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000908152600460205260409020546001600160a01b0316151590565b60008061268f836113a4565b9050806001600160a01b0316846001600160a01b031614806126d657506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b806122835750836001600160a01b03166126ef846109ca565b6001600160a01b031614949350505050565b6000836001600160a01b03168260405160006040518083038185875af1925050503d806000811461274e576040519150601f19603f3d011682016040523d82523d6000602084013e612753565b606091505b50509050806127a45760405162461bcd60e51b815260206004820152601c60248201527f457465726e756d506173733a205472616e73666572206661696c6564000000006044820152606401610a65565b604080516001600160a01b03808816825286166020820152908101849052606081018390527faeadc2c673108f922a1042ef404b73ae1af992c9ae54249a4a7d13ef21ef2c189060800160405180910390a15050505050565b826001600160a01b0316612810826113a4565b6001600160a01b0316146128365760405162461bcd60e51b8152600401610a6590613afe565b6001600160a01b0382166128985760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a65565b6128a58383836001612c0d565b826001600160a01b03166128b8826113a4565b6001600160a01b0316146128de5760405162461bcd60e51b8152600401610a6590613afe565b600081815260066020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260058552838620805460001901905590871680865283862080546001019055868652600490945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6113a0828260405180602001604052806000815250612cae565b6000612993826113a4565b90506129a3816000846001612c0d565b6129ac826113a4565b600083815260066020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526005845282852080546000190190558785526004909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b031603612a8c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a65565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612b048484846127fd565b612b1084848484612ce1565b61225e5760405162461bcd60e51b8152600401610a6590613b43565b60606011805461094790613766565b60606000612b4883612de2565b60010190506000816001600160401b03811115612b6757612b67613425565b6040519080825280601f01601f191660200182016040528015612b91576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612b9b57509392505050565b60006001600160e01b031982166380ac58cd60e01b1480612bfe57506001600160e01b03198216635b5e139f60e01b145b80610932575061093282612eba565b612c1984848484612eef565b826001600160a01b0316846001600160a01b031614158015612c56575060008281526014602052604090205461010090046001600160a01b031615155b1561225e57600082815260146020908152604080832080546001600160e81b03191681556001018390555182815284917f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe9101612575565b612cb88383613023565b612cc56000848484612ce1565b610b065760405162461bcd60e51b8152600401610a6590613b43565b60006001600160a01b0384163b15612dd757604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612d25903390899088908890600401613b95565b6020604051808303816000875af1925050508015612d60575060408051601f3d908101601f19168201909252612d5d91810190613bd2565b60015b612dbd573d808015612d8e576040519150601f19603f3d011682016040523d82523d6000602084013e612d93565b606091505b508051600003612db55760405162461bcd60e51b8152600401610a6590613b43565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612283565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612e215772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612e4d576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612e6b57662386f26fc10000830492506010015b6305f5e1008310612e83576305f5e100830492506008015b6127108310612e9757612710830492506004015b60648310612ea9576064830492506002015b600a83106109325760010192915050565b60006001600160e01b0319821663152a902d60e11b148061093257506301ffc9a760e01b6001600160e01b0319831614610932565b6001811115612f5e5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610a65565b816001600160a01b038516612fba57612fb581600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b612fdd565b836001600160a01b0316856001600160a01b031614612fdd57612fdd858261319e565b6001600160a01b038416612ff957612ff48161323b565b61301c565b846001600160a01b0316846001600160a01b03161461301c5761301c84826132ea565b5050505050565b6001600160a01b0382166130795760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a65565b61308281612666565b156130cf5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a65565b6130dd600083836001612c0d565b6130e681612666565b156131335760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a65565b6001600160a01b038216600081815260056020908152604080832080546001019055848352600490915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600060016131ab8461162f565b6131b59190613a88565b600083815260096020526040902054909150808214613208576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a5460009061324d90600190613a88565b6000838152600b6020526040812054600a805493945090928490811061327557613275613a42565b9060005260206000200154905080600a838154811061329657613296613a42565b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a8054806132ce576132ce613bef565b6001900381819060005260206000200160009055905550505050565b60006132f58361162f565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b6001600160e01b03198116811461159e57600080fd5b60006020828403121561335657600080fd5b81356133618161332e565b9392505050565b60005b8381101561338357818101518382015260200161336b565b50506000910152565b600081518084526133a4816020860160208601613368565b601f01601f19169290920160200192915050565b602081526000613361602083018461338c565b6000602082840312156133dd57600080fd5b5035919050565b6001600160a01b038116811461159e57600080fd5b6000806040838503121561340c57600080fd5b8235613417816133e4565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561345557613455613425565b604051601f8501601f19908116603f0116810190828211818310171561347d5761347d613425565b8160405280935085815286868601111561349657600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126134c157600080fd5b6133618383356020850161343b565b600080604083850312156134e357600080fd5b8235915060208301356001600160401b0381111561350057600080fd5b61350c858286016134b0565b9150509250929050565b60008060006060848603121561352b57600080fd5b8335613536816133e4565b92506020840135613546816133e4565b929592945050506040919091013590565b6000806040838503121561356a57600080fd5b50508035926020909101359150565b60006020828403121561358b57600080fd5b8135613361816133e4565b6000602082840312156135a857600080fd5b81356001600160401b038111156135be57600080fd5b612283848285016134b0565b801515811461159e57600080fd5b6000806000606084860312156135ed57600080fd5b833592506020840135613546816135ca565b80356001600160401b03811681146122da57600080fd5b6000806040838503121561362957600080fd5b82359150613639602084016135ff565b90509250929050565b6000806040838503121561365557600080fd5b8235613660816133e4565b91506020830135613670816135ca565b809150509250929050565b6000806000806080858703121561369157600080fd5b843561369c816133e4565b935060208501356136ac816133e4565b92506040850135915060608501356001600160401b038111156136ce57600080fd5b8501601f810187136136df57600080fd5b6136ee8782356020840161343b565b91505092959194509250565b60008060006060848603121561370f57600080fd5b833592506020840135613721816133e4565b915061372f604085016135ff565b90509250925092565b6000806040838503121561374b57600080fd5b8235613756816133e4565b91506020830135613670816133e4565b600181811c9082168061377a57607f821691505b60208210810361379a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156137b257600080fd5b8151613361816135ca565b6020808252601a908201527f457465726e756d506173733a20556e617574686f72697a656421000000000000604082015260600190565b601f821115610b0657600081815260208120601f850160051c8101602086101561381b5750805b601f850160051c820191505b8181101561383a57828155600101613827565b505050505050565b81516001600160401b0381111561385b5761385b613425565b61386f816138698454613766565b846137f4565b602080601f8311600181146138a4576000841561388c5750858301515b600019600386901b1c1916600185901b17855561383a565b600085815260208120601f198616915b828110156138d3578886015182559484019460019091019084016138b4565b50858210156138f15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526025908201527f457465726e756d706173733a20537562736372697074696f6e20697320696e61604082015264637469766560d81b606082015260800190565b60208082526027908201527f457465726e756d506173733a2043616e63656c6c6174696f6e20697320696e2060408201526670726f6365737360c81b606082015260800190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610932576109326139da565b600082613a2457634e487b7160e01b600052601260045260246000fd5b500490565b600060018201613a3b57613a3b6139da565b5060010190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613a6a57600080fd5b8151613361816133e4565b80820180821115610932576109326139da565b81810381811115610932576109326139da565b60008351613aad818460208801613368565b602f60f81b9083019081528351613acb816001840160208801613368565b01600101949350505050565b6001600160401b03818116838216019080821115613af757613af76139da565b5092915050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613bc89083018461338c565b9695505050505050565b600060208284031215613be457600080fd5b81516133618161332e565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220474fecd38c984f3b35fdf2f3b4cd48b2f964d0551eaec3b3593ef373d593afea64736f6c63430008110033"; type EternumPassConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/FusionSeries__factory.ts b/typechain-types/factories/FusionSeries__factory.ts index c7e4b4d..6fb97cc 100644 --- a/typechain-types/factories/FusionSeries__factory.ts +++ b/typechain-types/factories/FusionSeries__factory.ts @@ -612,7 +612,7 @@ const _abi = [ ]; const _bytecode = - "0x60806040526009805460ff191660011790553480156200001e57600080fd5b506040516200247a3803806200247a8339810160408190526200004191620001a3565b846200004d81620000af565b5060046200005c8582620002e9565b5060056200006b8482620002e9565b50600680546001600160a01b039384166001600160a01b031991821617909155600b80549290931691811682179092556007805490921617905550620003b5915050565b6002620000bd8282620002e9565b5050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000e957600080fd5b81516001600160401b0380821115620001065762000106620000c1565b604051601f8301601f19908116603f01168101908282118183101715620001315762000131620000c1565b816040528381526020925086838588010111156200014e57600080fd5b600091505b8382101562000172578582018301518183018401529082019062000153565b600093810190920192909252949350505050565b80516001600160a01b03811681146200019e57600080fd5b919050565b600080600080600060a08688031215620001bc57600080fd5b85516001600160401b0380821115620001d457600080fd5b620001e289838a01620000d7565b96506020880151915080821115620001f957600080fd5b6200020789838a01620000d7565b955060408801519150808211156200021e57600080fd5b506200022d88828901620000d7565b9350506200023e6060870162000186565b91506200024e6080870162000186565b90509295509295909350565b600181811c908216806200026f57607f821691505b6020821081036200029057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002e457600081815260208120601f850160051c81016020861015620002bf5750805b601f850160051c820191505b81811015620002e057828155600101620002cb565b5050505b505050565b81516001600160401b03811115620003055762000305620000c1565b6200031d816200031684546200025a565b8462000296565b602080601f8311600181146200035557600084156200033c5750858301515b600019600386901b1c1916600185901b178555620002e0565b600085815260208120601f198616915b82811015620003865788860151825594840194600190910190840162000365565b5085821015620003a55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6120b580620003c56000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c80634f558e79116100ad578063a22cb46511610071578063a22cb4651461029f578063a4b11052146102b2578063bd85b039146102c5578063e985e9c5146102e5578063f242432a1461032157600080fd5b80634f558e791461023057806354fd4d501461025257806378aa2b38146102715780637ab007151461028457806395d89b411461029757600080fd5b80630e89341c116100f45780630e89341c146101ce57806321988227146101e15780632eb2c2d6146101f45780634e1273f4146102075780634eeca0761461022757600080fd5b8062fdd58e1461013057806301ffc9a71461015657806302fe53051461017957806306fdde031461018e5780630aa7c854146101a3575b600080fd5b61014361013e3660046115c9565b610334565b6040519081526020015b60405180910390f35b610169610164366004611609565b6103cd565b604051901515815260200161014d565b61018c6101873660046116e4565b6103d8565b005b61019661047a565b60405161014d9190611767565b6007546101b6906001600160a01b031681565b6040516001600160a01b03909116815260200161014d565b6101966101dc36600461177a565b610508565b6101436101ef366004611793565b6105aa565b61018c610202366004611895565b6106e2565b61021a61021536600461193f565b61072e565b60405161014d9190611a45565b61014360085481565b61016961023e36600461177a565b600090815260036020526040902054151590565b60095461025f9060ff1681565b60405160ff909116815260200161014d565b61014361027f366004611a58565b610858565b61018c610292366004611ad6565b610991565b610196610a52565b61018c6102ad366004611b06565b610a5f565b6006546101b6906001600160a01b031681565b6101436102d336600461177a565b60009081526003602052604090205490565b6101696102f3366004611b3d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61018c61032f366004611b70565b610a6e565b60006001600160a01b0383166103a45760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006103c782610ab3565b600b546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561042e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104529190611bd5565b61046e5760405162461bcd60e51b815260040161039b90611bf2565b61047781610b03565b50565b6004805461048790611c29565b80601f01602080910402602001604051908101604052809291908181526020018280546104b390611c29565b80156105005780601f106104d557610100808354040283529160200191610500565b820191906000526020600020905b8154815290600101906020018083116104e357829003601f168201915b505050505081565b6000818152600a6020526040902080546060919061052590611c29565b80601f016020809104026020016040519081016040528092919081815260200182805461055190611c29565b801561059e5780601f106105735761010080835404028352916020019161059e565b820191906000526020600020905b81548152906001019060200180831161058157829003601f168201915b50505050509050919050565b600b546000906001600160a01b031663efd46065336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610603573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106279190611bd5565b6106435760405162461bcd60e51b815260040161039b90611bf2565b6008805490600061065383611c79565b909155505060085461066733828787610b0f565b6000818152600a6020526040902061067f8482611cdd565b50600654610697906001600160a01b03166001610a5f565b84336001600160a01b0316827fe4811c382d53d91e396ee6180074ce1480324060a9949aef9a8452ef91c65e2e866040516106d29190611767565b60405180910390a4949350505050565b6001600160a01b0385163314806106fe57506106fe85336102f3565b61071a5760405162461bcd60e51b815260040161039b90611d9d565b6107278585858585610c32565b5050505050565b606081518351146107935760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161039b565b6000835167ffffffffffffffff8111156107af576107af61162d565b6040519080825280602002602001820160405280156107d8578160200160208202803683370190505b50905060005b8451811015610850576108238582815181106107fc576107fc611deb565b602002602001015185838151811061081657610816611deb565b6020026020010151610334565b82828151811061083557610835611deb565b602090810291909101015261084981611c79565b90506107de565b509392505050565b600b546000906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156108b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d59190611bd5565b6108f15760405162461bcd60e51b815260040161039b90611bf2565b6008805490600061090183611c79565b909155505060085461091586828787610b0f565b6000818152600a6020526040902061092d8482611cdd565b50600654610945906001600160a01b03166001610a5f565b84336001600160a01b0316827fe4811c382d53d91e396ee6180074ce1480324060a9949aef9a8452ef91c65e2e866040516109809190611767565b60405180910390a495945050505050565b8061099c3384610334565b14610a055760405162461bcd60e51b815260206004820152603360248201527f467573696f6e5365726965733a2043616c6c6572206973206e6f7420746f6b656044820152721b881bdddb995c881bdc88185c1c1c9bdd9959606a1b606482015260840161039b565b610a10338383610e1d565b817fbc6f06e8b7e09db53951fb0ae62c2bb8ac33d7ec0a02d81c36c0877f80020d46336040516001600160a01b03909116815260200160405180910390a25050565b6005805461048790611c29565b610a6a338383610fad565b5050565b6001600160a01b038516331480610a8a5750610a8a85336102f3565b610aa65760405162461bcd60e51b815260040161039b90611d9d565b610727858585858561108d565b60006001600160e01b03198216636cdb3d1360e11b1480610ae457506001600160e01b031982166303a24d0760e21b145b806103c757506301ffc9a760e01b6001600160e01b03198316146103c7565b6002610a6a8282611cdd565b6001600160a01b038416610b6f5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161039b565b336000610b7b856111c5565b90506000610b88856111c5565b9050610b9983600089858589611210565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290610bc9908490611e01565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610c298360008989898961121e565b50505050505050565b8151835114610c945760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161039b565b6001600160a01b038416610cba5760405162461bcd60e51b815260040161039b90611e14565b33610cc9818787878787611210565b60005b8451811015610daf576000858281518110610ce957610ce9611deb565b602002602001015190506000858381518110610d0757610d07611deb565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610d575760405162461bcd60e51b815260040161039b90611e59565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610d94908490611e01565b9250508190555050505080610da890611c79565b9050610ccc565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610dff929190611ea3565b60405180910390a4610e15818787878787611379565b505050505050565b6001600160a01b038316610e7f5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b606482015260840161039b565b336000610e8b846111c5565b90506000610e98846111c5565b9050610eb883876000858560405180602001604052806000815250611210565b6000858152602081815260408083206001600160a01b038a16845290915290205484811015610f355760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b606482015260840161039b565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052610c29565b816001600160a01b0316836001600160a01b0316036110205760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161039b565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166110b35760405162461bcd60e51b815260040161039b90611e14565b3360006110bf856111c5565b905060006110cc856111c5565b90506110dc838989858589611210565b6000868152602081815260408083206001600160a01b038c1684529091529020548581101561111d5760405162461bcd60e51b815260040161039b90611e59565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a1682528120805488929061115a908490611e01565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46111ba848a8a8a8a8a61121e565b505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106111ff576111ff611deb565b602090810291909101015292915050565b610e15868686868686611434565b6001600160a01b0384163b15610e155760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906112629089908990889088908890600401611ed1565b6020604051808303816000875af192505050801561129d575060408051601f3d908101601f1916820190925261129a91810190611f16565b60015b611349576112a9611f33565b806308c379a0036112e257506112bd611f4f565b806112c857506112e4565b8060405162461bcd60e51b815260040161039b9190611767565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161039b565b6001600160e01b0319811663f23a6e6160e01b14610c295760405162461bcd60e51b815260040161039b90611fd9565b6001600160a01b0384163b15610e155760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906113bd9089908990889088908890600401612021565b6020604051808303816000875af19250505080156113f8575060408051601f3d908101601f191682019092526113f591810190611f16565b60015b611404576112a9611f33565b6001600160e01b0319811663bc197c8160e01b14610c295760405162461bcd60e51b815260040161039b90611fd9565b6001600160a01b0385166114bb5760005b83518110156114b95782818151811061146057611460611deb565b60200260200101516003600086848151811061147e5761147e611deb565b6020026020010151815260200190815260200160002060008282546114a39190611e01565b909155506114b2905081611c79565b9050611445565b505b6001600160a01b038416610e155760005b8351811015610c295760008482815181106114e9576114e9611deb565b60200260200101519050600084838151811061150757611507611deb565b602002602001015190506000600360008481526020019081526020016000205490508181101561158a5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b606482015260840161039b565b600092835260036020526040909220910390556115a681611c79565b90506114cc565b80356001600160a01b03811681146115c457600080fd5b919050565b600080604083850312156115dc57600080fd5b6115e5836115ad565b946020939093013593505050565b6001600160e01b03198116811461047757600080fd5b60006020828403121561161b57600080fd5b8135611626816115f3565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff811182821017156116695761166961162d565b6040525050565b600082601f83011261168157600080fd5b813567ffffffffffffffff81111561169b5761169b61162d565b6040516116b2601f8301601f191660200182611643565b8181528460208386010111156116c757600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156116f657600080fd5b813567ffffffffffffffff81111561170d57600080fd5b61171984828501611670565b949350505050565b6000815180845260005b818110156117475760208185018101518683018201520161172b565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006116266020830184611721565b60006020828403121561178c57600080fd5b5035919050565b6000806000606084860312156117a857600080fd5b83359250602084013567ffffffffffffffff808211156117c757600080fd5b6117d387838801611670565b935060408601359150808211156117e957600080fd5b506117f686828701611670565b9150509250925092565b600067ffffffffffffffff82111561181a5761181a61162d565b5060051b60200190565b600082601f83011261183557600080fd5b8135602061184282611800565b60405161184f8282611643565b83815260059390931b850182019282810191508684111561186f57600080fd5b8286015b8481101561188a5780358352918301918301611873565b509695505050505050565b600080600080600060a086880312156118ad57600080fd5b6118b6866115ad565b94506118c4602087016115ad565b9350604086013567ffffffffffffffff808211156118e157600080fd5b6118ed89838a01611824565b9450606088013591508082111561190357600080fd5b61190f89838a01611824565b9350608088013591508082111561192557600080fd5b5061193288828901611670565b9150509295509295909350565b6000806040838503121561195257600080fd5b823567ffffffffffffffff8082111561196a57600080fd5b818501915085601f83011261197e57600080fd5b8135602061198b82611800565b6040516119988282611643565b83815260059390931b85018201928281019150898411156119b857600080fd5b948201945b838610156119dd576119ce866115ad565b825294820194908201906119bd565b965050860135925050808211156119f357600080fd5b50611a0085828601611824565b9150509250929050565b600081518084526020808501945080840160005b83811015611a3a57815187529582019590820190600101611a1e565b509495945050505050565b6020815260006116266020830184611a0a565b60008060008060808587031215611a6e57600080fd5b611a77856115ad565b935060208501359250604085013567ffffffffffffffff80821115611a9b57600080fd5b611aa788838901611670565b93506060870135915080821115611abd57600080fd5b50611aca87828801611670565b91505092959194509250565b60008060408385031215611ae957600080fd5b50508035926020909101359150565b801515811461047757600080fd5b60008060408385031215611b1957600080fd5b611b22836115ad565b91506020830135611b3281611af8565b809150509250929050565b60008060408385031215611b5057600080fd5b611b59836115ad565b9150611b67602084016115ad565b90509250929050565b600080600080600060a08688031215611b8857600080fd5b611b91866115ad565b9450611b9f602087016115ad565b93506040860135925060608601359150608086013567ffffffffffffffff811115611bc957600080fd5b61193288828901611670565b600060208284031215611be757600080fd5b815161162681611af8565b6020808252601b908201527f467573696f6e5365726965733a20556e617574686f72697a6564210000000000604082015260600190565b600181811c90821680611c3d57607f821691505b602082108103611c5d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600060018201611c8b57611c8b611c63565b5060010190565b601f821115611cd857600081815260208120601f850160051c81016020861015611cb95750805b601f850160051c820191505b81811015610e1557828155600101611cc5565b505050565b815167ffffffffffffffff811115611cf757611cf761162d565b611d0b81611d058454611c29565b84611c92565b602080601f831160018114611d405760008415611d285750858301515b600019600386901b1c1916600185901b178555610e15565b600085815260208120601f198616915b82811015611d6f57888601518255948401946001909101908401611d50565b5085821015611d8d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b808201808211156103c7576103c7611c63565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000611eb66040830185611a0a565b8281036020840152611ec88185611a0a565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611f0b90830184611721565b979650505050505050565b600060208284031215611f2857600080fd5b8151611626816115f3565b600060033d1115611f4c5760046000803e5060005160e01c5b90565b600060443d1015611f5d5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611f8d57505050505090565b8285019150815181811115611fa55750505050505090565b843d8701016020828501011115611fbf5750505050505090565b611fce60208286010187611643565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061204d90830186611a0a565b828103606084015261205f8186611a0a565b905082810360808401526120738185611721565b9897505050505050505056fea264697066735822122056c2d23b85b84aaf1cb663816bb5402a051e021ddd825afc9e7bf6df0898e58664736f6c63430008110033"; + "0x60806040523480156200001157600080fd5b506040516200246838038062002468833981016040819052620000349162000196565b846200004081620000a2565b5060046200004f8582620002dc565b5060056200005e8482620002dc565b50600680546001600160a01b039384166001600160a01b031991821617909155600a80549290931691811682179092556007805490921617905550620003a8915050565b6002620000b08282620002dc565b5050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000dc57600080fd5b81516001600160401b0380821115620000f957620000f9620000b4565b604051601f8301601f19908116603f01168101908282118183101715620001245762000124620000b4565b816040528381526020925086838588010111156200014157600080fd5b600091505b8382101562000165578582018301518183018401529082019062000146565b600093810190920192909252949350505050565b80516001600160a01b03811681146200019157600080fd5b919050565b600080600080600060a08688031215620001af57600080fd5b85516001600160401b0380821115620001c757600080fd5b620001d589838a01620000ca565b96506020880151915080821115620001ec57600080fd5b620001fa89838a01620000ca565b955060408801519150808211156200021157600080fd5b506200022088828901620000ca565b935050620002316060870162000179565b9150620002416080870162000179565b90509295509295909350565b600181811c908216806200026257607f821691505b6020821081036200028357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002d757600081815260208120601f850160051c81016020861015620002b25750805b601f850160051c820191505b81811015620002d357828155600101620002be565b5050505b505050565b81516001600160401b03811115620002f857620002f8620000b4565b62000310816200030984546200024d565b8462000289565b602080601f8311600181146200034857600084156200032f5750858301515b600019600386901b1c1916600185901b178555620002d3565b600085815260208120601f198616915b82811015620003795788860151825594840194600190910190840162000358565b5085821015620003985787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6120b080620003b86000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c80634f558e79116100ad578063a22cb46511610071578063a22cb4651461029a578063a4b11052146102ad578063bd85b039146102c0578063e985e9c5146102e0578063f242432a1461031c57600080fd5b80634f558e791461023057806354fd4d501461025257806378aa2b381461026c5780637ab007151461027f57806395d89b411461029257600080fd5b80630e89341c116100f45780630e89341c146101ce57806321988227146101e15780632eb2c2d6146101f45780634e1273f4146102075780634eeca0761461022757600080fd5b8062fdd58e1461013057806301ffc9a71461015657806302fe53051461017957806306fdde031461018e5780630aa7c854146101a3575b600080fd5b61014361013e3660046115c4565b61032f565b6040519081526020015b60405180910390f35b610169610164366004611604565b6103c8565b604051901515815260200161014d565b61018c6101873660046116df565b6103d3565b005b610196610475565b60405161014d9190611762565b6007546101b6906001600160a01b031681565b6040516001600160a01b03909116815260200161014d565b6101966101dc366004611775565b610503565b6101436101ef36600461178e565b6105a5565b61018c610202366004611890565b6106dd565b61021a61021536600461193a565b610729565b60405161014d9190611a40565b61014360085481565b61016961023e366004611775565b600090815260036020526040902054151590565b61025a600181565b60405160ff909116815260200161014d565b61014361027a366004611a53565b610853565b61018c61028d366004611ad1565b61098c565b610196610a4d565b61018c6102a8366004611b01565b610a5a565b6006546101b6906001600160a01b031681565b6101436102ce366004611775565b60009081526003602052604090205490565b6101696102ee366004611b38565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b61018c61032a366004611b6b565b610a69565b60006001600160a01b03831661039f5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006103c282610aae565b600a546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610429573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044d9190611bd0565b6104695760405162461bcd60e51b815260040161039690611bed565b61047281610afe565b50565b6004805461048290611c24565b80601f01602080910402602001604051908101604052809291908181526020018280546104ae90611c24565b80156104fb5780601f106104d0576101008083540402835291602001916104fb565b820191906000526020600020905b8154815290600101906020018083116104de57829003601f168201915b505050505081565b600081815260096020526040902080546060919061052090611c24565b80601f016020809104026020016040519081016040528092919081815260200182805461054c90611c24565b80156105995780601f1061056e57610100808354040283529160200191610599565b820191906000526020600020905b81548152906001019060200180831161057c57829003601f168201915b50505050509050919050565b600a546000906001600160a01b031663efd46065336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156105fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106229190611bd0565b61063e5760405162461bcd60e51b815260040161039690611bed565b6008805490600061064e83611c74565b909155505060085461066233828787610b0a565b600081815260096020526040902061067a8482611cd8565b50600654610692906001600160a01b03166001610a5a565b84336001600160a01b0316827fe4811c382d53d91e396ee6180074ce1480324060a9949aef9a8452ef91c65e2e866040516106cd9190611762565b60405180910390a4949350505050565b6001600160a01b0385163314806106f957506106f985336102ee565b6107155760405162461bcd60e51b815260040161039690611d98565b6107228585858585610c2d565b5050505050565b6060815183511461078e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610396565b6000835167ffffffffffffffff8111156107aa576107aa611628565b6040519080825280602002602001820160405280156107d3578160200160208202803683370190505b50905060005b845181101561084b5761081e8582815181106107f7576107f7611de6565b602002602001015185838151811061081157610811611de6565b602002602001015161032f565b82828151811061083057610830611de6565b602090810291909101015261084481611c74565b90506107d9565b509392505050565b600a546000906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156108ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d09190611bd0565b6108ec5760405162461bcd60e51b815260040161039690611bed565b600880549060006108fc83611c74565b909155505060085461091086828787610b0a565b60008181526009602052604090206109288482611cd8565b50600654610940906001600160a01b03166001610a5a565b84336001600160a01b0316827fe4811c382d53d91e396ee6180074ce1480324060a9949aef9a8452ef91c65e2e8660405161097b9190611762565b60405180910390a495945050505050565b80610997338461032f565b14610a005760405162461bcd60e51b815260206004820152603360248201527f467573696f6e5365726965733a2043616c6c6572206973206e6f7420746f6b656044820152721b881bdddb995c881bdc88185c1c1c9bdd9959606a1b6064820152608401610396565b610a0b338383610e18565b817fbc6f06e8b7e09db53951fb0ae62c2bb8ac33d7ec0a02d81c36c0877f80020d46336040516001600160a01b03909116815260200160405180910390a25050565b6005805461048290611c24565b610a65338383610fa8565b5050565b6001600160a01b038516331480610a855750610a8585336102ee565b610aa15760405162461bcd60e51b815260040161039690611d98565b6107228585858585611088565b60006001600160e01b03198216636cdb3d1360e11b1480610adf57506001600160e01b031982166303a24d0760e21b145b806103c257506301ffc9a760e01b6001600160e01b03198316146103c2565b6002610a658282611cd8565b6001600160a01b038416610b6a5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610396565b336000610b76856111c0565b90506000610b83856111c0565b9050610b948360008985858961120b565b6000868152602081815260408083206001600160a01b038b16845290915281208054879290610bc4908490611dfc565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610c2483600089898989611219565b50505050505050565b8151835114610c8f5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610396565b6001600160a01b038416610cb55760405162461bcd60e51b815260040161039690611e0f565b33610cc481878787878761120b565b60005b8451811015610daa576000858281518110610ce457610ce4611de6565b602002602001015190506000858381518110610d0257610d02611de6565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610d525760405162461bcd60e51b815260040161039690611e54565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610d8f908490611dfc565b9250508190555050505080610da390611c74565b9050610cc7565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610dfa929190611e9e565b60405180910390a4610e10818787878787611374565b505050505050565b6001600160a01b038316610e7a5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610396565b336000610e86846111c0565b90506000610e93846111c0565b9050610eb38387600085856040518060200160405280600081525061120b565b6000858152602081815260408083206001600160a01b038a16845290915290205484811015610f305760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610396565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052610c24565b816001600160a01b0316836001600160a01b03160361101b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610396565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166110ae5760405162461bcd60e51b815260040161039690611e0f565b3360006110ba856111c0565b905060006110c7856111c0565b90506110d783898985858961120b565b6000868152602081815260408083206001600160a01b038c168452909152902054858110156111185760405162461bcd60e51b815260040161039690611e54565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611155908490611dfc565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46111b5848a8a8a8a8a611219565b505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106111fa576111fa611de6565b602090810291909101015292915050565b610e1086868686868661142f565b6001600160a01b0384163b15610e105760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061125d9089908990889088908890600401611ecc565b6020604051808303816000875af1925050508015611298575060408051601f3d908101601f1916820190925261129591810190611f11565b60015b611344576112a4611f2e565b806308c379a0036112dd57506112b8611f4a565b806112c357506112df565b8060405162461bcd60e51b81526004016103969190611762565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610396565b6001600160e01b0319811663f23a6e6160e01b14610c245760405162461bcd60e51b815260040161039690611fd4565b6001600160a01b0384163b15610e105760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906113b8908990899088908890889060040161201c565b6020604051808303816000875af19250505080156113f3575060408051601f3d908101601f191682019092526113f091810190611f11565b60015b6113ff576112a4611f2e565b6001600160e01b0319811663bc197c8160e01b14610c245760405162461bcd60e51b815260040161039690611fd4565b6001600160a01b0385166114b65760005b83518110156114b45782818151811061145b5761145b611de6565b60200260200101516003600086848151811061147957611479611de6565b60200260200101518152602001908152602001600020600082825461149e9190611dfc565b909155506114ad905081611c74565b9050611440565b505b6001600160a01b038416610e105760005b8351811015610c245760008482815181106114e4576114e4611de6565b60200260200101519050600084838151811061150257611502611de6565b60200260200101519050600060036000848152602001908152602001600020549050818110156115855760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b6064820152608401610396565b600092835260036020526040909220910390556115a181611c74565b90506114c7565b80356001600160a01b03811681146115bf57600080fd5b919050565b600080604083850312156115d757600080fd5b6115e0836115a8565b946020939093013593505050565b6001600160e01b03198116811461047257600080fd5b60006020828403121561161657600080fd5b8135611621816115ee565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff8111828210171561166457611664611628565b6040525050565b600082601f83011261167c57600080fd5b813567ffffffffffffffff81111561169657611696611628565b6040516116ad601f8301601f19166020018261163e565b8181528460208386010111156116c257600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156116f157600080fd5b813567ffffffffffffffff81111561170857600080fd5b6117148482850161166b565b949350505050565b6000815180845260005b8181101561174257602081850181015186830182015201611726565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000611621602083018461171c565b60006020828403121561178757600080fd5b5035919050565b6000806000606084860312156117a357600080fd5b83359250602084013567ffffffffffffffff808211156117c257600080fd5b6117ce8783880161166b565b935060408601359150808211156117e457600080fd5b506117f18682870161166b565b9150509250925092565b600067ffffffffffffffff82111561181557611815611628565b5060051b60200190565b600082601f83011261183057600080fd5b8135602061183d826117fb565b60405161184a828261163e565b83815260059390931b850182019282810191508684111561186a57600080fd5b8286015b84811015611885578035835291830191830161186e565b509695505050505050565b600080600080600060a086880312156118a857600080fd5b6118b1866115a8565b94506118bf602087016115a8565b9350604086013567ffffffffffffffff808211156118dc57600080fd5b6118e889838a0161181f565b945060608801359150808211156118fe57600080fd5b61190a89838a0161181f565b9350608088013591508082111561192057600080fd5b5061192d8882890161166b565b9150509295509295909350565b6000806040838503121561194d57600080fd5b823567ffffffffffffffff8082111561196557600080fd5b818501915085601f83011261197957600080fd5b81356020611986826117fb565b604051611993828261163e565b83815260059390931b85018201928281019150898411156119b357600080fd5b948201945b838610156119d8576119c9866115a8565b825294820194908201906119b8565b965050860135925050808211156119ee57600080fd5b506119fb8582860161181f565b9150509250929050565b600081518084526020808501945080840160005b83811015611a3557815187529582019590820190600101611a19565b509495945050505050565b6020815260006116216020830184611a05565b60008060008060808587031215611a6957600080fd5b611a72856115a8565b935060208501359250604085013567ffffffffffffffff80821115611a9657600080fd5b611aa28883890161166b565b93506060870135915080821115611ab857600080fd5b50611ac58782880161166b565b91505092959194509250565b60008060408385031215611ae457600080fd5b50508035926020909101359150565b801515811461047257600080fd5b60008060408385031215611b1457600080fd5b611b1d836115a8565b91506020830135611b2d81611af3565b809150509250929050565b60008060408385031215611b4b57600080fd5b611b54836115a8565b9150611b62602084016115a8565b90509250929050565b600080600080600060a08688031215611b8357600080fd5b611b8c866115a8565b9450611b9a602087016115a8565b93506040860135925060608601359150608086013567ffffffffffffffff811115611bc457600080fd5b61192d8882890161166b565b600060208284031215611be257600080fd5b815161162181611af3565b6020808252601b908201527f467573696f6e5365726965733a20556e617574686f72697a6564210000000000604082015260600190565b600181811c90821680611c3857607f821691505b602082108103611c5857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600060018201611c8657611c86611c5e565b5060010190565b601f821115611cd357600081815260208120601f850160051c81016020861015611cb45750805b601f850160051c820191505b81811015610e1057828155600101611cc0565b505050565b815167ffffffffffffffff811115611cf257611cf2611628565b611d0681611d008454611c24565b84611c8d565b602080601f831160018114611d3b5760008415611d235750858301515b600019600386901b1c1916600185901b178555610e10565b600085815260208120601f198616915b82811015611d6a57888601518255948401946001909101908401611d4b565b5085821015611d885787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b808201808211156103c2576103c2611c5e565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000611eb16040830185611a05565b8281036020840152611ec38185611a05565b95945050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611f069083018461171c565b979650505050505050565b600060208284031215611f2357600080fd5b8151611621816115ee565b600060033d1115611f475760046000803e5060005160e01c5b90565b600060443d1015611f585790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611f8857505050505090565b8285019150815181811115611fa05750505050505090565b843d8701016020828501011115611fba5750505050505090565b611fc96020828601018761163e565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a06040820181905260009061204890830186611a05565b828103606084015261205a8186611a05565b9050828103608084015261206e818561171c565b9897505050505050505056fea26469706673582212208d788a6ae08f8529c8bde3422728e48ca4d8dcf87759af00d323ab2801a65cb264736f6c63430008110033"; type FusionSeriesConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/InstaGen__factory.ts b/typechain-types/factories/InstaGen__factory.ts index 132e151..eaddc5d 100644 --- a/typechain-types/factories/InstaGen__factory.ts +++ b/typechain-types/factories/InstaGen__factory.ts @@ -985,7 +985,7 @@ const _abi = [ ]; const _bytecode = - "0x60e0604052600a805460ff191660011790553480156200001e57600080fd5b506040516200277c3803806200277c8339810160408190526200004191620002e9565b8989600462000051838262000461565b50600562000060828262000461565b5060016002555050601080546001600160a01b03808a166001600160a01b031992831617909255600c8054928b1692909116919091179055600e8690556080859052620000ae84426200052d565b60a05260c0839052600b620000c4828262000461565b50620000d1338362000102565b5050600d80546001600160a01b0319166001600160a01b039690961695909517909455506200055595505050505050565b6127106001600160601b0382161115620001765760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620001ce5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016200016d565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600055565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200022f57600080fd5b81516001600160401b03808211156200024c576200024c62000207565b604051601f8301601f19908116603f0116810190828211818310171562000277576200027762000207565b816040528381526020925086838588010111156200029457600080fd5b600091505b83821015620002b8578582018301518183018401529082019062000299565b600093810190920192909252949350505050565b80516001600160a01b0381168114620002e457600080fd5b919050565b6000806000806000806000806000806101408b8d0312156200030a57600080fd5b8a516001600160401b03808211156200032257600080fd5b620003308e838f016200021d565b9b5060208d01519150808211156200034757600080fd5b620003558e838f016200021d565b9a506200036560408e01620002cc565b99506200037560608e01620002cc565b985060808d0151975060a08d0151965060c08d0151955060e08d015194506101008d015193506101208d0151915080821115620003b157600080fd5b50620003c08d828e016200021d565b9150509295989b9194979a5092959850565b600181811c90821680620003e757607f821691505b6020821081036200040857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200045c57600081815260208120601f850160051c81016020861015620004375750805b601f850160051c820191505b81811015620004585782815560010162000443565b5050505b505050565b81516001600160401b038111156200047d576200047d62000207565b62000495816200048e8454620003d2565b846200040e565b602080601f831160018114620004cd5760008415620004b45750858301515b600019600386901b1c1916600185901b17855562000458565b600085815260208120601f198616915b82811015620004fe57888601518255948401946001909101908401620004dd565b50858210156200051d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200054f57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c0516121e26200059a6000396000818161064a015261105701526000818161038201526110ed01526000818161069e015261111701526121e26000f3fe6080604052600436106101ee5760003560e01c806370a082311161010d578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb0114610638578063e030565e1461066c578063e757c17d1461068c578063e985e9c5146106c0578063f51f96dd146106e057600080fd5b8063b88d4fde146105c5578063ba91caae146105d8578063c2f1f14a146105f8578063c87b56dd1461061857600080fd5b80639874cd97116100dc5780639874cd97146104c9578063a0712d681461055d578063a22cb46514610585578063a4b11052146105a557600080fd5b806370a0823114610443578063783a112b146104635780638fc88c481461047657806395d89b41146104b457600080fd5b80632890e0d71161018557806342966c681161015457806342966c68146103b757806354fd4d50146103d75780636352211e14610403578063655bc8db1461042357600080fd5b80632890e0d7146103115780632a55205a146103315780633692d1181461037057806342842e0e146103a457600080fd5b80630aa7c854116101c15780630aa7c8541461029757806318160ddd146102b75780631919fed7146102de57806323b872dd146102fe57600080fd5b806301ffc9a7146101f357806306fdde0314610228578063081812fc1461024a578063095ea7b314610282575b600080fd5b3480156101ff57600080fd5b5061021361020e366004611cb7565b6106f6565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023d610747565b60405161021f9190611d24565b34801561025657600080fd5b5061026a610265366004611d37565b6107d9565b6040516001600160a01b03909116815260200161021f565b610295610290366004611d65565b610814565b005b3480156102a357600080fd5b50600d5461026a906001600160a01b031681565b3480156102c357600080fd5b5060035460025403600019015b60405190815260200161021f565b3480156102ea57600080fd5b506102956102f9366004611d37565b610824565b61029561030c366004611d91565b6108f4565b34801561031d57600080fd5b5061029561032c366004611d37565b610a63565b34801561033d57600080fd5b5061035161034c366004611dd2565b610b3c565b604080516001600160a01b03909316835260208301919091520161021f565b34801561037c57600080fd5b506102d07f000000000000000000000000000000000000000000000000000000000000000081565b6102956103b2366004611d91565b610be8565b3480156103c357600080fd5b506102956103d2366004611d37565b610c08565b3480156103e357600080fd5b50600a546103f19060ff1681565b60405160ff909116815260200161021f565b34801561040f57600080fd5b5061026a61041e366004611d37565b610c16565b34801561042f57600080fd5b5061029561043e366004611e02565b610c21565b34801561044f57600080fd5b506102d061045e366004611e29565b610cd2565b610295610471366004611dd2565b610d18565b34801561048257600080fd5b506102d0610491366004611d37565b6000908152600f6020526040902054600160a81b900467ffffffffffffffff1690565b3480156104c057600080fd5b5061023d611032565b3480156104d557600080fd5b506105246104e4366004611d37565b600f602052600090815260409020805460019091015460ff82169161010081046001600160a01b031691600160a81b90910467ffffffffffffffff169084565b6040805194151585526001600160a01b03909316602085015267ffffffffffffffff90911691830191909152606082015260800161021f565b61057061056b366004611d37565b611041565b6040805192835260208301919091520161021f565b34801561059157600080fd5b506102956105a0366004611e46565b6112d6565b3480156105b157600080fd5b50600c5461026a906001600160a01b031681565b6102956105d3366004611e95565b611342565b3480156105e457600080fd5b506102d06105f3366004611dd2565b611383565b34801561060457600080fd5b5061026a610613366004611d37565b6113a7565b34801561062457600080fd5b5061023d610633366004611d37565b6113fc565b34801561064457600080fd5b506102d07f000000000000000000000000000000000000000000000000000000000000000081565b34801561067857600080fd5b50610295610687366004611f75565b611476565b34801561069857600080fd5b506102d07f000000000000000000000000000000000000000000000000000000000000000081565b3480156106cc57600080fd5b506102136106db366004611fc4565b6115d6565b3480156106ec57600080fd5b506102d0600e5481565b6000636ad56fd360e11b6001600160e01b031983160161071857506001919050565b6314bdb52960e21b6001600160e01b031983160161073857506001919050565b61074182611604565b92915050565b60606004805461075690611ff2565b80601f016020809104026020016040519081016040528092919081815260200182805461078290611ff2565b80156107cf5780601f106107a4576101008083540402835291602001916107cf565b820191906000526020600020905b8154815290600101906020018083116107b257829003601f168201915b5050505050905090565b60006107e482611652565b6107f8576107f86333d1c03960e21b61169e565b506000908152600860205260409020546001600160a01b031690565b610820828260016116a8565b5050565b6010546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e919061202c565b6108ef5760405162461bcd60e51b815260206004820152601a60248201527f457465726e756d506173733a20556e617574686f72697a65642100000000000060448201526064015b60405180910390fd5b600e55565b60006108ff8261174b565b6001600160a01b0394851694909150811684146109255761092562a1148160e81b61169e565b600082815260086020526040902080546109518187335b6001600160a01b039081169116811491141790565b6109735761095f86336115d6565b61097357610973632ce44b5f60e11b61169e565b801561097e57600082555b6001600160a01b038681166000908152600760205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260066020526040812091909155600160e11b84169003610a1057600184016000818152600660205260408120549003610a0e576002548114610a0e5760008181526006602052604090208490555b505b6001600160a01b0385168481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a480600003610a5a57610a5a633a954ecd60e21b61169e565b50505050505050565b6000610a6e82610c16565b905033610a7a83610c16565b6001600160a01b03161480610a945750610a9481336115d6565b610ae05760405162461bcd60e51b815260206004820152601f60248201527f496e73746147656e3a204e6f74204f776e6572204f7220417070726f7665640060448201526064016108e6565b610aeb8260016117ec565b600082815260016020526040812055817fe715391d83233974191d27f6e0720d3a2af339eb706a6623233e1d12483f23e2336040516001600160a01b03909116815260200160405180910390a25050565b60008281526001602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610bb15750604080518082019091526000546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610bd0906001600160601b03168761205f565b610bda9190612076565b915196919550909350505050565b610c0383838360405180602001604052806000815250611342565b505050565b610c138160016117ec565b50565b60006107418261174b565b6000610c2c84610c16565b90506001600160a01b038116331480610c4a5750610c4a81336115d6565b610c665760405162461bcd60e51b81526004016108e690612098565b6000848152600f6020908152604091829020805460ff19168615159081178255600190910185905582518781529182015290810183905233907fa9dcc06084f66afbdc1841a28e84400fcbf607131220fdcf404c8502f3c032039060600160405180910390a250505050565b60006001600160a01b038216610cf257610cf26323d3ad8160e21b61169e565b506001600160a01b031660009081526007602052604090205467ffffffffffffffff1690565b610d2182611652565b610d785760405162461bcd60e51b815260206004820152602260248201527f5369676e61747572655365726965733a20496e76616c69646520546f6b656e20604482015261125960f21b60648201526084016108e6565b6000828152600f602052604090205460ff16610dd65760405162461bcd60e51b815260206004820181905260248201527f496e73746147656e3a204e6f7420617661696c61626c6520666f722072656e7460448201526064016108e6565b6000610de1836113a7565b6001600160a01b031614610e375760405162461bcd60e51b815260206004820181905260248201527f496e73746147656e3a204e465420416c7265616479205375627363726962656460448201526064016108e6565b60008111610e985760405162461bcd60e51b815260206004820152602860248201527f496e73746147656e3a2054696d652063616e2774206265206c65737320746861604482015267371018903437bab960c11b60648201526084016108e6565b6110e0811115610efd5760405162461bcd60e51b815260206004820152602a60248201527f496e73746147656e3a2054696d652063616e2774206265206d6f7265207468616044820152696e2036206d6f6e74687360b01b60648201526084016108e6565b6000610f098383611383565b905080341015610f5b5760405162461bcd60e51b815260206004820152601c60248201527f496e73746147656e3a20496e73756666696369656e742046756e64730000000060448201526064016108e6565b610f6f33610f6885610c16565b853461192e565b6000838152600f602052604090208054610100600160a81b0319166101003302178155610f9e83610e1061205f565b610fa890426120dc565b815467ffffffffffffffff91909116600160a81b0267ffffffffffffffff60a81b19909116178155610fd73390565b8154604051600160a81b90910467ffffffffffffffff1681526001600160a01b03919091169085907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe9060200160405180910390a350505050565b60606005805461075690611ff2565b60008060006110536002546000190190565b90507f0000000000000000000000000000000000000000000000000000000000000000846110846002546000190190565b61108e91906120dc565b11156110ea5760405162461bcd60e51b815260206004820152602560248201527f496e73746147656e3a20457863656564696e67206d617820746f6b656e20737560448201526470706c792160d81b60648201526084016108e6565b427f000000000000000000000000000000000000000000000000000000000000000011156111905761113c7f00000000000000000000000000000000000000000000000000000000000000008561205f565b34101561118b5760405162461bcd60e51b815260206004820152601b60248201527f496e73746147656e3a204e6f7420656e6f7567682066756e647321000000000060448201526064016108e6565b6111ec565b600e5461119d908561205f565b3410156111ec5760405162461bcd60e51b815260206004820152601b60248201527f496e73746147656e3a204e6f7420656e6f7567682066756e647321000000000060448201526064016108e6565b6111f63385611a2a565b600c5461120d906001600160a01b031660016112d6565b60105460408051633955348d60e21b815290516000926001600160a01b03169163e554d2349160048083019260209291908290030181865afa158015611257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127b91906120ef565b90506112893382873461192e565b337f3ceab21c69bd3653901c74482a947fba53a7948df20d3ede336baf2687aea6e26112b86002546000190190565b60408051918252602082018990520160405180910390a25093915050565b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61134d8484846108f4565b6001600160a01b0383163b1561137d5761136984848484611a44565b61137d5761137d6368d2bf6b60e11b61169e565b50505050565b6000828152600f60205260408120600101546113a090839061205f565b9392505050565b6000818152600f602052604081205442600160a81b90910467ffffffffffffffff16106113ef57506000908152600f602052604090205461010090046001600160a01b031690565b506000919050565b919050565b606061140782611652565b61141b5761141b630a14c4b560e41b61169e565b6000611425611b26565b9050805160000361144557604051806020016040528060008152506113a0565b8061144f84611b35565b60405160200161146092919061210c565b6040516020818303038152906040529392505050565b600061148184610c16565b90506001600160a01b03811633148061149f575061149f81336115d6565b6114bb5760405162461bcd60e51b81526004016108e690612098565b60006114c6856113a7565b6001600160a01b0316146115285760405162461bcd60e51b8152602060048201526024808201527f496e73746147656e3a204974656d20697320616c7265616479207375627363726044820152631a58995960e21b60648201526084016108e6565b6000848152600f602052604090208054610100600160a81b0319166101006001600160a01b0386160217815561156867ffffffffffffffff8416426120dc565b815467ffffffffffffffff60a81b1916600160a81b67ffffffffffffffff9283160217825560405190841681526001600160a01b0385169086907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe9060200160405180910390a35050505050565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b60006301ffc9a760e01b6001600160e01b03198316148061163557506380ac58cd60e01b6001600160e01b03198316145b806107415750506001600160e01b031916635b5e139f60e01b1490565b6000816001116113f7576002548210156113f75760005b50600082815260066020526040812054908190036116915761168a8361213b565b9250611669565b600160e01b161592915050565b8060005260046000fd5b60006116b383610c16565b90508180156116cb5750336001600160a01b03821614155b156116ee576116da81336115d6565b6116ee576116ee6367d9dca160e11b61169e565b60008381526008602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b6000816001116117dc5750600081815260066020526040812054908190036117c957600254821061178657611786636f96cda160e11b61169e565b5b5060001901600081815260066020526040902054801561178757600160e01b81166000036117b457919050565b6117c4636f96cda160e11b61169e565b611787565b600160e01b81166000036117dc57919050565b6113f7636f96cda160e11b61169e565b60006117f78361174b565b90508060008061181586600090815260086020526040902080549091565b91509150841561184c5761182a81843361093c565b61184c5761183883336115d6565b61184c5761184c632ce44b5f60e11b61169e565b801561185757600082555b6001600160a01b038316600081815260076020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260066020526040812091909155600160e11b851690036118e5576001860160008181526006602052604081205490036118e35760025481146118e35760008181526006602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505060038054600101905550505050565b6000836001600160a01b03168260405160006040518083038185875af1925050503d806000811461197b576040519150601f19603f3d011682016040523d82523d6000602084013e611980565b606091505b50509050806119d15760405162461bcd60e51b815260206004820152601960248201527f496e73746147656e3a205472616e73666572206661696c65640000000000000060448201526064016108e6565b604080516001600160a01b03808816825286166020820152908101849052606081018390527faeadc2c673108f922a1042ef404b73ae1af992c9ae54249a4a7d13ef21ef2c189060800160405180910390a15050505050565b610820828260405180602001604052806000815250611b79565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611a79903390899088908890600401612152565b6020604051808303816000875af1925050508015611ab4575060408051601f3d908101601f19168201909252611ab19181019061218f565b60015b611b09573d808015611ae2576040519150601f19603f3d011682016040523d82523d6000602084013e611ae7565b606091505b508051600003611b0157611b016368d2bf6b60e11b61169e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6060600b805461075690611ff2565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611b4f5750819003601f19909101908152919050565b611b838383611be2565b6001600160a01b0383163b15610c03576002548281035b611bad6000868380600101945086611a44565b611bc157611bc16368d2bf6b60e11b61169e565b818110611b9a578160025414611bdb57611bdb600061169e565b5050505050565b6002546000829003611bfe57611bfe63b562e8dd60e01b61169e565b60008181526006602090815260408083206001600160a01b0387164260a01b6001881460e11b17811790915580845260079092528220805468010000000000000001860201905590819003611c5c57611c5c622e076360e81b61169e565b818301825b808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4818160010191508103611c61575060025550505050565b6001600160e01b031981168114610c1357600080fd5b600060208284031215611cc957600080fd5b81356113a081611ca1565b60005b83811015611cef578181015183820152602001611cd7565b50506000910152565b60008151808452611d10816020860160208601611cd4565b601f01601f19169290920160200192915050565b6020815260006113a06020830184611cf8565b600060208284031215611d4957600080fd5b5035919050565b6001600160a01b0381168114610c1357600080fd5b60008060408385031215611d7857600080fd5b8235611d8381611d50565b946020939093013593505050565b600080600060608486031215611da657600080fd5b8335611db181611d50565b92506020840135611dc181611d50565b929592945050506040919091013590565b60008060408385031215611de557600080fd5b50508035926020909101359150565b8015158114610c1357600080fd5b600080600060608486031215611e1757600080fd5b833592506020840135611dc181611df4565b600060208284031215611e3b57600080fd5b81356113a081611d50565b60008060408385031215611e5957600080fd5b8235611e6481611d50565b91506020830135611e7481611df4565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611eab57600080fd5b8435611eb681611d50565b93506020850135611ec681611d50565b925060408501359150606085013567ffffffffffffffff80821115611eea57600080fd5b818701915087601f830112611efe57600080fd5b813581811115611f1057611f10611e7f565b604051601f8201601f19908116603f01168101908382118183101715611f3857611f38611e7f565b816040528281528a6020848701011115611f5157600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080600060608486031215611f8a57600080fd5b833592506020840135611f9c81611d50565b9150604084013567ffffffffffffffff81168114611fb957600080fd5b809150509250925092565b60008060408385031215611fd757600080fd5b8235611fe281611d50565b91506020830135611e7481611d50565b600181811c9082168061200657607f821691505b60208210810361202657634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561203e57600080fd5b81516113a081611df4565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761074157610741612049565b60008261209357634e487b7160e01b600052601260045260246000fd5b500490565b60208082526024908201527f496e73746147656e3a2043616c6c6572206973206e6f7420746f6b656e206f7760408201526303732b9160e51b606082015260800190565b8082018082111561074157610741612049565b60006020828403121561210157600080fd5b81516113a081611d50565b6000835161211e818460208801611cd4565b835190830190612132818360208801611cd4565b01949350505050565b60008161214a5761214a612049565b506000190190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061218590830184611cf8565b9695505050505050565b6000602082840312156121a157600080fd5b81516113a081611ca156fea2646970667358221220516e1627e98b02a23d49ef70adef8e877f4ebca23e6ba79e4e9ca61f34cbc89a64736f6c63430008110033"; + "0x60e06040523480156200001157600080fd5b506040516200276a3803806200276a8339810160408190526200003491620002dc565b8989600462000044838262000454565b50600562000053828262000454565b5060016002555050600f80546001600160a01b03808a166001600160a01b031992831617909255600b8054928b1692909116919091179055600d8690556080859052620000a1844262000520565b60a05260c0839052600a620000b7828262000454565b50620000c43383620000f5565b5050600c80546001600160a01b0319166001600160a01b039690961695909517909455506200054895505050505050565b6127106001600160601b0382161115620001695760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620001c15760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000160565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600055565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200022257600080fd5b81516001600160401b03808211156200023f576200023f620001fa565b604051601f8301601f19908116603f011681019082821181831017156200026a576200026a620001fa565b816040528381526020925086838588010111156200028757600080fd5b600091505b83821015620002ab57858201830151818301840152908201906200028c565b600093810190920192909252949350505050565b80516001600160a01b0381168114620002d757600080fd5b919050565b6000806000806000806000806000806101408b8d031215620002fd57600080fd5b8a516001600160401b03808211156200031557600080fd5b620003238e838f0162000210565b9b5060208d01519150808211156200033a57600080fd5b620003488e838f0162000210565b9a506200035860408e01620002bf565b99506200036860608e01620002bf565b985060808d0151975060a08d0151965060c08d0151955060e08d015194506101008d015193506101208d0151915080821115620003a457600080fd5b50620003b38d828e0162000210565b9150509295989b9194979a5092959850565b600181811c90821680620003da57607f821691505b602082108103620003fb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200044f57600081815260208120601f850160051c810160208610156200042a5750805b601f850160051c820191505b818110156200044b5782815560010162000436565b5050505b505050565b81516001600160401b03811115620004705762000470620001fa565b6200048881620004818454620003c5565b8462000401565b602080601f831160018114620004c05760008415620004a75750858301515b600019600386901b1c1916600185901b1785556200044b565b600085815260208120601f198616915b82811015620004f157888601518255948401946001909101908401620004d0565b5085821015620005105787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200054257634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c0516121dd6200058d60003960008181610645015261105201526000818161038201526110e8015260008181610699015261111201526121dd6000f3fe6080604052600436106101ee5760003560e01c806370a082311161010d578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb0114610633578063e030565e14610667578063e757c17d14610687578063e985e9c5146106bb578063f51f96dd146106db57600080fd5b8063b88d4fde146105c0578063ba91caae146105d3578063c2f1f14a146105f3578063c87b56dd1461061357600080fd5b80639874cd97116100dc5780639874cd97146104c4578063a0712d6814610558578063a22cb46514610580578063a4b11052146105a057600080fd5b806370a082311461043e578063783a112b1461045e5780638fc88c481461047157806395d89b41146104af57600080fd5b80632890e0d71161018557806342966c681161015457806342966c68146103b757806354fd4d50146103d75780636352211e146103fe578063655bc8db1461041e57600080fd5b80632890e0d7146103115780632a55205a146103315780633692d1181461037057806342842e0e146103a457600080fd5b80630aa7c854116101c15780630aa7c8541461029757806318160ddd146102b75780631919fed7146102de57806323b872dd146102fe57600080fd5b806301ffc9a7146101f357806306fdde0314610228578063081812fc1461024a578063095ea7b314610282575b600080fd5b3480156101ff57600080fd5b5061021361020e366004611cb2565b6106f1565b60405190151581526020015b60405180910390f35b34801561023457600080fd5b5061023d610742565b60405161021f9190611d1f565b34801561025657600080fd5b5061026a610265366004611d32565b6107d4565b6040516001600160a01b03909116815260200161021f565b610295610290366004611d60565b61080f565b005b3480156102a357600080fd5b50600c5461026a906001600160a01b031681565b3480156102c357600080fd5b5060035460025403600019015b60405190815260200161021f565b3480156102ea57600080fd5b506102956102f9366004611d32565b61081f565b61029561030c366004611d8c565b6108ef565b34801561031d57600080fd5b5061029561032c366004611d32565b610a5e565b34801561033d57600080fd5b5061035161034c366004611dcd565b610b37565b604080516001600160a01b03909316835260208301919091520161021f565b34801561037c57600080fd5b506102d07f000000000000000000000000000000000000000000000000000000000000000081565b6102956103b2366004611d8c565b610be3565b3480156103c357600080fd5b506102956103d2366004611d32565b610c03565b3480156103e357600080fd5b506103ec600181565b60405160ff909116815260200161021f565b34801561040a57600080fd5b5061026a610419366004611d32565b610c11565b34801561042a57600080fd5b50610295610439366004611dfd565b610c1c565b34801561044a57600080fd5b506102d0610459366004611e24565b610ccd565b61029561046c366004611dcd565b610d13565b34801561047d57600080fd5b506102d061048c366004611d32565b6000908152600e6020526040902054600160a81b900467ffffffffffffffff1690565b3480156104bb57600080fd5b5061023d61102d565b3480156104d057600080fd5b5061051f6104df366004611d32565b600e602052600090815260409020805460019091015460ff82169161010081046001600160a01b031691600160a81b90910467ffffffffffffffff169084565b6040805194151585526001600160a01b03909316602085015267ffffffffffffffff90911691830191909152606082015260800161021f565b61056b610566366004611d32565b61103c565b6040805192835260208301919091520161021f565b34801561058c57600080fd5b5061029561059b366004611e41565b6112d1565b3480156105ac57600080fd5b50600b5461026a906001600160a01b031681565b6102956105ce366004611e90565b61133d565b3480156105df57600080fd5b506102d06105ee366004611dcd565b61137e565b3480156105ff57600080fd5b5061026a61060e366004611d32565b6113a2565b34801561061f57600080fd5b5061023d61062e366004611d32565b6113f7565b34801561063f57600080fd5b506102d07f000000000000000000000000000000000000000000000000000000000000000081565b34801561067357600080fd5b50610295610682366004611f70565b611471565b34801561069357600080fd5b506102d07f000000000000000000000000000000000000000000000000000000000000000081565b3480156106c757600080fd5b506102136106d6366004611fbf565b6115d1565b3480156106e757600080fd5b506102d0600d5481565b6000636ad56fd360e11b6001600160e01b031983160161071357506001919050565b6314bdb52960e21b6001600160e01b031983160161073357506001919050565b61073c826115ff565b92915050565b60606004805461075190611fed565b80601f016020809104026020016040519081016040528092919081815260200182805461077d90611fed565b80156107ca5780601f1061079f576101008083540402835291602001916107ca565b820191906000526020600020905b8154815290600101906020018083116107ad57829003601f168201915b5050505050905090565b60006107df8261164d565b6107f3576107f36333d1c03960e21b611699565b506000908152600860205260409020546001600160a01b031690565b61081b828260016116a3565b5050565b600f546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108999190612027565b6108ea5760405162461bcd60e51b815260206004820152601a60248201527f457465726e756d506173733a20556e617574686f72697a65642100000000000060448201526064015b60405180910390fd5b600d55565b60006108fa82611746565b6001600160a01b0394851694909150811684146109205761092062a1148160e81b611699565b6000828152600860205260409020805461094c8187335b6001600160a01b039081169116811491141790565b61096e5761095a86336115d1565b61096e5761096e632ce44b5f60e11b611699565b801561097957600082555b6001600160a01b038681166000908152600760205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260066020526040812091909155600160e11b84169003610a0b57600184016000818152600660205260408120549003610a09576002548114610a095760008181526006602052604090208490555b505b6001600160a01b0385168481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a480600003610a5557610a55633a954ecd60e21b611699565b50505050505050565b6000610a6982610c11565b905033610a7583610c11565b6001600160a01b03161480610a8f5750610a8f81336115d1565b610adb5760405162461bcd60e51b815260206004820152601f60248201527f496e73746147656e3a204e6f74204f776e6572204f7220417070726f7665640060448201526064016108e1565b610ae68260016117e7565b600082815260016020526040812055817fe715391d83233974191d27f6e0720d3a2af339eb706a6623233e1d12483f23e2336040516001600160a01b03909116815260200160405180910390a25050565b60008281526001602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610bac5750604080518082019091526000546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610bcb906001600160601b03168761205a565b610bd59190612071565b915196919550909350505050565b610bfe8383836040518060200160405280600081525061133d565b505050565b610c0e8160016117e7565b50565b600061073c82611746565b6000610c2784610c11565b90506001600160a01b038116331480610c455750610c4581336115d1565b610c615760405162461bcd60e51b81526004016108e190612093565b6000848152600e6020908152604091829020805460ff19168615159081178255600190910185905582518781529182015290810183905233907fa9dcc06084f66afbdc1841a28e84400fcbf607131220fdcf404c8502f3c032039060600160405180910390a250505050565b60006001600160a01b038216610ced57610ced6323d3ad8160e21b611699565b506001600160a01b031660009081526007602052604090205467ffffffffffffffff1690565b610d1c8261164d565b610d735760405162461bcd60e51b815260206004820152602260248201527f5369676e61747572655365726965733a20496e76616c69646520546f6b656e20604482015261125960f21b60648201526084016108e1565b6000828152600e602052604090205460ff16610dd15760405162461bcd60e51b815260206004820181905260248201527f496e73746147656e3a204e6f7420617661696c61626c6520666f722072656e7460448201526064016108e1565b6000610ddc836113a2565b6001600160a01b031614610e325760405162461bcd60e51b815260206004820181905260248201527f496e73746147656e3a204e465420416c7265616479205375627363726962656460448201526064016108e1565b60008111610e935760405162461bcd60e51b815260206004820152602860248201527f496e73746147656e3a2054696d652063616e2774206265206c65737320746861604482015267371018903437bab960c11b60648201526084016108e1565b6110e0811115610ef85760405162461bcd60e51b815260206004820152602a60248201527f496e73746147656e3a2054696d652063616e2774206265206d6f7265207468616044820152696e2036206d6f6e74687360b01b60648201526084016108e1565b6000610f04838361137e565b905080341015610f565760405162461bcd60e51b815260206004820152601c60248201527f496e73746147656e3a20496e73756666696369656e742046756e64730000000060448201526064016108e1565b610f6a33610f6385610c11565b8534611929565b6000838152600e602052604090208054610100600160a81b0319166101003302178155610f9983610e1061205a565b610fa390426120d7565b815467ffffffffffffffff91909116600160a81b0267ffffffffffffffff60a81b19909116178155610fd23390565b8154604051600160a81b90910467ffffffffffffffff1681526001600160a01b03919091169085907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe9060200160405180910390a350505050565b60606005805461075190611fed565b600080600061104e6002546000190190565b90507f00000000000000000000000000000000000000000000000000000000000000008461107f6002546000190190565b61108991906120d7565b11156110e55760405162461bcd60e51b815260206004820152602560248201527f496e73746147656e3a20457863656564696e67206d617820746f6b656e20737560448201526470706c792160d81b60648201526084016108e1565b427f0000000000000000000000000000000000000000000000000000000000000000111561118b576111377f00000000000000000000000000000000000000000000000000000000000000008561205a565b3410156111865760405162461bcd60e51b815260206004820152601b60248201527f496e73746147656e3a204e6f7420656e6f7567682066756e647321000000000060448201526064016108e1565b6111e7565b600d54611198908561205a565b3410156111e75760405162461bcd60e51b815260206004820152601b60248201527f496e73746147656e3a204e6f7420656e6f7567682066756e647321000000000060448201526064016108e1565b6111f13385611a25565b600b54611208906001600160a01b031660016112d1565b600f5460408051633955348d60e21b815290516000926001600160a01b03169163e554d2349160048083019260209291908290030181865afa158015611252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127691906120ea565b905061128433828734611929565b337f3ceab21c69bd3653901c74482a947fba53a7948df20d3ede336baf2687aea6e26112b36002546000190190565b60408051918252602082018990520160405180910390a25093915050565b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6113488484846108ef565b6001600160a01b0383163b156113785761136484848484611a3f565b611378576113786368d2bf6b60e11b611699565b50505050565b6000828152600e602052604081206001015461139b90839061205a565b9392505050565b6000818152600e602052604081205442600160a81b90910467ffffffffffffffff16106113ea57506000908152600e602052604090205461010090046001600160a01b031690565b506000919050565b919050565b60606114028261164d565b61141657611416630a14c4b560e41b611699565b6000611420611b21565b90508051600003611440576040518060200160405280600081525061139b565b8061144a84611b30565b60405160200161145b929190612107565b6040516020818303038152906040529392505050565b600061147c84610c11565b90506001600160a01b03811633148061149a575061149a81336115d1565b6114b65760405162461bcd60e51b81526004016108e190612093565b60006114c1856113a2565b6001600160a01b0316146115235760405162461bcd60e51b8152602060048201526024808201527f496e73746147656e3a204974656d20697320616c7265616479207375627363726044820152631a58995960e21b60648201526084016108e1565b6000848152600e602052604090208054610100600160a81b0319166101006001600160a01b0386160217815561156367ffffffffffffffff8416426120d7565b815467ffffffffffffffff60a81b1916600160a81b67ffffffffffffffff9283160217825560405190841681526001600160a01b0385169086907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe9060200160405180910390a35050505050565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b60006301ffc9a760e01b6001600160e01b03198316148061163057506380ac58cd60e01b6001600160e01b03198316145b8061073c5750506001600160e01b031916635b5e139f60e01b1490565b6000816001116113f2576002548210156113f25760005b506000828152600660205260408120549081900361168c5761168583612136565b9250611664565b600160e01b161592915050565b8060005260046000fd5b60006116ae83610c11565b90508180156116c65750336001600160a01b03821614155b156116e9576116d581336115d1565b6116e9576116e96367d9dca160e11b611699565b60008381526008602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b6000816001116117d75750600081815260066020526040812054908190036117c457600254821061178157611781636f96cda160e11b611699565b5b5060001901600081815260066020526040902054801561178257600160e01b81166000036117af57919050565b6117bf636f96cda160e11b611699565b611782565b600160e01b81166000036117d757919050565b6113f2636f96cda160e11b611699565b60006117f283611746565b90508060008061181086600090815260086020526040902080549091565b91509150841561184757611825818433610937565b6118475761183383336115d1565b61184757611847632ce44b5f60e11b611699565b801561185257600082555b6001600160a01b038316600081815260076020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260066020526040812091909155600160e11b851690036118e0576001860160008181526006602052604081205490036118de5760025481146118de5760008181526006602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505060038054600101905550505050565b6000836001600160a01b03168260405160006040518083038185875af1925050503d8060008114611976576040519150601f19603f3d011682016040523d82523d6000602084013e61197b565b606091505b50509050806119cc5760405162461bcd60e51b815260206004820152601960248201527f496e73746147656e3a205472616e73666572206661696c65640000000000000060448201526064016108e1565b604080516001600160a01b03808816825286166020820152908101849052606081018390527faeadc2c673108f922a1042ef404b73ae1af992c9ae54249a4a7d13ef21ef2c189060800160405180910390a15050505050565b61081b828260405180602001604052806000815250611b74565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611a7490339089908890889060040161214d565b6020604051808303816000875af1925050508015611aaf575060408051601f3d908101601f19168201909252611aac9181019061218a565b60015b611b04573d808015611add576040519150601f19603f3d011682016040523d82523d6000602084013e611ae2565b606091505b508051600003611afc57611afc6368d2bf6b60e11b611699565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6060600a805461075190611fed565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611b4a5750819003601f19909101908152919050565b611b7e8383611bdd565b6001600160a01b0383163b15610bfe576002548281035b611ba86000868380600101945086611a3f565b611bbc57611bbc6368d2bf6b60e11b611699565b818110611b95578160025414611bd657611bd66000611699565b5050505050565b6002546000829003611bf957611bf963b562e8dd60e01b611699565b60008181526006602090815260408083206001600160a01b0387164260a01b6001881460e11b17811790915580845260079092528220805468010000000000000001860201905590819003611c5757611c57622e076360e81b611699565b818301825b808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4818160010191508103611c5c575060025550505050565b6001600160e01b031981168114610c0e57600080fd5b600060208284031215611cc457600080fd5b813561139b81611c9c565b60005b83811015611cea578181015183820152602001611cd2565b50506000910152565b60008151808452611d0b816020860160208601611ccf565b601f01601f19169290920160200192915050565b60208152600061139b6020830184611cf3565b600060208284031215611d4457600080fd5b5035919050565b6001600160a01b0381168114610c0e57600080fd5b60008060408385031215611d7357600080fd5b8235611d7e81611d4b565b946020939093013593505050565b600080600060608486031215611da157600080fd5b8335611dac81611d4b565b92506020840135611dbc81611d4b565b929592945050506040919091013590565b60008060408385031215611de057600080fd5b50508035926020909101359150565b8015158114610c0e57600080fd5b600080600060608486031215611e1257600080fd5b833592506020840135611dbc81611def565b600060208284031215611e3657600080fd5b813561139b81611d4b565b60008060408385031215611e5457600080fd5b8235611e5f81611d4b565b91506020830135611e6f81611def565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215611ea657600080fd5b8435611eb181611d4b565b93506020850135611ec181611d4b565b925060408501359150606085013567ffffffffffffffff80821115611ee557600080fd5b818701915087601f830112611ef957600080fd5b813581811115611f0b57611f0b611e7a565b604051601f8201601f19908116603f01168101908382118183101715611f3357611f33611e7a565b816040528281528a6020848701011115611f4c57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600080600060608486031215611f8557600080fd5b833592506020840135611f9781611d4b565b9150604084013567ffffffffffffffff81168114611fb457600080fd5b809150509250925092565b60008060408385031215611fd257600080fd5b8235611fdd81611d4b565b91506020830135611e6f81611d4b565b600181811c9082168061200157607f821691505b60208210810361202157634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561203957600080fd5b815161139b81611def565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761073c5761073c612044565b60008261208e57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526024908201527f496e73746147656e3a2043616c6c6572206973206e6f7420746f6b656e206f7760408201526303732b9160e51b606082015260800190565b8082018082111561073c5761073c612044565b6000602082840312156120fc57600080fd5b815161139b81611d4b565b60008351612119818460208801611ccf565b83519083019061212d818360208801611ccf565b01949350505050565b60008161214557612145612044565b506000190190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061218090830184611cf3565b9695505050505050565b60006020828403121561219c57600080fd5b815161139b81611c9c56fea264697066735822122015788b2df9cf8d3b26dc3bd1a41fb4024aa047920b81a577e44dd36d28bf03d964736f6c63430008110033"; type InstaGenConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/PhygitalA__factory.ts b/typechain-types/factories/PhygitalA__factory.ts index 33d6481..01cbe28 100644 --- a/typechain-types/factories/PhygitalA__factory.ts +++ b/typechain-types/factories/PhygitalA__factory.ts @@ -36,14 +36,14 @@ const _abi = [ type: "address", }, { - internalType: "uint256", - name: "_maxSupply", - type: "uint256", + internalType: "address", + name: "_tokenAddr", + type: "address", }, { - internalType: "uint256", - name: "_royaltyBPS", - type: "uint256", + internalType: "uint256[]", + name: "contractDetails", + type: "uint256[]", }, { internalType: "string", @@ -169,6 +169,37 @@ const _abi = [ name: "ApprovalForAll", type: "event", }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "user", + type: "address", + }, + { + indexed: false, + internalType: "uint256", + name: "tokenId", + type: "uint256", + }, + { + indexed: false, + internalType: "bytes", + name: "uuid", + type: "bytes", + }, + { + indexed: false, + internalType: "uint256", + name: "time", + type: "uint256", + }, + ], + name: "AssetRegistered", + type: "event", + }, { anonymous: false, inputs: [ @@ -215,12 +246,6 @@ const _abi = [ name: "reciepient", type: "address", }, - { - indexed: false, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, { indexed: false, internalType: "uint256", @@ -275,37 +300,6 @@ const _abi = [ name: "PhygitalAAssetDestroyed", type: "event", }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - { - indexed: false, - internalType: "bool", - name: "isRentable", - type: "bool", - }, - { - indexed: false, - internalType: "uint256", - name: "price", - type: "uint256", - }, - { - indexed: true, - internalType: "address", - name: "renter", - type: "address", - }, - ], - name: "RentalInfo", - type: "event", - }, { anonymous: false, inputs: [ @@ -335,85 +329,79 @@ const _abi = [ anonymous: false, inputs: [ { - indexed: true, - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - { - indexed: true, + indexed: false, internalType: "address", name: "user", type: "address", }, { indexed: false, - internalType: "uint64", - name: "expires", - type: "uint64", + internalType: "uint256", + name: "updatedMaxMint", + type: "uint256", }, ], - name: "UpdateUser", + name: "UpdateAssetMaxMint", type: "event", }, { - inputs: [], - name: "SIGNATURE_VERSION", - outputs: [ + anonymous: false, + inputs: [ { - internalType: "string", - name: "", - type: "string", + indexed: false, + internalType: "address", + name: "user", + type: "address", }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [], - name: "SIGNING_DOMAIN", - outputs: [ { - internalType: "string", - name: "", - type: "string", + indexed: false, + internalType: "uint256", + name: "updatedPrice", + type: "uint256", }, ], - stateMutability: "view", - type: "function", + name: "UpdateAssetPrice", + type: "event", }, { - inputs: [], - name: "accessMasterAddress", - outputs: [ + anonymous: false, + inputs: [ { + indexed: false, internalType: "address", - name: "", + name: "user", type: "address", }, - ], - stateMutability: "view", - type: "function", - }, - { - inputs: [ { + indexed: false, internalType: "uint256", name: "tokenId", type: "uint256", }, { + indexed: false, + internalType: "enum PhygitalA.ItemStatus", + name: "assetStatus", + type: "uint8", + }, + { + indexed: false, internalType: "uint256", name: "time", type: "uint256", }, ], - name: "amountRequired", + name: "UpdateAssetStatus", + type: "event", + }, + { + inputs: [], + name: "accessMasterAddress", outputs: [ { - internalType: "uint256", - name: "amount", - type: "uint256", + internalType: "address", + name: "", + type: "address", }, ], stateMutability: "view", @@ -437,25 +425,6 @@ const _abi = [ stateMutability: "payable", type: "function", }, - { - inputs: [ - { - internalType: "bytes16", - name: "", - type: "bytes16", - }, - ], - name: "assetStatus", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [ { @@ -496,11 +465,59 @@ const _abi = [ type: "uint256", }, ], - name: "burnNFT", + name: "burnAsset", outputs: [], stateMutability: "nonpayable", type: "function", }, + { + inputs: [ + { + internalType: "uint256", + name: "quantity", + type: "uint256", + }, + ], + name: "calculateRequiredPrice", + outputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "reciever", + type: "address", + }, + { + internalType: "uint256", + name: "quantity", + type: "uint256", + }, + ], + name: "delegateMint", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, { inputs: [ { @@ -544,6 +561,19 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [], + name: "maxMint", + outputs: [ + { + internalType: "uint16", + name: "", + type: "uint16", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [], name: "maxSupply", @@ -578,7 +608,7 @@ const _abi = [ type: "uint256", }, ], - stateMutability: "payable", + stateMutability: "nonpayable", type: "function", }, { @@ -594,6 +624,19 @@ const _abi = [ stateMutability: "view", type: "function", }, + { + inputs: [], + name: "nftPrice", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -621,12 +664,22 @@ const _abi = [ type: "uint256", }, ], - name: "phygitalID", + name: "phygitalAssets", outputs: [ { - internalType: "bytes16", - name: "", - type: "bytes16", + internalType: "uint256", + name: "registerTime", + type: "uint256", + }, + { + internalType: "bytes", + name: "phygitalId", + type: "bytes", + }, + { + internalType: "enum PhygitalA.ItemStatus", + name: "status", + type: "uint8", }, ], stateMutability: "view", @@ -635,37 +688,38 @@ const _abi = [ { inputs: [ { - internalType: "uint256", - name: "tokenId", - type: "uint256", + internalType: "bytes", + name: "", + type: "bytes", }, + ], + name: "phygitalIdCheck", + outputs: [ { - internalType: "bytes16", - name: "_phygitalID", - type: "bytes16", + internalType: "bool", + name: "", + type: "bool", }, ], - name: "registerAssetId", - outputs: [], - stateMutability: "nonpayable", + stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", - name: "_tokenId", + name: "tokenId", type: "uint256", }, { - internalType: "uint256", - name: "_timeInHours", - type: "uint256", + internalType: "bytes", + name: "_phygitalID", + type: "bytes", }, ], - name: "rent", + name: "registerAssetId", outputs: [], - stateMutability: "payable", + stateMutability: "nonpayable", type: "function", }, { @@ -808,17 +862,25 @@ const _abi = [ type: "uint256", }, { - internalType: "bool", - name: "isRentable", - type: "bool", + internalType: "enum PhygitalA.ItemStatus", + name: "_status", + type: "uint8", }, + ], + name: "setItemStatus", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ { - internalType: "uint256", - name: "pricePerHour", - type: "uint256", + internalType: "uint16", + name: "amount", + type: "uint16", }, ], - name: "setRentInfo", + name: "setMaxMint", outputs: [], stateMutability: "nonpayable", type: "function", @@ -827,21 +889,11 @@ const _abi = [ inputs: [ { internalType: "uint256", - name: "tokenId", + name: "amount", type: "uint256", }, - { - internalType: "address", - name: "user", - type: "address", - }, - { - internalType: "uint64", - name: "expires", - type: "uint64", - }, ], - name: "setUser", + name: "setNFTPrice", outputs: [], stateMutability: "nonpayable", type: "function", @@ -949,12 +1001,12 @@ const _abi = [ { inputs: [ { - internalType: "uint256", - name: "tokenId", - type: "uint256", + internalType: "address", + name: "", + type: "address", }, ], - name: "userExpires", + name: "userBalance", outputs: [ { internalType: "uint256", @@ -965,25 +1017,6 @@ const _abi = [ stateMutability: "view", type: "function", }, - { - inputs: [ - { - internalType: "uint256", - name: "tokenId", - type: "uint256", - }, - ], - name: "userOf", - outputs: [ - { - internalType: "address", - name: "", - type: "address", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [], name: "version", @@ -1000,7 +1033,7 @@ const _abi = [ ]; const _bytecode = - "0x60a0604052600a805460ff191660011790553480156200001e57600080fd5b50604051620028c5380380620028c58339810160408190526200004191620002cd565b8686600462000051838262000426565b50600562000060828262000426565b5060016002555050601480546001600160a01b038087166001600160a01b031992831617909255600c8054928816929091169190911790556080839052600b620000ab828262000426565b50620000b83383620000e6565b5050600d80546001600160a01b0319166001600160a01b03939093169290921790915550620004f292505050565b6127106001600160601b03821611156200015a5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620001b25760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000151565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600055565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200021357600080fd5b81516001600160401b0380821115620002305762000230620001eb565b604051601f8301601f19908116603f011681019082821181831017156200025b576200025b620001eb565b816040528381526020925086838588010111156200027857600080fd5b600091505b838210156200029c57858201830151818301840152908201906200027d565b600093810190920192909252949350505050565b80516001600160a01b0381168114620002c857600080fd5b919050565b600080600080600080600060e0888a031215620002e957600080fd5b87516001600160401b03808211156200030157600080fd5b6200030f8b838c0162000201565b985060208a01519150808211156200032657600080fd5b620003348b838c0162000201565b97506200034460408b01620002b0565b96506200035460608b01620002b0565b955060808a0151945060a08a0151935060c08a01519150808211156200037957600080fd5b50620003888a828b0162000201565b91505092959891949750929550565b600181811c90821680620003ac57607f821691505b602082108103620003cd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200042157600081815260208120601f850160051c81016020861015620003fc5750805b601f850160051c820191505b818110156200041d5782815560010162000408565b5050505b505050565b81516001600160401b03811115620004425762000442620001eb565b6200045a8162000453845462000397565b84620003d3565b602080601f831160018114620004925760008415620004795750858301515b600019600386901b1c1916600185901b1785556200041d565b600085815260208120601f198616915b82811015620004c357888601518255948401946001909101908401620004a2565b5085821015620004e25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516123b062000515600039600081816106af015261122901526123b06000f3fe6080604052600436106101f95760003560e01c8063783a112b1161010d578063a4b11052116100a0578063c87b56dd1161006f578063c87b56dd1461067d578063d5abeb011461069d578063e030565e146106d1578063e3faad94146106f1578063e985e9c51461070657600080fd5b8063a4b110521461060a578063b88d4fde1461062a578063ba91caae1461063d578063c2f1f14a1461065d57600080fd5b80639874cd97116100dc5780639874cd9714610519578063a0712d68146105ad578063a22cb465146105d5578063a4157296146105f557600080fd5b8063783a112b146104835780637e57f7de146104965780638fc88c48146104c657806395d89b411461050457600080fd5b80632890e0d7116101905780634f7170dd1161015f5780634f7170dd146103ae57806354fd4d50146103f75780636352211e14610423578063655bc8db1461044357806370a082311461046357600080fd5b80632890e0d71461031c5780632a55205a1461033c57806342842e0e1461037b57806342966c681461038e57600080fd5b8063095ea7b3116101cc578063095ea7b3146102af5780630aa7c854146102c257806318160ddd146102e257806323b872dd1461030957600080fd5b806301ffc9a7146101fe5780630446827c1461023357806306fdde0314610255578063081812fc14610277575b600080fd5b34801561020a57600080fd5b5061021e610219366004611e25565b610726565b60405190151581526020015b60405180910390f35b34801561023f57600080fd5b5061025361024e366004611e5a565b610777565b005b34801561026157600080fd5b5061026a610901565b60405161022a9190611ed6565b34801561028357600080fd5b50610297610292366004611ee9565b610993565b6040516001600160a01b03909116815260200161022a565b6102536102bd366004611f17565b6109ce565b3480156102ce57600080fd5b50600d54610297906001600160a01b031681565b3480156102ee57600080fd5b5060035460025403600019015b60405190815260200161022a565b610253610317366004611f43565b6109de565b34801561032857600080fd5b50610253610337366004611ee9565b610b4d565b34801561034857600080fd5b5061035c610357366004611f84565b610c26565b604080516001600160a01b03909316835260208301919091520161022a565b610253610389366004611f43565b610cd2565b34801561039a57600080fd5b506102536103a9366004611ee9565b610cf2565b3480156103ba57600080fd5b506103de6103c9366004611ee9565b60126020526000908152604090205460801b81565b6040516001600160801b0319909116815260200161022a565b34801561040357600080fd5b50600a546104119060ff1681565b60405160ff909116815260200161022a565b34801561042f57600080fd5b5061029761043e366004611ee9565b610d00565b34801561044f57600080fd5b5061025361045e366004611fb4565b610d0b565b34801561046f57600080fd5b506102fb61047e366004611fdb565b610dbc565b610253610491366004611f84565b610e02565b3480156104a257600080fd5b5061021e6104b1366004611ff8565b60136020526000908152604090205460ff1681565b3480156104d257600080fd5b506102fb6104e1366004611ee9565b600090815260106020526040902054600160a81b900467ffffffffffffffff1690565b34801561051057600080fd5b5061026a611132565b34801561052557600080fd5b50610574610534366004611ee9565b6010602052600090815260409020805460019091015460ff82169161010081046001600160a01b031691600160a81b90910467ffffffffffffffff169084565b6040805194151585526001600160a01b03909316602085015267ffffffffffffffff90911691830191909152606082015260800161022a565b6105c06105bb366004611ee9565b611141565b6040805192835260208301919091520161022a565b3480156105e157600080fd5b506102536105f0366004612013565b6113a7565b34801561060157600080fd5b5061026a611413565b34801561061657600080fd5b50600c54610297906001600160a01b031681565b610253610638366004612062565b6114a1565b34801561064957600080fd5b506102fb610658366004611f84565b6114e2565b34801561066957600080fd5b50610297610678366004611ee9565b611506565b34801561068957600080fd5b5061026a610698366004611ee9565b61155b565b3480156106a957600080fd5b506102fb7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106dd57600080fd5b506102536106ec366004612142565b6115d5565b3480156106fd57600080fd5b5061026a611737565b34801561071257600080fd5b5061021e610721366004612191565b611744565b6000636ad56fd360e11b6001600160e01b031983160161074857506001919050565b6314bdb52960e21b6001600160e01b031983160161076857506001919050565b61077182611772565b92915050565b6014546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156107cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f191906121bf565b61084d5760405162461bcd60e51b815260206004820152602260248201527f506879676974616c413a2055736572206973206e6f7420617574686f72697a65604482015261032160f51b60648201526084015b60405180910390fd5b6001600160801b0319811660009081526013602052604090205460ff16156108c15760405162461bcd60e51b815260206004820152602160248201527f506879676974616c413a204974277320616c72656164792072656769737465726044820152601960fa1b6064820152608401610844565b60009182526012602090815260408084208054608085901c6001600160801b0319918216179091559092168352601390529020805460ff19166001179055565b606060048054610910906121dc565b80601f016020809104026020016040519081016040528092919081815260200182805461093c906121dc565b80156109895780601f1061095e57610100808354040283529160200191610989565b820191906000526020600020905b81548152906001019060200180831161096c57829003601f168201915b5050505050905090565b600061099e826117c0565b6109b2576109b26333d1c03960e21b61180c565b506000908152600860205260409020546001600160a01b031690565b6109da82826001611816565b5050565b60006109e9826118b9565b6001600160a01b039485169490915081168414610a0f57610a0f62a1148160e81b61180c565b60008281526008602052604090208054610a3b8187335b6001600160a01b039081169116811491141790565b610a5d57610a498633611744565b610a5d57610a5d632ce44b5f60e11b61180c565b8015610a6857600082555b6001600160a01b038681166000908152600760205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260066020526040812091909155600160e11b84169003610afa57600184016000818152600660205260408120549003610af8576002548114610af85760008181526006602052604090208490555b505b6001600160a01b0385168481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a480600003610b4457610b44633a954ecd60e21b61180c565b50505050505050565b6000610b5882610d00565b905033610b6483610d00565b6001600160a01b03161480610b7e5750610b7e8133611744565b610bca5760405162461bcd60e51b815260206004820181905260248201527f506879676974616c413a204e6f74204f776e6572204f7220417070726f7665646044820152606401610844565b610bd582600161195a565b600082815260016020526040812055817f2a5fd0bc4df8bf54012cb36761df3287ea7e3380367b791f6f6ad0506b500a0a336040516001600160a01b03909116815260200160405180910390a25050565b60008281526001602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610c9b5750604080518082019091526000546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610cba906001600160601b03168761222c565b610cc49190612243565b915196919550909350505050565b610ced838383604051806020016040528060008152506114a1565b505050565b610cfd81600161195a565b50565b6000610771826118b9565b6000610d1684610d00565b90506001600160a01b038116331480610d345750610d348133611744565b610d505760405162461bcd60e51b815260040161084490612265565b600084815260106020908152604091829020805460ff19168615159081178255600190910185905582518781529182015290810183905233907fa9dcc06084f66afbdc1841a28e84400fcbf607131220fdcf404c8502f3c032039060600160405180910390a250505050565b60006001600160a01b038216610ddc57610ddc6323d3ad8160e21b61180c565b506001600160a01b031660009081526007602052604090205467ffffffffffffffff1690565b610e0b826117c0565b610e625760405162461bcd60e51b815260206004820152602260248201527f5369676e61747572655365726965733a20496e76616c69646520546f6b656e20604482015261125960f21b6064820152608401610844565b60008281526010602052604090205460ff16610eca5760405162461bcd60e51b815260206004820152602160248201527f506879676974616c413a204e6f7420617661696c61626c6520666f722072656e6044820152601d60fa1b6064820152608401610844565b6000610ed583611506565b6001600160a01b031614610f355760405162461bcd60e51b815260206004820152602160248201527f506879676974616c413a204e465420416c7265616479205375627363726962656044820152601960fa1b6064820152608401610844565b60008111610f975760405162461bcd60e51b815260206004820152602960248201527f506879676974616c413a2054696d652063616e2774206265206c65737320746860448201526830b71018903437bab960b91b6064820152608401610844565b6110e0811115610ffd5760405162461bcd60e51b815260206004820152602b60248201527f506879676974616c413a2054696d652063616e2774206265206d6f726520746860448201526a616e2036206d6f6e74687360a81b6064820152608401610844565b600061100983836114e2565b90508034101561105b5760405162461bcd60e51b815260206004820152601d60248201527f506879676974616c413a20496e73756666696369656e742046756e64730000006044820152606401610844565b61106f3361106885610d00565b8534611a9c565b60008381526010602052604090208054610100600160a81b031916610100330217815561109e83610e1061222c565b6110a890426122aa565b815467ffffffffffffffff91909116600160a81b0267ffffffffffffffff60a81b199091161781556110d73390565b8154604051600160a81b90910467ffffffffffffffff1681526001600160a01b03919091169085907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe9060200160405180910390a350505050565b606060058054610910906121dc565b60145460009081906001600160a01b031663efd46065336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561119c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c091906121bf565b6112165760405162461bcd60e51b815260206004820152602160248201527f506879676974616c413a2055736572206973206e6f7420617574686f72697a656044820152601960fa1b6064820152608401610844565b60006112256002546000190190565b90507f0000000000000000000000000000000000000000000000000000000000000000846112566002546000190190565b61126091906122aa565b11156112bd5760405162461bcd60e51b815260206004820152602660248201527f506879676974616c413a20457863656564696e67206d617820746f6b656e20736044820152657570706c792160d01b6064820152608401610844565b6112c73385611b98565b600c546112de906001600160a01b031660016113a7565b60145460408051633955348d60e21b815290516000926001600160a01b03169163e554d2349160048083019260209291908290030181865afa158015611328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134c91906122bd565b905061135a33828734611a9c565b337f328ff68d0e66694e405c9f8fc906a346b345aa1f87ec216eaa82f2c654d0d34a6113896002546000190190565b60408051918252602082018990520160405180910390a25093915050565b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600f8054611420906121dc565b80601f016020809104026020016040519081016040528092919081815260200182805461144c906121dc565b80156114995780601f1061146e57610100808354040283529160200191611499565b820191906000526020600020905b81548152906001019060200180831161147c57829003601f168201915b505050505081565b6114ac8484846109de565b6001600160a01b0383163b156114dc576114c884848484611bb2565b6114dc576114dc6368d2bf6b60e11b61180c565b50505050565b6000828152601060205260408120600101546114ff90839061222c565b9392505050565b60008181526010602052604081205442600160a81b90910467ffffffffffffffff161061154e575060009081526010602052604090205461010090046001600160a01b031690565b506000919050565b919050565b6060611566826117c0565b61157a5761157a630a14c4b560e41b61180c565b6000611584611c94565b905080516000036115a457604051806020016040528060008152506114ff565b806115ae84611ca3565b6040516020016115bf9291906122da565b6040516020818303038152906040529392505050565b60006115e084610d00565b90506001600160a01b0381163314806115fe57506115fe8133611744565b61161a5760405162461bcd60e51b815260040161084490612265565b600061162585611506565b6001600160a01b0316146116895760405162461bcd60e51b815260206004820152602560248201527f506879676974616c413a204974656d20697320616c72656164792073756273636044820152641c9a58995960da1b6064820152608401610844565b60008481526010602052604090208054610100600160a81b0319166101006001600160a01b038616021781556116c967ffffffffffffffff8416426122aa565b815467ffffffffffffffff60a81b1916600160a81b67ffffffffffffffff9283160217825560405190841681526001600160a01b0385169086907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe9060200160405180910390a35050505050565b600e8054611420906121dc565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b60006301ffc9a760e01b6001600160e01b0319831614806117a357506380ac58cd60e01b6001600160e01b03198316145b806107715750506001600160e01b031916635b5e139f60e01b1490565b600081600111611556576002548210156115565760005b50600082815260066020526040812054908190036117ff576117f883612309565b92506117d7565b600160e01b161592915050565b8060005260046000fd5b600061182183610d00565b90508180156118395750336001600160a01b03821614155b1561185c576118488133611744565b61185c5761185c6367d9dca160e11b61180c565b60008381526008602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b60008160011161194a5750600081815260066020526040812054908190036119375760025482106118f4576118f4636f96cda160e11b61180c565b5b506000190160008181526006602052604090205480156118f557600160e01b811660000361192257919050565b611932636f96cda160e11b61180c565b6118f5565b600160e01b811660000361194a57919050565b611556636f96cda160e11b61180c565b6000611965836118b9565b90508060008061198386600090815260086020526040902080549091565b9150915084156119ba57611998818433610a26565b6119ba576119a68333611744565b6119ba576119ba632ce44b5f60e11b61180c565b80156119c557600082555b6001600160a01b038316600081815260076020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260066020526040812091909155600160e11b85169003611a5357600186016000818152600660205260408120549003611a51576002548114611a515760008181526006602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505060038054600101905550505050565b6000836001600160a01b03168260405160006040518083038185875af1925050503d8060008114611ae9576040519150601f19603f3d011682016040523d82523d6000602084013e611aee565b606091505b5050905080611b3f5760405162461bcd60e51b815260206004820152601a60248201527f506879676974616c413a205472616e73666572206661696c65640000000000006044820152606401610844565b604080516001600160a01b03808816825286166020820152908101849052606081018390527faeadc2c673108f922a1042ef404b73ae1af992c9ae54249a4a7d13ef21ef2c189060800160405180910390a15050505050565b6109da828260405180602001604052806000815250611ce7565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611be7903390899088908890600401612320565b6020604051808303816000875af1925050508015611c22575060408051601f3d908101601f19168201909252611c1f9181019061235d565b60015b611c77573d808015611c50576040519150601f19603f3d011682016040523d82523d6000602084013e611c55565b606091505b508051600003611c6f57611c6f6368d2bf6b60e11b61180c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6060600b8054610910906121dc565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611cbd5750819003601f19909101908152919050565b611cf18383611d50565b6001600160a01b0383163b15610ced576002548281035b611d1b6000868380600101945086611bb2565b611d2f57611d2f6368d2bf6b60e11b61180c565b818110611d08578160025414611d4957611d49600061180c565b5050505050565b6002546000829003611d6c57611d6c63b562e8dd60e01b61180c565b60008181526006602090815260408083206001600160a01b0387164260a01b6001881460e11b17811790915580845260079092528220805468010000000000000001860201905590819003611dca57611dca622e076360e81b61180c565b818301825b808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4818160010191508103611dcf575060025550505050565b6001600160e01b031981168114610cfd57600080fd5b600060208284031215611e3757600080fd5b81356114ff81611e0f565b80356001600160801b03198116811461155657600080fd5b60008060408385031215611e6d57600080fd5b82359150611e7d60208401611e42565b90509250929050565b60005b83811015611ea1578181015183820152602001611e89565b50506000910152565b60008151808452611ec2816020860160208601611e86565b601f01601f19169290920160200192915050565b6020815260006114ff6020830184611eaa565b600060208284031215611efb57600080fd5b5035919050565b6001600160a01b0381168114610cfd57600080fd5b60008060408385031215611f2a57600080fd5b8235611f3581611f02565b946020939093013593505050565b600080600060608486031215611f5857600080fd5b8335611f6381611f02565b92506020840135611f7381611f02565b929592945050506040919091013590565b60008060408385031215611f9757600080fd5b50508035926020909101359150565b8015158114610cfd57600080fd5b600080600060608486031215611fc957600080fd5b833592506020840135611f7381611fa6565b600060208284031215611fed57600080fd5b81356114ff81611f02565b60006020828403121561200a57600080fd5b6114ff82611e42565b6000806040838503121561202657600080fd5b823561203181611f02565b9150602083013561204181611fa6565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561207857600080fd5b843561208381611f02565b9350602085013561209381611f02565b925060408501359150606085013567ffffffffffffffff808211156120b757600080fd5b818701915087601f8301126120cb57600080fd5b8135818111156120dd576120dd61204c565b604051601f8201601f19908116603f011681019083821181831017156121055761210561204c565b816040528281528a602084870101111561211e57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060006060848603121561215757600080fd5b83359250602084013561216981611f02565b9150604084013567ffffffffffffffff8116811461218657600080fd5b809150509250925092565b600080604083850312156121a457600080fd5b82356121af81611f02565b9150602083013561204181611f02565b6000602082840312156121d157600080fd5b81516114ff81611fa6565b600181811c908216806121f057607f821691505b60208210810361221057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761077157610771612216565b60008261226057634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f506879676974616c413a2043616c6c6572206973206e6f7420746f6b656e206f60408201526403bb732b9160dd1b606082015260800190565b8082018082111561077157610771612216565b6000602082840312156122cf57600080fd5b81516114ff81611f02565b600083516122ec818460208801611e86565b835190830190612300818360208801611e86565b01949350505050565b60008161231857612318612216565b506000190190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061235390830184611eaa565b9695505050505050565b60006020828403121561236f57600080fd5b81516114ff81611e0f56fea2646970667358221220a4a759999d9992d8636f6df4e8722a5effb17a82aadfa41d7601332fce25ef9664736f6c63430008110033"; + "0x60a06040523480156200001157600080fd5b5060405162002f0138038062002f01833981016040819052620000349162000465565b86866004620000448382620005e5565b506005620000538282620005e5565b5060016002555050601380546001600160a01b038087166001600160a01b031992831617909255600c8054888416620100000262010000600160b01b031990911617905560148054928616929091169190911790558151600414620000ff5760405162461bcd60e51b815260206004820152601860248201527f506879676974616c3a20496e76616c696420496e70757421000000000000000060448201526064015b60405180910390fd5b81600081518110620001155762000115620006b1565b6020026020010151600b8190555081600181518110620001395762000139620006b1565b6020908102919091010151608052620001763383600281518110620001625762000162620006b1565b6020026020010151620001e960201b60201c565b816003815181106200018c576200018c620006b1565b6020908102919091010151600c805461ffff191661ffff909216919091179055600a620001ba8282620005e5565b5050600d80546001600160a01b0319166001600160a01b03949094169390931790925550620006c79350505050565b6127106001600160601b0382161115620002595760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401620000f6565b6001600160a01b038216620002b15760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401620000f6565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600055565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156200032b576200032b620002ea565b604052919050565b600082601f8301126200034557600080fd5b81516001600160401b03811115620003615762000361620002ea565b602062000377601f8301601f1916820162000300565b82815285828487010111156200038c57600080fd5b60005b83811015620003ac5785810183015182820184015282016200038f565b506000928101909101919091529392505050565b80516001600160a01b0381168114620003d857600080fd5b919050565b600082601f830112620003ef57600080fd5b815160206001600160401b038211156200040d576200040d620002ea565b8160051b6200041e82820162000300565b92835284810182019282810190878511156200043957600080fd5b83870192505b848310156200045a578251825291830191908301906200043f565b979650505050505050565b600080600080600080600060e0888a0312156200048157600080fd5b87516001600160401b03808211156200049957600080fd5b620004a78b838c0162000333565b985060208a0151915080821115620004be57600080fd5b620004cc8b838c0162000333565b9750620004dc60408b01620003c0565b9650620004ec60608b01620003c0565b9550620004fc60808b01620003c0565b945060a08a01519150808211156200051357600080fd5b620005218b838c01620003dd565b935060c08a01519150808211156200053857600080fd5b50620005478a828b0162000333565b91505092959891949750929550565b600181811c908216806200056b57607f821691505b6020821081036200058c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005e057600081815260208120601f850160051c81016020861015620005bb5750805b601f850160051c820191505b81811015620005dc57828155600101620005c7565b5050505b505050565b81516001600160401b03811115620006015762000601620002ea565b620006198162000612845462000556565b8462000592565b602080601f831160018114620006515760008415620006385750858301515b600019600386901b1c1916600185901b178555620005dc565b600085815260208120601f198616915b82811015620006825788860151825594840194600190910190840162000661565b5085821015620006a15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b608051612810620006f1600039600081816106bd015281816108a5015261119a01526128106000f3fe6080604052600436106101f95760003560e01c80637db794271161010d578063a22cb465116100a0578063c87b56dd1161006f578063c87b56dd1461068b578063d5abeb01146106ab578063e461c9b6146106df578063e985e9c5146106ff578063f0f7d05d1461071f57600080fd5b8063a22cb46514610612578063a4b1105214610632578063b88d4fde14610658578063c2962bc71461066b57600080fd5b80638f08d44d116100dc5780638f08d44d1461052957806395d89b41146105495780639874cd971461055e578063a0712d68146105f257600080fd5b80637db794271461047f57806381530b68146104ae578063882f08f3146104ce5780638c38431e1461050957600080fd5b806318160ddd1161019057806342966c681161015f57806342966c68146103ca57806354fd4d50146103ea5780636352211e1461041157806370a08231146104315780637501f7411461045157600080fd5b806318160ddd1461034857806323b872dd146103655780632a55205a1461037857806342842e0e146103b757600080fd5b8063081812fc116101cc578063081812fc146102c5578063095ea7b3146102fd5780630aa7c854146103125780630d39fc811461033257600080fd5b80630103c92b146101fe57806301ffc9a71461023e578063049d01531461026e57806306fdde03146102a3575b600080fd5b34801561020a57600080fd5b5061022b610219366004611fe0565b60126020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561024a57600080fd5b5061025e610259366004612013565b61073f565b6040519015158152602001610235565b34801561027a57600080fd5b5061028e610289366004612030565b610770565b60408051928352602083019190915201610235565b3480156102af57600080fd5b506102b861096f565b60405161023591906120ac565b3480156102d157600080fd5b506102e56102e03660046120bf565b610a01565b6040516001600160a01b039091168152602001610235565b61031061030b366004612030565b610a3c565b005b34801561031e57600080fd5b50600d546102e5906001600160a01b031681565b34801561033e57600080fd5b5061022b600b5481565b34801561035457600080fd5b50600354600254036000190161022b565b6103106103733660046120d8565b610a4c565b34801561038457600080fd5b50610398610393366004612119565b610bbb565b604080516001600160a01b039093168352602083019190915201610235565b6103106103c53660046120d8565b610c67565b3480156103d657600080fd5b506103106103e53660046120bf565b610c87565b3480156103f657600080fd5b506103ff600181565b60405160ff9091168152602001610235565b34801561041d57600080fd5b506102e561042c3660046120bf565b610c95565b34801561043d57600080fd5b5061022b61044c366004611fe0565b610ca0565b34801561045d57600080fd5b50600c5461046c9061ffff1681565b60405161ffff9091168152602001610235565b34801561048b57600080fd5b5061049f61049a3660046120bf565b610ce6565b60405161023593929190612173565b3480156104ba57600080fd5b506103106104c93660046120bf565b610d94565b3480156104da57600080fd5b5061025e6104e936600461223e565b805160208183018101805160118252928201919093012091525460ff1681565b34801561051557600080fd5b50610310610524366004612273565b610e6c565b34801561053557600080fd5b506103106105443660046120bf565b610f92565b34801561055557600080fd5b506102b86110da565b34801561056a57600080fd5b506105b96105793660046120bf565b600e602052600090815260409020805460019091015460ff82169161010081046001600160a01b031691600160a81b90910467ffffffffffffffff169084565b6040805194151585526001600160a01b03909316602085015267ffffffffffffffff909116918301919091526060820152608001610235565b3480156105fe57600080fd5b5061028e61060d3660046120bf565b6110e9565b34801561061e57600080fd5b5061031061062d3660046122b5565b6113e0565b34801561063e57600080fd5b50600c546102e5906201000090046001600160a01b031681565b6103106106663660046122e3565b61144c565b34801561067757600080fd5b5061031061068636600461234f565b61148d565b34801561069757600080fd5b506102b86106a63660046120bf565b611577565b3480156106b757600080fd5b5061022b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106eb57600080fd5b506103106106fa366004612373565b6115f2565b34801561070b57600080fd5b5061025e61071a3660046123ba565b611867565b34801561072b57600080fd5b5061022b61073a3660046120bf565b611895565b6000636ad56fd360e11b6001600160e01b031983160161076157506001919050565b61076a826118a5565b92915050565b60135460009081906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156107cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ef91906123e8565b6108145760405162461bcd60e51b815260040161080b90612405565b60405180910390fd5b60006108236002546000190190565b600c5490915061ffff168411158061083f5750600c5461ffff16155b6108a35760405162461bcd60e51b815260206004820152602f60248201527f506879676974616c3a205175616e746974792073686f756c64206265206c657360448201526e1cc81d1a185b881b585e081b5a5b9d608a1b606482015260840161080b565b7f0000000000000000000000000000000000000000000000000000000000000000846108d26002546000190190565b6108dc919061245c565b11156108fa5760405162461bcd60e51b815260040161080b9061246f565b61090485856118f3565b600c54610921906201000090046001600160a01b031660016113e0565b337f328ff68d0e66694e405c9f8fc906a346b345aa1f87ec216eaa82f2c654d0d34a6109506002546000190190565b60408051918252602082018890520160405180910390a2949293505050565b60606004805461097e906124b5565b80601f01602080910402602001604051908101604052809291908181526020018280546109aa906124b5565b80156109f75780601f106109cc576101008083540402835291602001916109f7565b820191906000526020600020905b8154815290600101906020018083116109da57829003601f168201915b5050505050905090565b6000610a0c8261190d565b610a2057610a206333d1c03960e21b61195b565b506000908152600860205260409020546001600160a01b031690565b610a4882826001611965565b5050565b6000610a5782611a08565b6001600160a01b039485169490915081168414610a7d57610a7d62a1148160e81b61195b565b60008281526008602052604090208054610aa98187335b6001600160a01b039081169116811491141790565b610acb57610ab78633611867565b610acb57610acb632ce44b5f60e11b61195b565b8015610ad657600082555b6001600160a01b038681166000908152600760205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260066020526040812091909155600160e11b84169003610b6857600184016000818152600660205260408120549003610b66576002548114610b665760008181526006602052604090208490555b505b6001600160a01b0385168481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a480600003610bb257610bb2633a954ecd60e21b61195b565b50505050505050565b60008281526001602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610c305750604080518082019091526000546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610c4f906001600160601b0316876124ef565b610c599190612506565b915196919550909350505050565b610c828383836040518060200160405280600081525061144c565b505050565b610c92816001611aa9565b50565b600061076a82611a08565b60006001600160a01b038216610cc057610cc06323d3ad8160e21b61195b565b506001600160a01b031660009081526007602052604090205467ffffffffffffffff1690565b60106020526000908152604090208054600182018054919291610d08906124b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d34906124b5565b8015610d815780601f10610d5657610100808354040283529160200191610d81565b820191906000526020600020905b815481529060010190602001808311610d6457829003601f168201915b5050506002909301549192505060ff1683565b6013546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0e91906123e8565b610e2a5760405162461bcd60e51b815260040161080b90612405565b600b81905560408051338152602081018390527fe4fe79a855bb953d57c217fb96867cc30beed4bf0ce6c2b1e7d2731ce74982ec91015b60405180910390a150565b8133610e7782610c95565b6001600160a01b03161480610f0157506013546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0191906123e8565b610f1d5760405162461bcd60e51b815260040161080b90612528565b6000838152601060205260409020600201805483919060ff19166001836004811115610f4b57610f4b61213b565b02179055507f07c2cea5a1fbb990e885b52e8c51ce865a718fb8676e7169289a1c137d3d8b3733848442604051610f85949392919061256f565b60405180910390a1505050565b33610f9c82610c95565b6001600160a01b031614610ffe5760405162461bcd60e51b815260206004820152602360248201527f506879676974616c413a2055736572206973206e6f74206173736574206f776e60448201526265722160e81b606482015260840161080b565b60008181526010602052604081206002015460ff1660048111156110245761102461213b565b1461107f5760405162461bcd60e51b815260206004820152602560248201527f506879676974616c413a2041737365742063616e6e6f742062652064657374726044820152646f7965642160d81b606482015260840161080b565b61108a816001611aa9565b600081815260016020526040812055807f2a5fd0bc4df8bf54012cb36761df3287ea7e3380367b791f6f6ad0506b500a0a336040516001600160a01b03909116815260200160405180910390a250565b60606005805461097e906124b5565b60008060006110fb6002546000190190565b336000908152601260205260408120549192509061111a90869061245c565b600c5490915061ffff161561119857600c5461ffff168111156111985760405162461bcd60e51b815260206004820152603060248201527f506879676974616c413a205175616e746974792073686f756c64206265206c6560448201526f1cdcc81d1a185b881b585e081b5a5b9d60821b606482015260840161080b565b7f0000000000000000000000000000000000000000000000000000000000000000856111c76002546000190190565b6111d1919061245c565b11156111ef5760405162461bcd60e51b815260040161080b9061246f565b6111f885611895565b6014546001600160a01b03166370a08231336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561124e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127291906125a2565b10156112c05760405162461bcd60e51b815260206004820152601c60248201527f506879676974616c413a204e6f7420656e6f7567682066756e64732100000000604482015260640161080b565b60135460408051633955348d60e21b815290516000926001600160a01b03169163e554d2349160048083019260209291908290030181865afa15801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e91906125bb565b9050611345338261133e89611895565b6000611beb565b336000908152601260205260408120805488929061136490849061245c565b90915550611374905033876118f3565b600c54611391906201000090046001600160a01b031660016113e0565b337f328ff68d0e66694e405c9f8fc906a346b345aa1f87ec216eaa82f2c654d0d34a6113c06002546000190190565b60408051918252602082018a90520160405180910390a250909492505050565b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611457848484610a4c565b6001600160a01b0383163b156114875761147384848484611d6d565b611487576114876368d2bf6b60e11b61195b565b50505050565b6013546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156114e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150791906123e8565b6115235760405162461bcd60e51b815260040161080b90612405565b600c805461ffff191661ffff83161790557f681fea8fe1457e6e31ea5cec63ed1685758afb352bc523a85590601a4b3382f833604080516001600160a01b03909216825261ffff8416602083015201610e61565b60606115828261190d565b61159657611596630a14c4b560e41b61195b565b60006115a0611e50565b905080516000036115c057604051806020016040528060008152506115eb565b806115ca84611e5f565b6040516020016115db9291906125d8565b6040516020818303038152906040525b9392505050565b81336115fd82610c95565b6001600160a01b0316148061168757506013546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611663573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168791906123e8565b6116a35760405162461bcd60e51b815260040161080b90612528565b6116ac8361190d565b6116f85760405162461bcd60e51b815260206004820181905260248201527f506879676974616c413a20546f6b656e20646f6573206e6f7420657869737473604482015260640161080b565b6011826040516117089190612607565b9081526040519081900360200190205460ff161580156117345750600083815260106020526040902054155b61178e5760405162461bcd60e51b815260206004820152602560248201527f506879676974616c413a204e46432054616720697320616c72656164792073746044820152646f7265642160d81b606482015260840161080b565b6040805160608101825242815260208082018581526004838501526000878152601090925292902081518155915190919060018201906117ce9082612671565b50604082015160028201805460ff191660018360048111156117f2576117f261213b565b0217905550905050600160118360405161180c9190612607565b908152604051908190036020019020805491151560ff199092169190911790557f35fbbba3856c29d63b934b93a99ab192c3c6b71eacad55451212d003f94eeaad6118543390565b848442604051610f859493929190612731565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b6000600b548261076a91906124ef565b60006301ffc9a760e01b6001600160e01b0319831614806118d657506380ac58cd60e01b6001600160e01b03198316145b8061076a5750506001600160e01b031916635b5e139f60e01b1490565b610a48828260405180602001604052806000815250611ea3565b600081600111611956576002548210156119565760005b506000828152600660205260408120549081900361194c5761194583612769565b9250611924565b600160e01b161590505b919050565b8060005260046000fd5b600061197083610c95565b90508180156119885750336001600160a01b03821614155b156119ab576119978133611867565b6119ab576119ab6367d9dca160e11b61195b565b60008381526008602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b600081600111611a99575060008181526006602052604081205490819003611a86576002548210611a4357611a43636f96cda160e11b61195b565b5b50600019016000818152600660205260409020548015611a4457600160e01b8116600003611a7157919050565b611a81636f96cda160e11b61195b565b611a44565b600160e01b8116600003611a9957919050565b611956636f96cda160e11b61195b565b6000611ab483611a08565b905080600080611ad286600090815260086020526040902080549091565b915091508415611b0957611ae7818433610a94565b611b0957611af58333611867565b611b0957611b09632ce44b5f60e11b61195b565b8015611b1457600082555b6001600160a01b038316600081815260076020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260066020526040812091909155600160e11b85169003611ba257600186016000818152600660205260408120549003611ba0576002548114611ba05760008181526006602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505060038054600101905550505050565b60008115611c4c576040516001600160a01b038516908490600081818185875af1925050503d8060008114611c3c576040519150601f19603f3d011682016040523d82523d6000602084013e611c41565b606091505b505080915050611cce565b6014546040516323b872dd60e01b81526001600160a01b038781166004830152868116602483015260448201869052909116906323b872dd906064016020604051808303816000875af1158015611ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccb91906123e8565b90505b80611d1b5760405162461bcd60e51b815260206004820152601a60248201527f506879676974616c413a205472616e73666572206661696c6564000000000000604482015260640161080b565b604080516001600160a01b038088168252861660208201529081018490527f4ed2986a2cde8f90dd7d10ce44efb8d683b5e58ff9a6ffdc2d83dbbacee764379060600160405180910390a15050505050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611da2903390899088908890600401612780565b6020604051808303816000875af1925050508015611ddd575060408051601f3d908101601f19168201909252611dda918101906127bd565b60015b611e32573d808015611e0b576040519150601f19603f3d011682016040523d82523d6000602084013e611e10565b606091505b508051600003611e2a57611e2a6368d2bf6b60e11b61195b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a805461097e906124b5565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480611e795750819003601f19909101908152919050565b611ead8383611f0c565b6001600160a01b0383163b15610c82576002548281035b611ed76000868380600101945086611d6d565b611eeb57611eeb6368d2bf6b60e11b61195b565b818110611ec4578160025414611f0557611f05600061195b565b5050505050565b6002546000829003611f2857611f2863b562e8dd60e01b61195b565b60008181526006602090815260408083206001600160a01b0387164260a01b6001881460e11b17811790915580845260079092528220805468010000000000000001860201905590819003611f8657611f86622e076360e81b61195b565b818301825b808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4818160010191508103611f8b575060025550505050565b6001600160a01b0381168114610c9257600080fd5b600060208284031215611ff257600080fd5b81356115eb81611fcb565b6001600160e01b031981168114610c9257600080fd5b60006020828403121561202557600080fd5b81356115eb81611ffd565b6000806040838503121561204357600080fd5b823561204e81611fcb565b946020939093013593505050565b60005b8381101561207757818101518382015260200161205f565b50506000910152565b6000815180845261209881602086016020860161205c565b601f01601f19169290920160200192915050565b6020815260006115eb6020830184612080565b6000602082840312156120d157600080fd5b5035919050565b6000806000606084860312156120ed57600080fd5b83356120f881611fcb565b9250602084013561210881611fcb565b929592945050506040919091013590565b6000806040838503121561212c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b6005811061216f57634e487b7160e01b600052602160045260246000fd5b9052565b83815260606020820152600061218c6060830185612080565b9050611e486040830184612151565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126121c257600080fd5b813567ffffffffffffffff808211156121dd576121dd61219b565b604051601f8301601f19908116603f011681019082821181831017156122055761220561219b565b8160405283815286602085880101111561221e57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561225057600080fd5b813567ffffffffffffffff81111561226757600080fd5b611e48848285016121b1565b6000806040838503121561228657600080fd5b8235915060208301356005811061229c57600080fd5b809150509250929050565b8015158114610c9257600080fd5b600080604083850312156122c857600080fd5b82356122d381611fcb565b9150602083013561229c816122a7565b600080600080608085870312156122f957600080fd5b843561230481611fcb565b9350602085013561231481611fcb565b925060408501359150606085013567ffffffffffffffff81111561233757600080fd5b612343878288016121b1565b91505092959194509250565b60006020828403121561236157600080fd5b813561ffff811681146115eb57600080fd5b6000806040838503121561238657600080fd5b82359150602083013567ffffffffffffffff8111156123a457600080fd5b6123b0858286016121b1565b9150509250929050565b600080604083850312156123cd57600080fd5b82356123d881611fcb565b9150602083013561229c81611fcb565b6000602082840312156123fa57600080fd5b81516115eb816122a7565b60208082526021908201527f506879676974616c413a2055736572206973206e6f7420617574686f72697a656040820152601960fa1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561076a5761076a612446565b60208082526026908201527f506879676974616c413a20457863656564696e67206d617820746f6b656e20736040820152657570706c792160d01b606082015260800190565b600181811c908216806124c957607f821691505b6020821081036124e957634e487b7160e01b600052602260045260246000fd5b50919050565b808202811582820484141761076a5761076a612446565b60008261252357634e487b7160e01b600052601260045260246000fd5b500490565b60208082526027908201527f506879676974616c413a55736572206973206e6f74206f776e6572206f72206f6040820152663832b930ba37b960c91b606082015260800190565b6001600160a01b038516815260208101849052608081016125936040830185612151565b82606083015295945050505050565b6000602082840312156125b457600080fd5b5051919050565b6000602082840312156125cd57600080fd5b81516115eb81611fcb565b600083516125ea81846020880161205c565b8351908301906125fe81836020880161205c565b01949350505050565b6000825161261981846020870161205c565b9190910192915050565b601f821115610c8257600081815260208120601f850160051c8101602086101561264a5750805b601f850160051c820191505b8181101561266957828155600101612656565b505050505050565b815167ffffffffffffffff81111561268b5761268b61219b565b61269f8161269984546124b5565b84612623565b602080601f8311600181146126d457600084156126bc5750858301515b600019600386901b1c1916600185901b178555612669565b600085815260208120601f198616915b82811015612703578886015182559484019460019091019084016126e4565b50858210156127215787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60018060a01b03851681528360208201526080604082015260006127586080830185612080565b905082606083015295945050505050565b60008161277857612778612446565b506000190190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906127b390830184612080565b9695505050505050565b6000602082840312156127cf57600080fd5b81516115eb81611ffd56fea264697066735822122032ef2a865b4a0768993c3339ebb65cda96c195f24c249514a686493b6f81a45964736f6c63430008110033"; type PhygitalAConstructorParams = | [signer?: Signer] @@ -1025,8 +1058,8 @@ export class PhygitalA__factory extends ContractFactory { symbol: string, tradeHubAddress: string, accessControlAddress: string, - _maxSupply: BigNumberish, - _royaltyBPS: BigNumberish, + _tokenAddr: string, + contractDetails: BigNumberish[], _baseUri: string, overrides?: Overrides & { from?: string | Promise } ): Promise { @@ -1035,8 +1068,8 @@ export class PhygitalA__factory extends ContractFactory { symbol, tradeHubAddress, accessControlAddress, - _maxSupply, - _royaltyBPS, + _tokenAddr, + contractDetails, _baseUri, overrides || {} ) as Promise; @@ -1046,8 +1079,8 @@ export class PhygitalA__factory extends ContractFactory { symbol: string, tradeHubAddress: string, accessControlAddress: string, - _maxSupply: BigNumberish, - _royaltyBPS: BigNumberish, + _tokenAddr: string, + contractDetails: BigNumberish[], _baseUri: string, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { @@ -1056,8 +1089,8 @@ export class PhygitalA__factory extends ContractFactory { symbol, tradeHubAddress, accessControlAddress, - _maxSupply, - _royaltyBPS, + _tokenAddr, + contractDetails, _baseUri, overrides || {} ); diff --git a/typechain-types/factories/Phygital__factory.ts b/typechain-types/factories/Phygital__factory.ts index 1e80a54..fe70177 100644 --- a/typechain-types/factories/Phygital__factory.ts +++ b/typechain-types/factories/Phygital__factory.ts @@ -25,7 +25,7 @@ const _abi = [ }, { internalType: "address", - name: "flowContract", + name: "accessControlAddress", type: "address", }, ], @@ -213,6 +213,31 @@ const _abi = [ name: "Transfer", type: "event", }, + { + anonymous: false, + inputs: [ + { + indexed: false, + internalType: "address", + name: "user", + type: "address", + }, + { + indexed: false, + internalType: "enum Phygital.ItemStatus", + name: "assetStatus", + type: "uint8", + }, + { + indexed: false, + internalType: "uint256", + name: "time", + type: "uint256", + }, + ], + name: "UpdateAssetStatus", + type: "event", + }, { anonymous: false, inputs: [ @@ -306,25 +331,6 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, - { - inputs: [ - { - internalType: "bytes16", - name: "", - type: "bytes16", - }, - ], - name: "assetStatus", - outputs: [ - { - internalType: "bool", - name: "", - type: "bool", - }, - ], - stateMutability: "view", - type: "function", - }, { inputs: [ { @@ -357,9 +363,9 @@ const _abi = [ type: "uint96", }, { - internalType: "bytes16", + internalType: "bytes", name: "_phygitalID", - type: "bytes16", + type: "bytes", }, ], name: "createAsset", @@ -391,9 +397,9 @@ const _abi = [ type: "uint96", }, { - internalType: "bytes16", - name: "_phygitalID", - type: "bytes16", + internalType: "bytes", + name: "phygitalID", + type: "bytes", }, ], name: "delegateAssetCreation", @@ -516,12 +522,41 @@ const _abi = [ type: "uint256", }, ], - name: "phygitalID", + name: "phygitalAssets", + outputs: [ + { + internalType: "uint256", + name: "registerTime", + type: "uint256", + }, + { + internalType: "bytes", + name: "phygitalId", + type: "bytes", + }, + { + internalType: "enum Phygital.ItemStatus", + name: "status", + type: "uint8", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "", + type: "bytes", + }, + ], + name: "phygitalIdCheck", outputs: [ { - internalType: "bytes16", + internalType: "bool", name: "", - type: "bytes16", + type: "bool", }, ], stateMutability: "view", @@ -681,11 +716,16 @@ const _abi = [ inputs: [ { internalType: "uint256", - name: "_nftPrice", + name: "tokenId", type: "uint256", }, + { + internalType: "enum Phygital.ItemStatus", + name: "_status", + type: "uint8", + }, ], - name: "setNftPrice", + name: "setItemStatus", outputs: [], stateMutability: "nonpayable", type: "function", @@ -933,7 +973,7 @@ const _abi = [ ]; const _bytecode = - "0x6080604052600d805460ff60a01b1916600160a01b1790553480156200002457600080fd5b506040516200329338038062003293833981016040819052620000479162000190565b83836000620000578382620002ae565b506001620000668282620002ae565b5050601480546001600160a01b039384166001600160a01b03199182168117909255600c8054959094169481169490941790925550600d8054909216179055506200037a9050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000d657600080fd5b81516001600160401b0380821115620000f357620000f3620000ae565b604051601f8301601f19908116603f011681019082821181831017156200011e576200011e620000ae565b816040528381526020925086838588010111156200013b57600080fd5b600091505b838210156200015f578582018301518183018401529082019062000140565b600093810190920192909252949350505050565b80516001600160a01b03811681146200018b57600080fd5b919050565b60008060008060808587031215620001a757600080fd5b84516001600160401b0380821115620001bf57600080fd5b620001cd88838901620000c4565b95506020870151915080821115620001e457600080fd5b50620001f387828801620000c4565b935050620002046040860162000173565b9150620002146060860162000173565b905092959194509250565b600181811c908216806200023457607f821691505b6020821081036200025557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002a957600081815260208120601f850160051c81016020861015620002845750805b601f850160051c820191505b81811015620002a55782815560010162000290565b5050505b505050565b81516001600160401b03811115620002ca57620002ca620000ae565b620002e281620002db84546200021f565b846200025b565b602080601f8311600181146200031a5760008415620003015750858301515b600019600386901b1c1916600185901b178555620002a5565b600085815260208120601f198616915b828110156200034b578886015182559484019460019091019084016200032a565b50858210156200036a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612f09806200038a6000396000f3fe6080604052600436106102045760003560e01c80636352211e11610118578063a22cb465116100a0578063be0844751161006f578063be084475146106cb578063c2f1f14a146106eb578063c87b56dd1461070b578063e030565e1461072b578063e985e9c51461074b57600080fd5b8063a22cb4651461064b578063a4b110521461066b578063b88d4fde1461068b578063ba91caae146106ab57600080fd5b80637d9a7a4c116100e75780637d9a7a4c146105175780637e57f7de146105375780638fc88c481461056757806395d89b41146105a45780639874cd97146105b957600080fd5b80636352211e146104a4578063655bc8db146104c457806370a08231146104e4578063783a112b1461050457600080fd5b806323b872dd1161019b578063474c15201161016a578063474c1520146103d25780634eeca076146103f25780634f6ccce7146104085780634f7170dd1461042857806354fd4d501461047157600080fd5b806323b872dd146103335780632a55205a146103535780632f745c591461039257806342842e0e146103b257600080fd5b80630aa7c854116101d75780630aa7c854146102ba5780630d39fc81146102da5780630e3b2fe7146102fe57806318160ddd1461031e57600080fd5b806301ffc9a71461020957806306fdde031461023e578063081812fc14610260578063095ea7b314610298575b600080fd5b34801561021557600080fd5b5061022961022436600461259b565b610794565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b506102536107e5565b60405161023591906125fe565b34801561026c57600080fd5b5061028061027b366004612611565b610877565b6040516001600160a01b039091168152602001610235565b3480156102a457600080fd5b506102b86102b3366004612641565b61089e565b005b3480156102c657600080fd5b50600d54610280906001600160a01b031681565b3480156102e657600080fd5b506102f0600e5481565b604051908152602001610235565b34801561030a57600080fd5b506102f0610319366004612745565b6109b8565b34801561032a57600080fd5b506008546102f0565b34801561033f57600080fd5b506102b861034e3660046127b3565b610b90565b34801561035f57600080fd5b5061037361036e3660046127ef565b610bc2565b604080516001600160a01b039093168352602083019190915201610235565b34801561039e57600080fd5b506102f06103ad366004612641565b610c6e565b3480156103be57600080fd5b506102b86103cd3660046127b3565b610d04565b3480156103de57600080fd5b506102b86103ed366004612611565b610d1f565b3480156103fe57600080fd5b506102f0600f5481565b34801561041457600080fd5b506102f0610423366004612611565b610d9f565b34801561043457600080fd5b50610458610443366004612611565b60126020526000908152604090205460801b81565b6040516001600160801b03199091168152602001610235565b34801561047d57600080fd5b50600d5461049290600160a01b900460ff1681565b60405160ff9091168152602001610235565b3480156104b057600080fd5b506102806104bf366004612611565b610e32565b3480156104d057600080fd5b506102b86104df36600461281f565b610e92565b3480156104f057600080fd5b506102f06104ff366004612857565b610f34565b6102b86105123660046127ef565b610fba565b34801561052357600080fd5b506102b8610532366004612611565b6112f6565b34801561054357600080fd5b50610229610552366004612872565b60136020526000908152604090205460ff1681565b34801561057357600080fd5b506102f0610582366004612611565b600090815260106020526040902054600160a81b90046001600160401b031690565b3480156105b057600080fd5b50610253611391565b3480156105c557600080fd5b506106136105d4366004612611565b6010602052600090815260409020805460019091015460ff82169161010081046001600160a01b031691600160a81b9091046001600160401b03169084565b6040805194151585526001600160a01b0390931660208501526001600160401b03909116918301919091526060820152608001610235565b34801561065757600080fd5b506102b861066636600461288d565b6113a0565b34801561067757600080fd5b50600c54610280906001600160a01b031681565b34801561069757600080fd5b506102b86106a63660046128c4565b6113af565b3480156106b757600080fd5b506102f06106c63660046127ef565b6113e7565b3480156106d757600080fd5b506102f06106e636600461293f565b61140b565b3480156106f757600080fd5b50610280610706366004612611565b611610565b34801561071757600080fd5b50610253610726366004612611565b611664565b34801561073757600080fd5b506102b861074636600461299c565b611766565b34801561075757600080fd5b506102296107663660046129e8565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6000636ad56fd360e11b6001600160e01b03198316016107b657506001919050565b6314bdb52960e21b6001600160e01b03198316016107d657506001919050565b6107df826118d7565b92915050565b6060600080546107f490612a1b565b80601f016020809104026020016040519081016040528092919081815260200182805461082090612a1b565b801561086d5780601f106108425761010080835404028352916020019161086d565b820191906000526020600020905b81548152906001019060200180831161085057829003601f168201915b5050505050905090565b6000610882826118fc565b506000908152600460205260409020546001600160a01b031690565b60006108a982610e32565b9050806001600160a01b0316836001600160a01b03160361091b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061093757506109378133610766565b6109a95760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610912565b6109b3838361194c565b505050565b6014546000906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a359190612a55565b610a515760405162461bcd60e51b815260040161091290612a72565b6001600160801b0319821660009081526013602052604090205460ff1615610a8b5760405162461bcd60e51b815260040161091290612ab3565b600f8054906000610a9b83612b0d565b9091555050600f5460008181526012602090815260408083208054608088901c6001600160801b0319918216179091558616835260139091529020805460ff19166001179055610aeb86826119ba565b610af581866119d4565b6103e8846001600160601b03161115610b205760405162461bcd60e51b815260040161091290612b26565b610b2b818786611a41565b600c54610b42906001600160a01b031660016113a0565b856001600160a01b03167fb3892a92dea2c514f2bb56dbca6f8784b48e8b0a15938028e69a62c105a8f1c28287604051610b7d929190612b6e565b60405180910390a290505b949350505050565b610b9b335b82611b4f565b610bb75760405162461bcd60e51b815260040161091290612b87565b6109b3838383611bcd565b6000828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610c37575060408051808201909152600a546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610c56906001600160601b031687612bd4565b610c609190612beb565b915196919550909350505050565b6000610c7983610f34565b8210610cdb5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610912565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6109b3838383604051806020016040528060008152506113af565b610d2833610b95565b610d445760405162461bcd60e51b815260040161091290612c0d565b610d4d81611d3e565b807f0adc791222843a140d53786c349cfe25882232ec03fe4250d96d021abfff6a03336040516001600160a01b03909116815260200160405180910390a26000908152600b6020526040812055565b50565b6000610daa60085490565b8210610e0d5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610912565b60088281548110610e2057610e20612c5c565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806107df5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610912565b610e9d335b84611b4f565b610eb95760405162461bcd60e51b815260040161091290612c0d565b6000838152601060205260409020805460ff1916831515178155600101819055336001600160a01b03167fa9dcc06084f66afbdc1841a28e84400fcbf607131220fdcf404c8502f3c03203848484604051610f27939291909283529015156020830152604082015260600190565b60405180910390a2505050565b60006001600160a01b038216610f9e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610912565b506001600160a01b031660009081526003602052604090205490565b610fc382611de1565b61100f5760405162461bcd60e51b815260206004820152601b60248201527f506879676974616c3a20496e76616c69646520546f6b656e20496400000000006044820152606401610912565b60008281526010602052604090205460ff1661106d5760405162461bcd60e51b815260206004820181905260248201527f506879676974616c3a204e6f7420617661696c61626c6520666f722072656e746044820152606401610912565b600061107883611610565b6001600160a01b0316146110ce5760405162461bcd60e51b815260206004820181905260248201527f506879676974616c3a204e465420416c726561647920537562736372696265646044820152606401610912565b6000811161112f5760405162461bcd60e51b815260206004820152602860248201527f506879676974616c3a2054696d652063616e2774206265206c65737320746861604482015267371018903437bab960c11b6064820152608401610912565b6110e08111156111945760405162461bcd60e51b815260206004820152602a60248201527f506879676974616c3a2054696d652063616e2774206265206d6f7265207468616044820152696e2036206d6f6e74687360b01b6064820152608401610912565b60006111a083836113e7565b9050803410156111f25760405162461bcd60e51b815260206004820152601c60248201527f506879676974616c3a20496e73756666696369656e742046756e6473000000006044820152606401610912565b6111fb83610e32565b6001600160a01b03166108fc349081150290604051600060405180830381858888f19350505050158015611233573d6000803e3d6000fd5b5060008381526010602052604090208054610100600160a81b031916610100330217815561126383610e10612bd4565b61126d9042612c72565b81546001600160401b0391909116600160a81b0267ffffffffffffffff60a81b1990911617815561129b3390565b8154604051600160a81b9091046001600160401b031681526001600160a01b03919091169085907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe906020015b60405180910390a350505050565b6014546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561134c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113709190612a55565b61138c5760405162461bcd60e51b815260040161091290612a72565b600e55565b6060600180546107f490612a1b565b6113ab338383611dfe565b5050565b6113b93383611b4f565b6113d55760405162461bcd60e51b815260040161091290612b87565b6113e184848484611ecc565b50505050565b600082815260106020526040812060010154611404908390612bd4565b9392505050565b6014546000906001600160a01b031663efd46065336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611464573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114889190612a55565b6114d45760405162461bcd60e51b815260206004820181905260248201527f506879676974616c3a2055736572206973206e6f7420617574686f72697a65646044820152606401610912565b6001600160801b0319821660009081526013602052604090205460ff161561150e5760405162461bcd60e51b815260040161091290612ab3565b600f805490600061151e83612b0d565b9091555050600f54600081815260126020908152604080832080546001600160801b0319908116608089901c179091558616835260139091529020805460ff1916600117905561156e33826119ba565b61157881866119d4565b6103e8846001600160601b031611156115a35760405162461bcd60e51b815260040161091290612b26565b6115ae813386611a41565b600c546115c5906001600160a01b031660016113a0565b336001600160a01b03167fb3892a92dea2c514f2bb56dbca6f8784b48e8b0a15938028e69a62c105a8f1c28287604051611600929190612b6e565b60405180910390a2949350505050565b6000818152601060205260408120544290600160a81b90046001600160401b031610611657575060009081526010602052604090205461010090046001600160a01b031690565b506000919050565b919050565b606061166f82611de1565b6116c75760405162461bcd60e51b815260206004820152602360248201527f5369676e61747572655365726965733a204e6f6e2d4578697374656e742041736044820152621cd95d60ea1b6064820152608401610912565b600082815260116020526040812080546116e090612a1b565b80601f016020809104026020016040519081016040528092919081815260200182805461170c90612a1b565b80156117595780601f1061172e57610100808354040283529160200191611759565b820191906000526020600020905b81548152906001019060200180831161173c57829003601f168201915b5093979650505050505050565b61176f33610e97565b6117c95760405162461bcd60e51b815260206004820152602560248201527f506879676974616c3a204e6f7420746f6b656e206f776e6572204f72206170706044820152641c9bdd995960da1b6064820152608401610912565b60006117d484611610565b6001600160a01b0316146118365760405162461bcd60e51b8152602060048201526024808201527f506879676974616c3a206974656d20697320616c7265616479207375627363726044820152631a58995960e21b6064820152608401610912565b60008381526010602052604090208054610100600160a81b0319166101006001600160a01b0385160217815561186c4283612c85565b815467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831681029190911780845560405191900490911681526001600160a01b0384169085907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe906020016112e8565b60006001600160e01b0319821663152a902d60e11b14806107df57506107df82611eff565b61190581611de1565b610d9c5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610912565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061198182610e32565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6113ab828260405180602001604052806000815250611f24565b6119dd82611de1565b611a295760405162461bcd60e51b815260206004820152601c60248201527f506879676974616c3a204e6f6e2d4578697374656e74204173736574000000006044820152606401610912565b60008281526011602052604090206109b38282612cfa565b6127106001600160601b0382161115611aaf5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401610912565b6001600160a01b038216611b055760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610912565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600b90529190942093519051909116600160a01b029116179055565b600080611b5b83610e32565b9050806001600160a01b0316846001600160a01b03161480611ba257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610b885750836001600160a01b0316611bbb84610877565b6001600160a01b031614949350505050565b826001600160a01b0316611be082610e32565b6001600160a01b031614611c065760405162461bcd60e51b815260040161091290612db9565b6001600160a01b038216611c685760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610912565b611c758383836001611f57565b826001600160a01b0316611c8882610e32565b6001600160a01b031614611cae5760405162461bcd60e51b815260040161091290612db9565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000611d4982610e32565b9050611d59816000846001611f57565b611d6282610e32565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000908152600260205260409020546001600160a01b0316151590565b816001600160a01b0316836001600160a01b031603611e5f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610912565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611ed7848484611bcd565b611ee384848484611ff8565b6113e15760405162461bcd60e51b815260040161091290612dfe565b60006001600160e01b0319821663780e9d6360e01b14806107df57506107df826120f6565b611f2e8383612146565b611f3b6000848484611ff8565b6109b35760405162461bcd60e51b815260040161091290612dfe565b611f63848484846122c1565b826001600160a01b0316846001600160a01b031614158015611fa0575060008281526010602052604090205461010090046001600160a01b031615155b156113e157600082815260106020908152604080832080546001600160e81b03191681556001018390555182815284917f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe91016112e8565b60006001600160a01b0384163b156120ee57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061203c903390899088908890600401612e50565b6020604051808303816000875af1925050508015612077575060408051601f3d908101601f1916820190925261207491810190612e8d565b60015b6120d4573d8080156120a5576040519150601f19603f3d011682016040523d82523d6000602084013e6120aa565b606091505b5080516000036120cc5760405162461bcd60e51b815260040161091290612dfe565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610b88565b506001610b88565b60006001600160e01b031982166380ac58cd60e01b148061212757506001600160e01b03198216635b5e139f60e01b145b806107df57506301ffc9a760e01b6001600160e01b03198316146107df565b6001600160a01b03821661219c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610912565b6121a581611de1565b156121f25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610912565b612200600083836001611f57565b61220981611de1565b156122565760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610912565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60018111156123305760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610912565b816001600160a01b03851661238c5761238781600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6123af565b836001600160a01b0316856001600160a01b0316146123af576123af85826123f5565b6001600160a01b0384166123cb576123c681612492565b6123ee565b846001600160a01b0316846001600160a01b0316146123ee576123ee8482612541565b5050505050565b6000600161240284610f34565b61240c9190612eaa565b60008381526007602052604090205490915080821461245f576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906124a490600190612eaa565b600083815260096020526040812054600880549394509092849081106124cc576124cc612c5c565b9060005260206000200154905080600883815481106124ed576124ed612c5c565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061252557612525612ebd565b6001900381819060005260206000200160009055905550505050565b600061254c83610f34565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b031981168114610d9c57600080fd5b6000602082840312156125ad57600080fd5b813561140481612585565b6000815180845260005b818110156125de576020818501810151868301820152016125c2565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061140460208301846125b8565b60006020828403121561262357600080fd5b5035919050565b80356001600160a01b038116811461165f57600080fd5b6000806040838503121561265457600080fd5b61265d8361262a565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561269b5761269b61266b565b604051601f8501601f19908116603f011681019082821181831017156126c3576126c361266b565b816040528093508581528686860111156126dc57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261270757600080fd5b61140483833560208501612681565b80356001600160601b038116811461165f57600080fd5b80356001600160801b03198116811461165f57600080fd5b6000806000806080858703121561275b57600080fd5b6127648561262a565b935060208501356001600160401b0381111561277f57600080fd5b61278b878288016126f6565b93505061279a60408601612716565b91506127a86060860161272d565b905092959194509250565b6000806000606084860312156127c857600080fd5b6127d18461262a565b92506127df6020850161262a565b9150604084013590509250925092565b6000806040838503121561280257600080fd5b50508035926020909101359150565b8015158114610d9c57600080fd5b60008060006060848603121561283457600080fd5b83359250602084013561284681612811565b929592945050506040919091013590565b60006020828403121561286957600080fd5b6114048261262a565b60006020828403121561288457600080fd5b6114048261272d565b600080604083850312156128a057600080fd5b6128a98361262a565b915060208301356128b981612811565b809150509250929050565b600080600080608085870312156128da57600080fd5b6128e38561262a565b93506128f16020860161262a565b92506040850135915060608501356001600160401b0381111561291357600080fd5b8501601f8101871361292457600080fd5b61293387823560208401612681565b91505092959194509250565b60008060006060848603121561295457600080fd5b83356001600160401b0381111561296a57600080fd5b612976868287016126f6565b93505061298560208501612716565b91506129936040850161272d565b90509250925092565b6000806000606084860312156129b157600080fd5b833592506129c16020850161262a565b915060408401356001600160401b03811681146129dd57600080fd5b809150509250925092565b600080604083850312156129fb57600080fd5b612a048361262a565b9150612a126020840161262a565b90509250929050565b600181811c90821680612a2f57607f821691505b602082108103612a4f57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612a6757600080fd5b815161140481612811565b60208082526021908201527f506879676974616c3a2055736572206973206e6f7420617574686f72697a65646040820152600160fd1b606082015260800190565b60208082526024908201527f506879676974616c3a204e46432054616720697320616c72656164792073746f6040820152637265642160e01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600060018201612b1f57612b1f612af7565b5060010190565b60208082526028908201527f506879676974616c3a20526f79616c74792063616e2774206265206d6f7265206040820152677468616e2031302560c01b606082015260800190565b828152604060208201526000610b8860408301846125b8565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b80820281158282048414176107df576107df612af7565b600082612c0857634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602f908201527f506879676974616c3a2043616c6c6572206973206e6f7420746f6b656e206f7760408201526e1b995c881bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b808201808211156107df576107df612af7565b6001600160401b03818116838216019080821115612ca557612ca5612af7565b5092915050565b601f8211156109b357600081815260208120601f850160051c81016020861015612cd35750805b601f850160051c820191505b81811015612cf257828155600101612cdf565b505050505050565b81516001600160401b03811115612d1357612d1361266b565b612d2781612d218454612a1b565b84612cac565b602080601f831160018114612d5c5760008415612d445750858301515b600019600386901b1c1916600185901b178555612cf2565b600085815260208120601f198616915b82811015612d8b57888601518255948401946001909101908401612d6c565b5085821015612da95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612e83908301846125b8565b9695505050505050565b600060208284031215612e9f57600080fd5b815161140481612585565b818103818111156107df576107df612af7565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220afb2f227ef6726d6998333390b8aa93c49c5a0b5691e42d53051dfca28de6c4a64736f6c63430008110033"; + "0x60806040523480156200001157600080fd5b50604051620036a3380380620036a383398101604081905262000034916200017d565b838360006200004483826200029b565b5060016200005382826200029b565b5050601480546001600160a01b039384166001600160a01b03199182168117909255600c8054959094169481169490941790925550600d805490921617905550620003679050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000c357600080fd5b81516001600160401b0380821115620000e057620000e06200009b565b604051601f8301601f19908116603f011681019082821181831017156200010b576200010b6200009b565b816040528381526020925086838588010111156200012857600080fd5b600091505b838210156200014c57858201830151818301840152908201906200012d565b600093810190920192909252949350505050565b80516001600160a01b03811681146200017857600080fd5b919050565b600080600080608085870312156200019457600080fd5b84516001600160401b0380821115620001ac57600080fd5b620001ba88838901620000b1565b95506020870151915080821115620001d157600080fd5b50620001e087828801620000b1565b935050620001f16040860162000160565b9150620002016060860162000160565b905092959194509250565b600181811c908216806200022157607f821691505b6020821081036200024257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029657600081815260208120601f850160051c81016020861015620002715750805b601f850160051c820191505b8181101562000292578281556001016200027d565b5050505b505050565b81516001600160401b03811115620002b757620002b76200009b565b620002cf81620002c884546200020c565b8462000248565b602080601f831160018114620003075760008415620002ee5750858301515b600019600386901b1c1916600185901b17855562000292565b600085815260208120601f198616915b82811015620003385788860151825594840194600190910190840162000317565b5085821015620003575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61332c80620003776000396000f3fe6080604052600436106102045760003560e01c806370a08231116101185780639874cd97116100a0578063ba91caae1161006f578063ba91caae146106b0578063c2f1f14a146106d0578063c87b56dd146106f0578063e030565e14610710578063e985e9c51461073057600080fd5b80639874cd97146105be578063a22cb46514610650578063a4b1105214610670578063b88d4fde1461069057600080fd5b8063882f08f3116100e7578063882f08f3146104f15780638b485d2d1461052c5780638c38431e1461054c5780638fc88c481461056c57806395d89b41146105a957600080fd5b806370a082311461046f578063783a112b1461048f5780637db79427146104a257806388030eb9146104d157600080fd5b80632a55205a1161019b5780634eeca0761161016a5780634eeca076146103d25780634f6ccce7146103e857806354fd4d50146104085780636352211e1461042f578063655bc8db1461044f57600080fd5b80632a55205a146103335780632f745c591461037257806342842e0e14610392578063474c1520146103b257600080fd5b80630aa7c854116101d75780630aa7c854146102ba5780630d39fc81146102da57806318160ddd146102fe57806323b872dd1461031357600080fd5b806301ffc9a71461020957806306fdde031461023e578063081812fc14610260578063095ea7b314610298575b600080fd5b34801561021557600080fd5b50610229610224366004612965565b610779565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b506102536107ca565b60405161023591906129d2565b34801561026c57600080fd5b5061028061027b3660046129e5565b61085c565b6040516001600160a01b039091168152602001610235565b3480156102a457600080fd5b506102b86102b3366004612a15565b610883565b005b3480156102c657600080fd5b50600d54610280906001600160a01b031681565b3480156102e657600080fd5b506102f0600e5481565b604051908152602001610235565b34801561030a57600080fd5b506008546102f0565b34801561031f57600080fd5b506102b861032e366004612a3f565b61099d565b34801561033f57600080fd5b5061035361034e366004612a7b565b6109ce565b604080516001600160a01b039093168352602083019190915201610235565b34801561037e57600080fd5b506102f061038d366004612a15565b610a7a565b34801561039e57600080fd5b506102b86103ad366004612a3f565b610b10565b3480156103be57600080fd5b506102b86103cd3660046129e5565b610b2b565b3480156103de57600080fd5b506102f0600f5481565b3480156103f457600080fd5b506102f06104033660046129e5565b610ca9565b34801561041457600080fd5b5061041d600181565b60405160ff9091168152602001610235565b34801561043b57600080fd5b5061028061044a3660046129e5565b610d3c565b34801561045b57600080fd5b506102b861046a366004612aab565b610d9c565b34801561047b57600080fd5b506102f061048a366004612ae3565b610e3e565b6102b861049d366004612a7b565b610ec4565b3480156104ae57600080fd5b506104c26104bd3660046129e5565b611200565b60405161023593929190612b36565b3480156104dd57600080fd5b506102f06104ec366004612c17565b6112ae565b3480156104fd57600080fd5b5061022961050c366004612c8a565b805160208183018101805160138252928201919093012091525460ff1681565b34801561053857600080fd5b506102f0610547366004612cbe565b61154f565b34801561055857600080fd5b506102b8610567366004612d42565b611803565b34801561057857600080fd5b506102f06105873660046129e5565b600090815260106020526040902054600160a81b90046001600160401b031690565b3480156105b557600080fd5b50610253611960565b3480156105ca57600080fd5b506106186105d93660046129e5565b6010602052600090815260409020805460019091015460ff82169161010081046001600160a01b031691600160a81b9091046001600160401b03169084565b6040805194151585526001600160a01b0390931660208501526001600160401b03909116918301919091526060820152608001610235565b34801561065c57600080fd5b506102b861066b366004612d76565b61196f565b34801561067c57600080fd5b50600c54610280906001600160a01b031681565b34801561069c57600080fd5b506102b86106ab366004612da2565b61197e565b3480156106bc57600080fd5b506102f06106cb366004612a7b565b6119b6565b3480156106dc57600080fd5b506102806106eb3660046129e5565b6119da565b3480156106fc57600080fd5b5061025361070b3660046129e5565b611a2e565b34801561071c57600080fd5b506102b861072b366004612dfd565b611b30565b34801561073c57600080fd5b5061022961074b366004612e49565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6000636ad56fd360e11b6001600160e01b031983160161079b57506001919050565b6314bdb52960e21b6001600160e01b03198316016107bb57506001919050565b6107c482611ca1565b92915050565b6060600080546107d990612e7c565b80601f016020809104026020016040519081016040528092919081815260200182805461080590612e7c565b80156108525780601f1061082757610100808354040283529160200191610852565b820191906000526020600020905b81548152906001019060200180831161083557829003601f168201915b5050505050905090565b600061086782611cc6565b506000908152600460205260409020546001600160a01b031690565b600061088e82610d3c565b9050806001600160a01b0316836001600160a01b0316036109005760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061091c575061091c813361074b565b61098e5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108f7565b6109988383611d16565b505050565b6109a73382611d84565b6109c35760405162461bcd60e51b81526004016108f790612eb6565b610998838383611e02565b6000828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a43575060408051808201909152600a546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a62906001600160601b031687612f19565b610a6c9190612f30565b915196919550909350505050565b6000610a8583610e3e565b8210610ae75760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016108f7565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6109988383836040518060200160405280600081525061197e565b33610b3582610d3c565b6001600160a01b03161480610bbf57506014546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbf9190612f52565b610bdb5760405162461bcd60e51b81526004016108f790612f6f565b60008181526012602052604081206002015460ff166005811115610c0157610c01612afe565b14610c4e5760405162461bcd60e51b815260206004820152601a60248201527f506879676974616c3a2043616e6e6f74206265206275726e656400000000000060448201526064016108f7565b610c5781611f73565b807f0adc791222843a140d53786c349cfe25882232ec03fe4250d96d021abfff6a03336040516001600160a01b03909116815260200160405180910390a26000908152600b6020526040812055565b50565b6000610cb460085490565b8210610d175760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016108f7565b60088281548110610d2a57610d2a612fbe565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806107c45760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108f7565b610da7335b84611d84565b610dc35760405162461bcd60e51b81526004016108f790612f6f565b6000838152601060205260409020805460ff1916831515178155600101819055336001600160a01b03167fa9dcc06084f66afbdc1841a28e84400fcbf607131220fdcf404c8502f3c03203848484604051610e31939291909283529015156020830152604082015260600190565b60405180910390a2505050565b60006001600160a01b038216610ea85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108f7565b506001600160a01b031660009081526003602052604090205490565b610ecd82612016565b610f195760405162461bcd60e51b815260206004820152601b60248201527f506879676974616c3a20496e76616c69646520546f6b656e204964000000000060448201526064016108f7565b60008281526010602052604090205460ff16610f775760405162461bcd60e51b815260206004820181905260248201527f506879676974616c3a204e6f7420617661696c61626c6520666f722072656e7460448201526064016108f7565b6000610f82836119da565b6001600160a01b031614610fd85760405162461bcd60e51b815260206004820181905260248201527f506879676974616c3a204e465420416c7265616479205375627363726962656460448201526064016108f7565b600081116110395760405162461bcd60e51b815260206004820152602860248201527f506879676974616c3a2054696d652063616e2774206265206c65737320746861604482015267371018903437bab960c11b60648201526084016108f7565b6110e081111561109e5760405162461bcd60e51b815260206004820152602a60248201527f506879676974616c3a2054696d652063616e2774206265206d6f7265207468616044820152696e2036206d6f6e74687360b01b60648201526084016108f7565b60006110aa83836119b6565b9050803410156110fc5760405162461bcd60e51b815260206004820152601c60248201527f506879676974616c3a20496e73756666696369656e742046756e64730000000060448201526064016108f7565b61110583610d3c565b6001600160a01b03166108fc349081150290604051600060405180830381858888f1935050505015801561113d573d6000803e3d6000fd5b5060008381526010602052604090208054610100600160a81b031916610100330217815561116d83610e10612f19565b6111779042612fd4565b81546001600160401b0391909116600160a81b0267ffffffffffffffff60a81b199091161781556111a53390565b8154604051600160a81b9091046001600160401b031681526001600160a01b03919091169085907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe906020015b60405180910390a350505050565b6012602052600090815260409020805460018201805491929161122290612e7c565b80601f016020809104026020016040519081016040528092919081815260200182805461124e90612e7c565b801561129b5780601f106112705761010080835404028352916020019161129b565b820191906000526020600020905b81548152906001019060200180831161127e57829003601f168201915b5050506002909301549192505060ff1683565b6014546000906001600160a01b031663efd46065336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132b9190612f52565b6113775760405162461bcd60e51b815260206004820181905260248201527f506879676974616c3a2055736572206973206e6f7420617574686f72697a656460448201526064016108f7565b6013826040516113879190612fe7565b9081526040519081900360200190205460ff16156113e75760405162461bcd60e51b815260206004820181905260248201527f506879676974616c3a2054616720697320616c72656164792073746f7265642160448201526064016108f7565b600f80549060006113f783613003565b9091555050600f5460408051606081018252428152602080820186815260058385015260008581526012909252929020815181559151909190600182019061143f908261306a565b50604082015160028201805460ff1916600183600581111561146357611463612afe565b0217905550905050600160138460405161147d9190612fe7565b908152604051908190036020019020805491151560ff199092169190911790556114ad6114a73390565b82612033565b6114b7818661204d565b6103e8846001600160601b031611156114e25760405162461bcd60e51b81526004016108f790613129565b6114ed8133866120ba565b600c54611504906001600160a01b0316600161196f565b336001600160a01b03167fb3892a92dea2c514f2bb56dbca6f8784b48e8b0a15938028e69a62c105a8f1c2828760405161153f929190613171565b60405180910390a2949350505050565b6014546000906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156115a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cc9190612f52565b6116225760405162461bcd60e51b815260206004820152602160248201527f506879676974616c3a2055736572206973206e6f7420617574686f72697a65646044820152600160fd1b60648201526084016108f7565b6013826040516116329190612fe7565b9081526040519081900360200190205460ff161561169e5760405162461bcd60e51b8152602060048201526024808201527f506879676974616c3a204e46432054616720697320616c72656164792073746f6044820152637265642160e01b60648201526084016108f7565b600f80549060006116ae83613003565b9091555050600f546040805160608101825242815260208082018681526005838501526000858152601290925292902081518155915190919060018201906116f6908261306a565b50604082015160028201805460ff1916600183600581111561171a5761171a612afe565b021790555090505060016013846040516117349190612fe7565b908152604051908190036020019020805491151560ff1990921691909117905561175e8682612033565b611768818661204d565b6103e8846001600160601b031611156117935760405162461bcd60e51b81526004016108f790613129565b61179e8187866120ba565b600c546117b5906001600160a01b0316600161196f565b856001600160a01b03167fb3892a92dea2c514f2bb56dbca6f8784b48e8b0a15938028e69a62c105a8f1c282876040516117f0929190613171565b60405180910390a290505b949350505050565b6014546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187d9190612f52565b8061189857503361188d83610d3c565b6001600160a01b0316145b6118ee5760405162461bcd60e51b815260206004820152602160248201527f506879676974616c3a2055736572206973206e6f7420617574686f72697365646044820152602160f81b60648201526084016108f7565b6000828152601260205260409020600201805482919060ff1916600183600581111561191c5761191c612afe565b02179055507fc29397feff3891f2950ea3d79b1cd08a1cd2c8ec558e84e01320791b74fc8c153382426040516119549392919061318a565b60405180910390a15050565b6060600180546107d990612e7c565b61197a3383836121c8565b5050565b6119883383611d84565b6119a45760405162461bcd60e51b81526004016108f790612eb6565b6119b084848484612296565b50505050565b6000828152601060205260408120600101546119d3908390612f19565b9392505050565b6000818152601060205260408120544290600160a81b90046001600160401b031610611a21575060009081526010602052604090205461010090046001600160a01b031690565b506000919050565b919050565b6060611a3982612016565b611a915760405162461bcd60e51b815260206004820152602360248201527f5369676e61747572655365726965733a204e6f6e2d4578697374656e742041736044820152621cd95d60ea1b60648201526084016108f7565b60008281526011602052604081208054611aaa90612e7c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad690612e7c565b8015611b235780601f10611af857610100808354040283529160200191611b23565b820191906000526020600020905b815481529060010190602001808311611b0657829003601f168201915b5093979650505050505050565b611b3933610da1565b611b935760405162461bcd60e51b815260206004820152602560248201527f506879676974616c3a204e6f7420746f6b656e206f776e6572204f72206170706044820152641c9bdd995960da1b60648201526084016108f7565b6000611b9e846119da565b6001600160a01b031614611c005760405162461bcd60e51b8152602060048201526024808201527f506879676974616c3a206974656d20697320616c7265616479207375627363726044820152631a58995960e21b60648201526084016108f7565b60008381526010602052604090208054610100600160a81b0319166101006001600160a01b03851602178155611c3642836131b5565b815467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831681029190911780845560405191900490911681526001600160a01b0384169085907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe906020016111f2565b60006001600160e01b0319821663152a902d60e11b14806107c457506107c4826122c9565b611ccf81612016565b610ca65760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108f7565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611d4b82610d3c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611d9083610d3c565b9050806001600160a01b0316846001600160a01b03161480611dd757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806117fb5750836001600160a01b0316611df08461085c565b6001600160a01b031614949350505050565b826001600160a01b0316611e1582610d3c565b6001600160a01b031614611e3b5760405162461bcd60e51b81526004016108f7906131dc565b6001600160a01b038216611e9d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108f7565b611eaa83838360016122ee565b826001600160a01b0316611ebd82610d3c565b6001600160a01b031614611ee35760405162461bcd60e51b81526004016108f7906131dc565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000611f7e82610d3c565b9050611f8e8160008460016122ee565b611f9782610d3c565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000908152600260205260409020546001600160a01b0316151590565b61197a82826040518060200160405280600081525061238f565b61205682612016565b6120a25760405162461bcd60e51b815260206004820152601c60248201527f506879676974616c3a204e6f6e2d4578697374656e742041737365740000000060448201526064016108f7565b6000828152601160205260409020610998828261306a565b6127106001600160601b03821611156121285760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084016108f7565b6001600160a01b03821661217e5760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d6574657273000000000060448201526064016108f7565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600b90529190942093519051909116600160a01b029116179055565b816001600160a01b0316836001600160a01b0316036122295760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108f7565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6122a1848484611e02565b6122ad848484846123c2565b6119b05760405162461bcd60e51b81526004016108f790613221565b60006001600160e01b0319821663780e9d6360e01b14806107c457506107c4826124c0565b6122fa84848484612510565b826001600160a01b0316846001600160a01b031614158015612337575060008281526010602052604090205461010090046001600160a01b031615155b156119b057600082815260106020908152604080832080546001600160e81b03191681556001018390555182815284917f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe91016111f2565b6123998383612644565b6123a660008484846123c2565b6109985760405162461bcd60e51b81526004016108f790613221565b60006001600160a01b0384163b156124b857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612406903390899088908890600401613273565b6020604051808303816000875af1925050508015612441575060408051601f3d908101601f1916820190925261243e918101906132b0565b60015b61249e573d80801561246f576040519150601f19603f3d011682016040523d82523d6000602084013e612474565b606091505b5080516000036124965760405162461bcd60e51b81526004016108f790613221565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117fb565b5060016117fb565b60006001600160e01b031982166380ac58cd60e01b14806124f157506001600160e01b03198216635b5e139f60e01b145b806107c457506301ffc9a760e01b6001600160e01b03198316146107c4565b600181111561257f5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b60648201526084016108f7565b816001600160a01b0385166125db576125d681600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6125fe565b836001600160a01b0316856001600160a01b0316146125fe576125fe85826127bf565b6001600160a01b03841661261a576126158161285c565b61263d565b846001600160a01b0316846001600160a01b03161461263d5761263d848261290b565b5050505050565b6001600160a01b03821661269a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108f7565b6126a381612016565b156126f05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108f7565b6126fe6000838360016122ee565b61270781612016565b156127545760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108f7565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600060016127cc84610e3e565b6127d691906132cd565b600083815260076020526040902054909150808214612829576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061286e906001906132cd565b6000838152600960205260408120546008805493945090928490811061289657612896612fbe565b9060005260206000200154905080600883815481106128b7576128b7612fbe565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806128ef576128ef6132e0565b6001900381819060005260206000200160009055905550505050565b600061291683610e3e565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b031981168114610ca657600080fd5b60006020828403121561297757600080fd5b81356119d38161294f565b60005b8381101561299d578181015183820152602001612985565b50506000910152565b600081518084526129be816020860160208601612982565b601f01601f19169290920160200192915050565b6020815260006119d360208301846129a6565b6000602082840312156129f757600080fd5b5035919050565b80356001600160a01b0381168114611a2957600080fd5b60008060408385031215612a2857600080fd5b612a31836129fe565b946020939093013593505050565b600080600060608486031215612a5457600080fd5b612a5d846129fe565b9250612a6b602085016129fe565b9150604084013590509250925092565b60008060408385031215612a8e57600080fd5b50508035926020909101359150565b8015158114610ca657600080fd5b600080600060608486031215612ac057600080fd5b833592506020840135612ad281612a9d565b929592945050506040919091013590565b600060208284031215612af557600080fd5b6119d3826129fe565b634e487b7160e01b600052602160045260246000fd5b60068110612b3257634e487b7160e01b600052602160045260246000fd5b9052565b838152606060208201526000612b4f60608301856129a6565b90506117fb6040830184612b14565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612b8557600080fd5b81356001600160401b0380821115612b9f57612b9f612b5e565b604051601f8301601f19908116603f01168101908282118183101715612bc757612bc7612b5e565b81604052838152866020858801011115612be057600080fd5b836020870160208301376000602085830101528094505050505092915050565b80356001600160601b0381168114611a2957600080fd5b600080600060608486031215612c2c57600080fd5b83356001600160401b0380821115612c4357600080fd5b612c4f87838801612b74565b9450612c5d60208701612c00565b93506040860135915080821115612c7357600080fd5b50612c8086828701612b74565b9150509250925092565b600060208284031215612c9c57600080fd5b81356001600160401b03811115612cb257600080fd5b6117fb84828501612b74565b60008060008060808587031215612cd457600080fd5b612cdd856129fe565b935060208501356001600160401b0380821115612cf957600080fd5b612d0588838901612b74565b9450612d1360408801612c00565b93506060870135915080821115612d2957600080fd5b50612d3687828801612b74565b91505092959194509250565b60008060408385031215612d5557600080fd5b82359150602083013560068110612d6b57600080fd5b809150509250929050565b60008060408385031215612d8957600080fd5b612d92836129fe565b91506020830135612d6b81612a9d565b60008060008060808587031215612db857600080fd5b612dc1856129fe565b9350612dcf602086016129fe565b92506040850135915060608501356001600160401b03811115612df157600080fd5b612d3687828801612b74565b600080600060608486031215612e1257600080fd5b83359250612e22602085016129fe565b915060408401356001600160401b0381168114612e3e57600080fd5b809150509250925092565b60008060408385031215612e5c57600080fd5b612e65836129fe565b9150612e73602084016129fe565b90509250929050565b600181811c90821680612e9057607f821691505b602082108103612eb057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107c4576107c4612f03565b600082612f4d57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612f6457600080fd5b81516119d381612a9d565b6020808252602f908201527f506879676974616c3a2043616c6c6572206973206e6f7420746f6b656e206f7760408201526e1b995c881bdc88185c1c1c9bdd9959608a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b808201808211156107c4576107c4612f03565b60008251612ff9818460208701612982565b9190910192915050565b60006001820161301557613015612f03565b5060010190565b601f82111561099857600081815260208120601f850160051c810160208610156130435750805b601f850160051c820191505b818110156130625782815560010161304f565b505050505050565b81516001600160401b0381111561308357613083612b5e565b613097816130918454612e7c565b8461301c565b602080601f8311600181146130cc57600084156130b45750858301515b600019600386901b1c1916600185901b178555613062565b600085815260208120601f198616915b828110156130fb578886015182559484019460019091019084016130dc565b50858210156131195787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526028908201527f506879676974616c3a20526f79616c74792063616e2774206265206d6f7265206040820152677468616e2031302560c01b606082015260800190565b8281526040602082015260006117fb60408301846129a6565b6001600160a01b0384168152606081016131a76020830185612b14565b826040830152949350505050565b6001600160401b038181168382160190808211156131d5576131d5612f03565b5092915050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906132a6908301846129a6565b9695505050505050565b6000602082840312156132c257600080fd5b81516119d38161294f565b818103818111156107c4576107c4612f03565b634e487b7160e01b600052603160045260246000fdfea26469706673582212203acdd53ca2aefa31b0442bf948da7a8e5c63ce6b5af4755518808a836a5cb90064736f6c63430008110033"; type PhygitalConstructorParams = | [signer?: Signer] @@ -957,14 +997,14 @@ export class Phygital__factory extends ContractFactory { name: string, symbol: string, tradeHubAddress: string, - flowContract: string, + accessControlAddress: string, overrides?: Overrides & { from?: string | Promise } ): Promise { return super.deploy( name, symbol, tradeHubAddress, - flowContract, + accessControlAddress, overrides || {} ) as Promise; } @@ -972,14 +1012,14 @@ export class Phygital__factory extends ContractFactory { name: string, symbol: string, tradeHubAddress: string, - flowContract: string, + accessControlAddress: string, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { return super.getDeployTransaction( name, symbol, tradeHubAddress, - flowContract, + accessControlAddress, overrides || {} ); } diff --git a/typechain-types/factories/SignatureSeries__factory.ts b/typechain-types/factories/SignatureSeries__factory.ts index 98aa631..2dc5d7b 100644 --- a/typechain-types/factories/SignatureSeries__factory.ts +++ b/typechain-types/factories/SignatureSeries__factory.ts @@ -1013,7 +1013,7 @@ const _abi = [ ]; const _bytecode = - "0x6101406040526010805460ff191660011790553480156200001f57600080fd5b5060405162003ce338038062003ce3833981016040819052620000429162000244565b848488886000620000548382620003bb565b506001620000638282620003bb565b5050825160208085019190912083518483012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c0019052805194019390932091935091906080523060c052610120525050601580546001600160a01b038581166001600160a01b03199283168117909355600c8054918816918316919091179055600d8054909116909117905550600e9050620001428682620003bb565b50600f620001518582620003bb565b505050601155506200048792505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200018a57600080fd5b81516001600160401b0380821115620001a757620001a762000162565b604051601f8301601f19908116603f01168101908282118183101715620001d257620001d262000162565b81604052838152602092508683858801011115620001ef57600080fd5b600091505b83821015620002135785820183015181830184015290820190620001f4565b600093810190920192909252949350505050565b80516001600160a01b03811681146200023f57600080fd5b919050565b600080600080600080600060e0888a0312156200026057600080fd5b87516001600160401b03808211156200027857600080fd5b620002868b838c0162000178565b985060208a01519150808211156200029d57600080fd5b620002ab8b838c0162000178565b975060408a0151915080821115620002c257600080fd5b620002d08b838c0162000178565b965060608a0151915080821115620002e757600080fd5b50620002f68a828b0162000178565b945050608088015192506200030e60a0890162000227565b91506200031e60c0890162000227565b905092959891949750929550565b600181811c908216806200034157607f821691505b6020821081036200036257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003b657600081815260208120601f850160051c81016020861015620003915750805b601f850160051c820191505b81811015620003b2578281556001016200039d565b5050505b505050565b81516001600160401b03811115620003d757620003d762000162565b620003ef81620003e884546200032c565b8462000368565b602080601f8311600181146200042757600084156200040e5750858301515b600019600386901b1c1916600185901b178555620003b2565b600085815260208120601f198616915b82811015620004585788860151825594840194600190910190840162000437565b5085821015620004775787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e051610100516101205161380c620004d760003960006124e3015260006125320152600061250d0152600061246601526000612490015260006124ba015261380c6000f3fe60806040526004361061021a5760003560e01c806370a0823111610123578063a4157296116100ab578063c87b56dd1161006f578063c87b56dd146106d6578063dae48e6b146106f6578063e030565e14610709578063e3faad9414610729578063e985e9c51461073e57600080fd5b8063a415729614610641578063a4b1105214610656578063b88d4fde14610676578063ba91caae14610696578063c2f1f14a146106b657600080fd5b80638c275eec116100f25780638c275eec1461051d5780638fc88c481461053d57806395d89b411461057a5780639874cd971461058f578063a22cb4651461062157600080fd5b806370a08231146104aa578063783a112b146104ca5780637d9a7a4c146104dd57806383c6f9a9146104fd57600080fd5b80632f745c59116101a65780634eeca076116101755780634eeca076146104085780634f6ccce71461041e57806354fd4d501461043e5780636352211e1461046a578063655bc8db1461048a57600080fd5b80632f745c59146103885780633a61d52c146103a857806342842e0e146103c8578063474c1520146103e857600080fd5b80630aa7c854116101ed5780630aa7c854146102d05780630d39fc81146102f057806318160ddd1461031457806323b872dd146103295780632a55205a1461034957600080fd5b806301ffc9a71461021f57806306fdde0314610254578063081812fc14610276578063095ea7b3146102ae575b600080fd5b34801561022b57600080fd5b5061023f61023a366004612da9565b610787565b60405190151581526020015b60405180910390f35b34801561026057600080fd5b506102696107d8565b60405161024b9190612e0c565b34801561028257600080fd5b50610296610291366004612e1f565b61086a565b6040516001600160a01b03909116815260200161024b565b3480156102ba57600080fd5b506102ce6102c9366004612e4d565b610891565b005b3480156102dc57600080fd5b50600d54610296906001600160a01b031681565b3480156102fc57600080fd5b5061030660115481565b60405190815260200161024b565b34801561032057600080fd5b50600854610306565b34801561033557600080fd5b506102ce610344366004612e79565b6109ab565b34801561035557600080fd5b50610369610364366004612eba565b6109dd565b604080516001600160a01b03909316835260208301919091520161024b565b34801561039457600080fd5b506103066103a3366004612e4d565b610a8b565b3480156103b457600080fd5b506102966103c3366004612ef4565b610b21565b3480156103d457600080fd5b506102ce6103e3366004612e79565b610bff565b3480156103f457600080fd5b506102ce610403366004612e1f565b610c1a565b34801561041457600080fd5b5061030660125481565b34801561042a57600080fd5b50610306610439366004612e1f565b610c9a565b34801561044a57600080fd5b506010546104589060ff1681565b60405160ff909116815260200161024b565b34801561047657600080fd5b50610296610485366004612e1f565b610d2d565b34801561049657600080fd5b506102ce6104a5366004612f36565b610d8d565b3480156104b657600080fd5b506103066104c5366004612f5d565b610e2f565b6102ce6104d8366004612eba565b610eb5565b3480156104e957600080fd5b506102ce6104f8366004612e1f565b611236565b34801561050957600080fd5b5061030661051836600461303c565b6112d1565b34801561052957600080fd5b50610306610538366004613089565b61146f565b34801561054957600080fd5b50610306610558366004612e1f565b600090815260136020526040902054600160a81b90046001600160401b031690565b34801561058657600080fd5b506102696115cc565b34801561059b57600080fd5b506105e96105aa366004612e1f565b6013602052600090815260409020805460019091015460ff82169161010081046001600160a01b031691600160a81b9091046001600160401b03169084565b6040805194151585526001600160a01b0390931660208501526001600160401b0390911691830191909152606082015260800161024b565b34801561062d57600080fd5b506102ce61063c3660046130e8565b6115db565b34801561064d57600080fd5b506102696115ea565b34801561066257600080fd5b50600c54610296906001600160a01b031681565b34801561068257600080fd5b506102ce610691366004613121565b611678565b3480156106a257600080fd5b506103066106b1366004612eba565b6116b0565b3480156106c257600080fd5b506102966106d1366004612e1f565b6116d4565b3480156106e257600080fd5b506102696106f1366004612e1f565b611728565b6103066107043660046131a0565b6117ee565b34801561071557600080fd5b506102ce6107243660046131d5565b611aa0565b34801561073557600080fd5b50610269611c20565b34801561074a57600080fd5b5061023f610759366004613223565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6000636ad56fd360e11b6001600160e01b03198316016107a957506001919050565b6314bdb52960e21b6001600160e01b03198316016107c957506001919050565b6107d282611c2d565b92915050565b6060600080546107e790613251565b80601f016020809104026020016040519081016040528092919081815260200182805461081390613251565b80156108605780601f1061083557610100808354040283529160200191610860565b820191906000526020600020905b81548152906001019060200180831161084357829003601f168201915b5050505050905090565b600061087582611c52565b506000908152600460205260409020546001600160a01b031690565b600061089c82610d2d565b9050806001600160a01b0316836001600160a01b03160361090e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061092a575061092a8133610759565b61099c5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610905565b6109a68383611ca2565b505050565b6109b6335b82611d10565b6109d25760405162461bcd60e51b815260040161090590613285565b6109a6838383611d8e565b6000828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a52575060408051808201909152600a546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a71906001600160601b0316876132e8565b610a7b91906132ff565b91519350909150505b9250929050565b6000610a9683610e2f565b8210610af85760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610905565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600080610ba87f6a50cd13df4d49c839384eb15944b5713af5a276ddb78e79557d1798dbca09fa8435610b576020870187613321565b604051610b65929190613367565b604051908190038120610b8d9392916020019283526020830191909152604082015260600190565b60405160208183030381529060405280519060200120611eff565b90506000610bf782610bbd6040870187613321565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f4d92505050565b949350505050565b6109a683838360405180602001604052806000815250611678565b610c23336109b0565b610c3f5760405162461bcd60e51b815260040161090590613377565b610c4881611f71565b807f70dfc397541721d0da674bb15688bca9a5fc5dfcf822c7e879e29197a6f73a29336040516001600160a01b03909116815260200160405180910390a26000908152600b6020526040812055565b50565b6000610ca560085490565b8210610d085760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610905565b60088281548110610d1b57610d1b6133cd565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806107d25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610905565b610d98335b84611d10565b610db45760405162461bcd60e51b815260040161090590613377565b6000838152601360205260409020805460ff1916831515178155600101819055336001600160a01b03167fa9dcc06084f66afbdc1841a28e84400fcbf607131220fdcf404c8502f3c03203848484604051610e22939291909283529015156020830152604082015260600190565b60405180910390a2505050565b60006001600160a01b038216610e995760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610905565b506001600160a01b031660009081526003602052604090205490565b610ebe82612014565b610f155760405162461bcd60e51b815260206004820152602260248201527f5369676e61747572655365726965733a20496e76616c69646520546f6b656e20604482015261125960f21b6064820152608401610905565b60008281526013602052604090205460ff16610f835760405162461bcd60e51b815260206004820152602760248201527f5369676e61747572655365726965733a204e6f7420617661696c61626c6520666044820152661bdc881c995b9d60ca1b6064820152608401610905565b6000610f8e836116d4565b6001600160a01b031614610ff45760405162461bcd60e51b815260206004820152602760248201527f5369676e61747572655365726965733a204e465420416c7265616479205375626044820152661cd8dc9a58995960ca1b6064820152608401610905565b6000811161105c5760405162461bcd60e51b815260206004820152602f60248201527f5369676e61747572655365726965733a2054696d652063616e2774206265206c60448201526e32b9b9903a3430b71018903437bab960891b6064820152608401610905565b6110e08111156110c85760405162461bcd60e51b815260206004820152603160248201527f5369676e61747572655365726965733a2054696d652063616e2774206265206d6044820152706f7265207468616e2036206d6f6e74687360781b6064820152608401610905565b60006110d483836116b0565b9050803410156111325760405162461bcd60e51b815260206004820152602360248201527f5369676e61747572655365726965733a20496e73756666696369656e742046756044820152626e647360e81b6064820152608401610905565b61113b83610d2d565b6001600160a01b03166108fc349081150290604051600060405180830381858888f19350505050158015611173573d6000803e3d6000fd5b5060008381526013602052604090208054610100600160a81b03191661010033021781556111a383610e106132e8565b6111ad90426133e3565b81546001600160401b0391909116600160a81b0267ffffffffffffffff60a81b199091161781556111db3390565b8154604051600160a81b9091046001600160401b031681526001600160a01b03919091169085907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe906020015b60405180910390a350505050565b6015546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561128c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b091906133f6565b6112cc5760405162461bcd60e51b815260040161090590613413565b601155565b6015546000906001600160a01b031663efd46065336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561132a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134e91906133f6565b6113aa5760405162461bcd60e51b815260206004820152602760248201527f5369676e61747572655365726965733a2055736572206973206e6f74206175746044820152661a1bdc9a5e995960ca1b6064820152608401610905565b601280549060006113ba8361345b565b90915550506012546113cd335b82612031565b6113d7818561204b565b6103e8836001600160601b031611156114025760405162461bcd60e51b815260040161090590613474565b61140e81335b85612088565b600c54611425906001600160a01b031660016115db565b336001600160a01b03167f07ac23775381c7e58d18cef592a12cb5ea8576f2034c691e2500aba9b51f9d7f82866040516114609291906134c3565b60405180910390a29392505050565b6015546000906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156114c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ec91906133f6565b6115085760405162461bcd60e51b815260040161090590613413565b601280549060006115188361345b565b909155505060125461152a8582612031565b611534818561204b565b6103e8836001600160601b0316111561155f5760405162461bcd60e51b815260040161090590613474565b61156a818685612088565b600c54611581906001600160a01b031660016115db565b846001600160a01b03167f07ac23775381c7e58d18cef592a12cb5ea8576f2034c691e2500aba9b51f9d7f82866040516115bc9291906134c3565b60405180910390a2949350505050565b6060600180546107e790613251565b6115e6338383612196565b5050565b600f80546115f790613251565b80601f016020809104026020016040519081016040528092919081815260200182805461162390613251565b80156116705780601f1061164557610100808354040283529160200191611670565b820191906000526020600020905b81548152906001019060200180831161165357829003601f168201915b505050505081565b6116823383611d10565b61169e5760405162461bcd60e51b815260040161090590613285565b6116aa84848484612264565b50505050565b6000828152601360205260408120600101546116cd9083906132e8565b9392505050565b6000818152601360205260408120544290600160a81b90046001600160401b03161061171b575060009081526013602052604090205461010090046001600160a01b031690565b506000919050565b919050565b606061173382612014565b61174f5760405162461bcd60e51b8152600401610905906134dc565b6000828152601460205260408120805461176890613251565b80601f016020809104026020016040519081016040528092919081815260200182805461179490613251565b80156117e15780601f106117b6576101008083540402835291602001916117e1565b820191906000526020600020905b8154815290600101906020018083116117c457829003601f168201915b5093979650505050505050565b6015546000906001600160a01b0316636d70f7ae61180b85610b21565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561184f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187391906133f6565b6118cb5760405162461bcd60e51b815260206004820152602360248201527f5369676e61747572655365726965733a20496e76616c6964205369676e61747560448201526272652160e81b6064820152608401610905565b6011541561191d57823534101561191d5760405162461bcd60e51b81526020600482015260166024820152752737ba1022b737bab3b41032ba3432b91039b2b73a1760511b6044820152606401610905565b6012805490600061192d8361345b565b909155505060125461193e336113c7565b6119898161194f6020870187613321565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061204b92505050565b6103e8836001600160601b031611156119b45760405162461bcd60e51b815260040161090590613474565b6119be8133611408565b60155460408051633955348d60e21b815290516000926001600160a01b03169163e554d2349160048083019260209291908290030181865afa158015611a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2c919061351f565b9050611a3a33828434612297565b600c54611a51906001600160a01b031660016115db565b337f07ac23775381c7e58d18cef592a12cb5ea8576f2034c691e2500aba9b51f9d7f83611a816020890189613321565b604051611a909392919061353c565b60405180910390a2509392505050565b611aa933610d92565b611b0a5760405162461bcd60e51b815260206004820152602c60248201527f5369676e61747572655365726965733a204e6f7420746f6b656e206f776e657260448201526b0813dc88185c1c1c9bdd995960a21b6064820152608401610905565b6000611b15846116d4565b6001600160a01b031614611b7f5760405162461bcd60e51b815260206004820152602b60248201527f5369676e61747572655365726965733a206974656d20697320616c726561647960448201526a081cdd589cd8dc9a58995960aa1b6064820152608401610905565b60008381526013602052604090208054610100600160a81b0319166101006001600160a01b03851602178155611bb54283613572565b815467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831681029190911780845560405191900490911681526001600160a01b0384169085907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe90602001611228565b600e80546115f790613251565b60006001600160e01b0319821663152a902d60e11b14806107d257506107d282612393565b611c5b81612014565b610c975760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610905565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611cd782610d2d565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611d1c83610d2d565b9050806001600160a01b0316846001600160a01b03161480611d6357506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610bf75750836001600160a01b0316611d7c8461086a565b6001600160a01b031614949350505050565b826001600160a01b0316611da182610d2d565b6001600160a01b031614611dc75760405162461bcd60e51b815260040161090590613599565b6001600160a01b038216611e295760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610905565b611e3683838360016123b8565b826001600160a01b0316611e4982610d2d565b6001600160a01b031614611e6f5760405162461bcd60e51b815260040161090590613599565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006107d2611f0c612459565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611f5c8585612580565b91509150611f69816125c2565b509392505050565b6000611f7c82610d2d565b9050611f8c8160008460016123b8565b611f9582610d2d565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000908152600260205260409020546001600160a01b0316151590565b6115e682826040518060200160405280600081525061270c565b61205482612014565b6120705760405162461bcd60e51b8152600401610905906134dc565b60008281526014602052604090206109a6828261362c565b6127106001600160601b03821611156120f65760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401610905565b6001600160a01b03821661214c5760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610905565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600b90529190942093519051909116600160a01b029116179055565b816001600160a01b0316836001600160a01b0316036121f75760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610905565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61226f848484611d8e565b61227b8484848461273f565b6116aa5760405162461bcd60e51b8152600401610905906136eb565b6000836001600160a01b03168260405160006040518083038185875af1925050503d80600081146122e4576040519150601f19603f3d011682016040523d82523d6000602084013e6122e9565b606091505b505090508061233a5760405162461bcd60e51b815260206004820181905260248201527f5369676e61747572655365726965733a205472616e73666572206661696c65646044820152606401610905565b604080516001600160a01b03808816825286166020820152908101849052606081018390527faeadc2c673108f922a1042ef404b73ae1af992c9ae54249a4a7d13ef21ef2c189060800160405180910390a15050505050565b60006001600160e01b0319821663780e9d6360e01b14806107d257506107d282612840565b6123c484848484612890565b826001600160a01b0316846001600160a01b031614158015612401575060008281526013602052604090205461010090046001600160a01b031615155b156116aa57600082815260136020908152604080832080546001600160e81b03191681556001018390555182815284917f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe9101611228565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156124b257507f000000000000000000000000000000000000000000000000000000000000000046145b156124dc57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008082516041036125b65760208301516040840151606085015160001a6125aa878285856129c4565b94509450505050610a84565b50600090506002610a84565b60008160048111156125d6576125d661373d565b036125de5750565b60018160048111156125f2576125f261373d565b0361263f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610905565b60028160048111156126535761265361373d565b036126a05760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610905565b60038160048111156126b4576126b461373d565b03610c975760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610905565b6127168383612a88565b612723600084848461273f565b6109a65760405162461bcd60e51b8152600401610905906136eb565b60006001600160a01b0384163b1561283557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612783903390899088908890600401613753565b6020604051808303816000875af19250505080156127be575060408051601f3d908101601f191682019092526127bb91810190613790565b60015b61281b573d8080156127ec576040519150601f19603f3d011682016040523d82523d6000602084013e6127f1565b606091505b5080516000036128135760405162461bcd60e51b8152600401610905906136eb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610bf7565b506001949350505050565b60006001600160e01b031982166380ac58cd60e01b148061287157506001600160e01b03198216635b5e139f60e01b145b806107d257506301ffc9a760e01b6001600160e01b03198316146107d2565b60018111156128ff5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610905565b816001600160a01b03851661295b5761295681600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61297e565b836001600160a01b0316856001600160a01b03161461297e5761297e8582612c03565b6001600160a01b03841661299a5761299581612ca0565b6129bd565b846001600160a01b0316846001600160a01b0316146129bd576129bd8482612d4f565b5050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156129fb5750600090506003612a7f565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612a4f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a7857600060019250925050612a7f565b9150600090505b94509492505050565b6001600160a01b038216612ade5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610905565b612ae781612014565b15612b345760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610905565b612b426000838360016123b8565b612b4b81612014565b15612b985760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610905565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612c1084610e2f565b612c1a91906137ad565b600083815260076020526040902054909150808214612c6d576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612cb2906001906137ad565b60008381526009602052604081205460088054939450909284908110612cda57612cda6133cd565b906000526020600020015490508060088381548110612cfb57612cfb6133cd565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612d3357612d336137c0565b6001900381819060005260206000200160009055905550505050565b6000612d5a83610e2f565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b031981168114610c9757600080fd5b600060208284031215612dbb57600080fd5b81356116cd81612d93565b6000815180845260005b81811015612dec57602081850181015186830182015201612dd0565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006116cd6020830184612dc6565b600060208284031215612e3157600080fd5b5035919050565b6001600160a01b0381168114610c9757600080fd5b60008060408385031215612e6057600080fd5b8235612e6b81612e38565b946020939093013593505050565b600080600060608486031215612e8e57600080fd5b8335612e9981612e38565b92506020840135612ea981612e38565b929592945050506040919091013590565b60008060408385031215612ecd57600080fd5b50508035926020909101359150565b600060608284031215612eee57600080fd5b50919050565b600060208284031215612f0657600080fd5b81356001600160401b03811115612f1c57600080fd5b610bf784828501612edc565b8015158114610c9757600080fd5b600080600060608486031215612f4b57600080fd5b833592506020840135612ea981612f28565b600060208284031215612f6f57600080fd5b81356116cd81612e38565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115612faa57612faa612f7a565b604051601f8501601f19908116603f01168101908282118183101715612fd257612fd2612f7a565b81604052809350858152868686011115612feb57600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261301657600080fd5b6116cd83833560208501612f90565b80356001600160601b038116811461172357600080fd5b6000806040838503121561304f57600080fd5b82356001600160401b0381111561306557600080fd5b61307185828601613005565b92505061308060208401613025565b90509250929050565b60008060006060848603121561309e57600080fd5b83356130a981612e38565b925060208401356001600160401b038111156130c457600080fd5b6130d086828701613005565b9250506130df60408501613025565b90509250925092565b600080604083850312156130fb57600080fd5b823561310681612e38565b9150602083013561311681612f28565b809150509250929050565b6000806000806080858703121561313757600080fd5b843561314281612e38565b9350602085013561315281612e38565b92506040850135915060608501356001600160401b0381111561317457600080fd5b8501601f8101871361318557600080fd5b61319487823560208401612f90565b91505092959194509250565b600080604083850312156131b357600080fd5b82356001600160401b038111156131c957600080fd5b61307185828601612edc565b6000806000606084860312156131ea57600080fd5b8335925060208401356131fc81612e38565b915060408401356001600160401b038116811461321857600080fd5b809150509250925092565b6000806040838503121561323657600080fd5b823561324181612e38565b9150602083013561311681612e38565b600181811c9082168061326557607f821691505b602082108103612eee57634e487b7160e01b600052602260045260246000fd5b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107d2576107d26132d2565b60008261331c57634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e1984360301811261333857600080fd5b8301803591506001600160401b0382111561335257600080fd5b602001915036819003821315610a8457600080fd5b8183823760009101908152919050565b60208082526036908201527f5369676e61747572655365726965733a2043616c6c6572206973206e6f7420746040820152751bdad95b881bdddb995c881bdc88185c1c1c9bdd995960521b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b808201808211156107d2576107d26132d2565b60006020828403121561340857600080fd5b81516116cd81612f28565b60208082526028908201527f5369676e61747572655365726965733a2055736572206973206e6f742061757460408201526703437b934bd32b2160c51b606082015260800190565b60006001820161346d5761346d6132d2565b5060010190565b6020808252602f908201527f5369676e61747572655365726965733a20526f79616c74792063616e2774206260408201526e65206d6f7265207468616e2031302560881b606082015260800190565b828152604060208201526000610bf76040830184612dc6565b60208082526023908201527f5369676e61747572655365726965733a204e6f6e2d4578697374656e742041736040820152621cd95d60ea1b606082015260800190565b60006020828403121561353157600080fd5b81516116cd81612e38565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160401b03818116838216019080821115613592576135926132d2565b5092915050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b601f8211156109a657600081815260208120601f850160051c810160208610156136055750805b601f850160051c820191505b8181101561362457828155600101613611565b505050505050565b81516001600160401b0381111561364557613645612f7a565b613659816136538454613251565b846135de565b602080601f83116001811461368e57600084156136765750858301515b600019600386901b1c1916600185901b178555613624565b600085815260208120601f198616915b828110156136bd5788860151825594840194600190910190840161369e565b50858210156136db5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061378690830184612dc6565b9695505050505050565b6000602082840312156137a257600080fd5b81516116cd81612d93565b818103818111156107d2576107d26132d2565b634e487b7160e01b600052603160045260246000fdfea264697066735822122082ac8a17dc7123cc0e7c1577252054602aa5f80106998bef47d346411289fdef64736f6c63430008110033"; + "0x6101406040523480156200001257600080fd5b5060405162003cd138038062003cd1833981016040819052620000359162000237565b848488886000620000478382620003ae565b506001620000568282620003ae565b5050825160208085019190912083518483012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c0019052805194019390932091935091906080523060c052610120525050601480546001600160a01b038581166001600160a01b03199283168117909355600c8054918816918316919091179055600d8054909116909117905550600e9050620001358682620003ae565b50600f620001448582620003ae565b505050601055506200047a92505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200017d57600080fd5b81516001600160401b03808211156200019a576200019a62000155565b604051601f8301601f19908116603f01168101908282118183101715620001c557620001c562000155565b81604052838152602092508683858801011115620001e257600080fd5b600091505b83821015620002065785820183015181830184015290820190620001e7565b600093810190920192909252949350505050565b80516001600160a01b03811681146200023257600080fd5b919050565b600080600080600080600060e0888a0312156200025357600080fd5b87516001600160401b03808211156200026b57600080fd5b620002798b838c016200016b565b985060208a01519150808211156200029057600080fd5b6200029e8b838c016200016b565b975060408a0151915080821115620002b557600080fd5b620002c38b838c016200016b565b965060608a0151915080821115620002da57600080fd5b50620002e98a828b016200016b565b945050608088015192506200030160a089016200021a565b91506200031160c089016200021a565b905092959891949750929550565b600181811c908216806200033457607f821691505b6020821081036200035557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003a957600081815260208120601f850160051c81016020861015620003845750805b601f850160051c820191505b81811015620003a55782815560010162000390565b5050505b505050565b81516001600160401b03811115620003ca57620003ca62000155565b620003e281620003db84546200031f565b846200035b565b602080601f8311600181146200041a5760008415620004015750858301515b600019600386901b1c1916600185901b178555620003a5565b600085815260208120601f198616915b828110156200044b578886015182559484019460019091019084016200042a565b50858210156200046a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161012051613807620004ca60003960006124de0152600061252d01526000612508015260006124610152600061248b015260006124b501526138076000f3fe60806040526004361061021a5760003560e01c806370a0823111610123578063a4157296116100ab578063c87b56dd1161006f578063c87b56dd146106d1578063dae48e6b146106f1578063e030565e14610704578063e3faad9414610724578063e985e9c51461073957600080fd5b8063a41572961461063c578063a4b1105214610651578063b88d4fde14610671578063ba91caae14610691578063c2f1f14a146106b157600080fd5b80638c275eec116100f25780638c275eec146105185780638fc88c481461053857806395d89b41146105755780639874cd971461058a578063a22cb4651461061c57600080fd5b806370a08231146104a5578063783a112b146104c55780637d9a7a4c146104d857806383c6f9a9146104f857600080fd5b80632f745c59116101a65780634eeca076116101755780634eeca076146104085780634f6ccce71461041e57806354fd4d501461043e5780636352211e14610465578063655bc8db1461048557600080fd5b80632f745c59146103885780633a61d52c146103a857806342842e0e146103c8578063474c1520146103e857600080fd5b80630aa7c854116101ed5780630aa7c854146102d05780630d39fc81146102f057806318160ddd1461031457806323b872dd146103295780632a55205a1461034957600080fd5b806301ffc9a71461021f57806306fdde0314610254578063081812fc14610276578063095ea7b3146102ae575b600080fd5b34801561022b57600080fd5b5061023f61023a366004612da4565b610782565b60405190151581526020015b60405180910390f35b34801561026057600080fd5b506102696107d3565b60405161024b9190612e07565b34801561028257600080fd5b50610296610291366004612e1a565b610865565b6040516001600160a01b03909116815260200161024b565b3480156102ba57600080fd5b506102ce6102c9366004612e48565b61088c565b005b3480156102dc57600080fd5b50600d54610296906001600160a01b031681565b3480156102fc57600080fd5b5061030660105481565b60405190815260200161024b565b34801561032057600080fd5b50600854610306565b34801561033557600080fd5b506102ce610344366004612e74565b6109a6565b34801561035557600080fd5b50610369610364366004612eb5565b6109d8565b604080516001600160a01b03909316835260208301919091520161024b565b34801561039457600080fd5b506103066103a3366004612e48565b610a86565b3480156103b457600080fd5b506102966103c3366004612eef565b610b1c565b3480156103d457600080fd5b506102ce6103e3366004612e74565b610bfa565b3480156103f457600080fd5b506102ce610403366004612e1a565b610c15565b34801561041457600080fd5b5061030660115481565b34801561042a57600080fd5b50610306610439366004612e1a565b610c95565b34801561044a57600080fd5b50610453600181565b60405160ff909116815260200161024b565b34801561047157600080fd5b50610296610480366004612e1a565b610d28565b34801561049157600080fd5b506102ce6104a0366004612f31565b610d88565b3480156104b157600080fd5b506103066104c0366004612f58565b610e2a565b6102ce6104d3366004612eb5565b610eb0565b3480156104e457600080fd5b506102ce6104f3366004612e1a565b611231565b34801561050457600080fd5b50610306610513366004613037565b6112cc565b34801561052457600080fd5b50610306610533366004613084565b61146a565b34801561054457600080fd5b50610306610553366004612e1a565b600090815260126020526040902054600160a81b90046001600160401b031690565b34801561058157600080fd5b506102696115c7565b34801561059657600080fd5b506105e46105a5366004612e1a565b6012602052600090815260409020805460019091015460ff82169161010081046001600160a01b031691600160a81b9091046001600160401b03169084565b6040805194151585526001600160a01b0390931660208501526001600160401b0390911691830191909152606082015260800161024b565b34801561062857600080fd5b506102ce6106373660046130e3565b6115d6565b34801561064857600080fd5b506102696115e5565b34801561065d57600080fd5b50600c54610296906001600160a01b031681565b34801561067d57600080fd5b506102ce61068c36600461311c565b611673565b34801561069d57600080fd5b506103066106ac366004612eb5565b6116ab565b3480156106bd57600080fd5b506102966106cc366004612e1a565b6116cf565b3480156106dd57600080fd5b506102696106ec366004612e1a565b611723565b6103066106ff36600461319b565b6117e9565b34801561071057600080fd5b506102ce61071f3660046131d0565b611a9b565b34801561073057600080fd5b50610269611c1b565b34801561074557600080fd5b5061023f61075436600461321e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6000636ad56fd360e11b6001600160e01b03198316016107a457506001919050565b6314bdb52960e21b6001600160e01b03198316016107c457506001919050565b6107cd82611c28565b92915050565b6060600080546107e29061324c565b80601f016020809104026020016040519081016040528092919081815260200182805461080e9061324c565b801561085b5780601f106108305761010080835404028352916020019161085b565b820191906000526020600020905b81548152906001019060200180831161083e57829003601f168201915b5050505050905090565b600061087082611c4d565b506000908152600460205260409020546001600160a01b031690565b600061089782610d28565b9050806001600160a01b0316836001600160a01b0316036109095760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061092557506109258133610754565b6109975760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610900565b6109a18383611c9d565b505050565b6109b1335b82611d0b565b6109cd5760405162461bcd60e51b815260040161090090613280565b6109a1838383611d89565b6000828152600b602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a4d575060408051808201909152600a546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a6c906001600160601b0316876132e3565b610a7691906132fa565b91519350909150505b9250929050565b6000610a9183610e2a565b8210610af35760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610900565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600080610ba37f6a50cd13df4d49c839384eb15944b5713af5a276ddb78e79557d1798dbca09fa8435610b52602087018761331c565b604051610b60929190613362565b604051908190038120610b889392916020019283526020830191909152604082015260600190565b60405160208183030381529060405280519060200120611efa565b90506000610bf282610bb8604087018761331c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f4892505050565b949350505050565b6109a183838360405180602001604052806000815250611673565b610c1e336109ab565b610c3a5760405162461bcd60e51b815260040161090090613372565b610c4381611f6c565b807f70dfc397541721d0da674bb15688bca9a5fc5dfcf822c7e879e29197a6f73a29336040516001600160a01b03909116815260200160405180910390a26000908152600b6020526040812055565b50565b6000610ca060085490565b8210610d035760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610900565b60088281548110610d1657610d166133c8565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806107cd5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610900565b610d93335b84611d0b565b610daf5760405162461bcd60e51b815260040161090090613372565b6000838152601260205260409020805460ff1916831515178155600101819055336001600160a01b03167fa9dcc06084f66afbdc1841a28e84400fcbf607131220fdcf404c8502f3c03203848484604051610e1d939291909283529015156020830152604082015260600190565b60405180910390a2505050565b60006001600160a01b038216610e945760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610900565b506001600160a01b031660009081526003602052604090205490565b610eb98261200f565b610f105760405162461bcd60e51b815260206004820152602260248201527f5369676e61747572655365726965733a20496e76616c69646520546f6b656e20604482015261125960f21b6064820152608401610900565b60008281526012602052604090205460ff16610f7e5760405162461bcd60e51b815260206004820152602760248201527f5369676e61747572655365726965733a204e6f7420617661696c61626c6520666044820152661bdc881c995b9d60ca1b6064820152608401610900565b6000610f89836116cf565b6001600160a01b031614610fef5760405162461bcd60e51b815260206004820152602760248201527f5369676e61747572655365726965733a204e465420416c7265616479205375626044820152661cd8dc9a58995960ca1b6064820152608401610900565b600081116110575760405162461bcd60e51b815260206004820152602f60248201527f5369676e61747572655365726965733a2054696d652063616e2774206265206c60448201526e32b9b9903a3430b71018903437bab960891b6064820152608401610900565b6110e08111156110c35760405162461bcd60e51b815260206004820152603160248201527f5369676e61747572655365726965733a2054696d652063616e2774206265206d6044820152706f7265207468616e2036206d6f6e74687360781b6064820152608401610900565b60006110cf83836116ab565b90508034101561112d5760405162461bcd60e51b815260206004820152602360248201527f5369676e61747572655365726965733a20496e73756666696369656e742046756044820152626e647360e81b6064820152608401610900565b61113683610d28565b6001600160a01b03166108fc349081150290604051600060405180830381858888f1935050505015801561116e573d6000803e3d6000fd5b5060008381526012602052604090208054610100600160a81b031916610100330217815561119e83610e106132e3565b6111a890426133de565b81546001600160401b0391909116600160a81b0267ffffffffffffffff60a81b199091161781556111d63390565b8154604051600160a81b9091046001600160401b031681526001600160a01b03919091169085907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe906020015b60405180910390a350505050565b6014546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ab91906133f1565b6112c75760405162461bcd60e51b81526004016109009061340e565b601055565b6014546000906001600160a01b031663efd46065336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611325573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134991906133f1565b6113a55760405162461bcd60e51b815260206004820152602760248201527f5369676e61747572655365726965733a2055736572206973206e6f74206175746044820152661a1bdc9a5e995960ca1b6064820152608401610900565b601180549060006113b583613456565b90915550506011546113c8335b8261202c565b6113d28185612046565b6103e8836001600160601b031611156113fd5760405162461bcd60e51b81526004016109009061346f565b61140981335b85612083565b600c54611420906001600160a01b031660016115d6565b336001600160a01b03167f07ac23775381c7e58d18cef592a12cb5ea8576f2034c691e2500aba9b51f9d7f828660405161145b9291906134be565b60405180910390a29392505050565b6014546000906001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156114c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e791906133f1565b6115035760405162461bcd60e51b81526004016109009061340e565b6011805490600061151383613456565b9091555050601154611525858261202c565b61152f8185612046565b6103e8836001600160601b0316111561155a5760405162461bcd60e51b81526004016109009061346f565b611565818685612083565b600c5461157c906001600160a01b031660016115d6565b846001600160a01b03167f07ac23775381c7e58d18cef592a12cb5ea8576f2034c691e2500aba9b51f9d7f82866040516115b79291906134be565b60405180910390a2949350505050565b6060600180546107e29061324c565b6115e1338383612191565b5050565b600f80546115f29061324c565b80601f016020809104026020016040519081016040528092919081815260200182805461161e9061324c565b801561166b5780601f106116405761010080835404028352916020019161166b565b820191906000526020600020905b81548152906001019060200180831161164e57829003601f168201915b505050505081565b61167d3383611d0b565b6116995760405162461bcd60e51b815260040161090090613280565b6116a58484848461225f565b50505050565b6000828152601260205260408120600101546116c89083906132e3565b9392505050565b6000818152601260205260408120544290600160a81b90046001600160401b031610611716575060009081526012602052604090205461010090046001600160a01b031690565b506000919050565b919050565b606061172e8261200f565b61174a5760405162461bcd60e51b8152600401610900906134d7565b600082815260136020526040812080546117639061324c565b80601f016020809104026020016040519081016040528092919081815260200182805461178f9061324c565b80156117dc5780601f106117b1576101008083540402835291602001916117dc565b820191906000526020600020905b8154815290600101906020018083116117bf57829003601f168201915b5093979650505050505050565b6014546000906001600160a01b0316636d70f7ae61180685610b1c565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561184a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186e91906133f1565b6118c65760405162461bcd60e51b815260206004820152602360248201527f5369676e61747572655365726965733a20496e76616c6964205369676e61747560448201526272652160e81b6064820152608401610900565b601054156119185782353410156119185760405162461bcd60e51b81526020600482015260166024820152752737ba1022b737bab3b41032ba3432b91039b2b73a1760511b6044820152606401610900565b6011805490600061192883613456565b9091555050601154611939336113c2565b6119848161194a602087018761331c565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061204692505050565b6103e8836001600160601b031611156119af5760405162461bcd60e51b81526004016109009061346f565b6119b98133611403565b60145460408051633955348d60e21b815290516000926001600160a01b03169163e554d2349160048083019260209291908290030181865afa158015611a03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a27919061351a565b9050611a3533828434612292565b600c54611a4c906001600160a01b031660016115d6565b337f07ac23775381c7e58d18cef592a12cb5ea8576f2034c691e2500aba9b51f9d7f83611a7c602089018961331c565b604051611a8b93929190613537565b60405180910390a2509392505050565b611aa433610d8d565b611b055760405162461bcd60e51b815260206004820152602c60248201527f5369676e61747572655365726965733a204e6f7420746f6b656e206f776e657260448201526b0813dc88185c1c1c9bdd995960a21b6064820152608401610900565b6000611b10846116cf565b6001600160a01b031614611b7a5760405162461bcd60e51b815260206004820152602b60248201527f5369676e61747572655365726965733a206974656d20697320616c726561647960448201526a081cdd589cd8dc9a58995960aa1b6064820152608401610900565b60008381526012602052604090208054610100600160a81b0319166101006001600160a01b03851602178155611bb0428361356d565b815467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831681029190911780845560405191900490911681526001600160a01b0384169085907f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe90602001611223565b600e80546115f29061324c565b60006001600160e01b0319821663152a902d60e11b14806107cd57506107cd8261238e565b611c568161200f565b610c925760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610900565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611cd282610d28565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611d1783610d28565b9050806001600160a01b0316846001600160a01b03161480611d5e57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610bf25750836001600160a01b0316611d7784610865565b6001600160a01b031614949350505050565b826001600160a01b0316611d9c82610d28565b6001600160a01b031614611dc25760405162461bcd60e51b815260040161090090613594565b6001600160a01b038216611e245760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610900565b611e3183838360016123b3565b826001600160a01b0316611e4482610d28565b6001600160a01b031614611e6a5760405162461bcd60e51b815260040161090090613594565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006107cd611f07612454565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611f57858561257b565b91509150611f64816125bd565b509392505050565b6000611f7782610d28565b9050611f878160008460016123b3565b611f9082610d28565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000908152600260205260409020546001600160a01b0316151590565b6115e1828260405180602001604052806000815250612707565b61204f8261200f565b61206b5760405162461bcd60e51b8152600401610900906134d7565b60008281526013602052604090206109a18282613627565b6127106001600160601b03821611156120f15760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401610900565b6001600160a01b0382166121475760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610900565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600b90529190942093519051909116600160a01b029116179055565b816001600160a01b0316836001600160a01b0316036121f25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610900565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61226a848484611d89565b6122768484848461273a565b6116a55760405162461bcd60e51b8152600401610900906136e6565b6000836001600160a01b03168260405160006040518083038185875af1925050503d80600081146122df576040519150601f19603f3d011682016040523d82523d6000602084013e6122e4565b606091505b50509050806123355760405162461bcd60e51b815260206004820181905260248201527f5369676e61747572655365726965733a205472616e73666572206661696c65646044820152606401610900565b604080516001600160a01b03808816825286166020820152908101849052606081018390527faeadc2c673108f922a1042ef404b73ae1af992c9ae54249a4a7d13ef21ef2c189060800160405180910390a15050505050565b60006001600160e01b0319821663780e9d6360e01b14806107cd57506107cd8261283b565b6123bf8484848461288b565b826001600160a01b0316846001600160a01b0316141580156123fc575060008281526012602052604090205461010090046001600160a01b031615155b156116a557600082815260126020908152604080832080546001600160e81b03191681556001018390555182815284917f4e06b4e7000e659094299b3533b47b6aa8ad048e95e872d23d1f4ee55af89cfe9101611223565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156124ad57507f000000000000000000000000000000000000000000000000000000000000000046145b156124d757507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60008082516041036125b15760208301516040840151606085015160001a6125a5878285856129bf565b94509450505050610a7f565b50600090506002610a7f565b60008160048111156125d1576125d1613738565b036125d95750565b60018160048111156125ed576125ed613738565b0361263a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610900565b600281600481111561264e5761264e613738565b0361269b5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610900565b60038160048111156126af576126af613738565b03610c925760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610900565b6127118383612a83565b61271e600084848461273a565b6109a15760405162461bcd60e51b8152600401610900906136e6565b60006001600160a01b0384163b1561283057604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061277e90339089908890889060040161374e565b6020604051808303816000875af19250505080156127b9575060408051601f3d908101601f191682019092526127b69181019061378b565b60015b612816573d8080156127e7576040519150601f19603f3d011682016040523d82523d6000602084013e6127ec565b606091505b50805160000361280e5760405162461bcd60e51b8152600401610900906136e6565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610bf2565b506001949350505050565b60006001600160e01b031982166380ac58cd60e01b148061286c57506001600160e01b03198216635b5e139f60e01b145b806107cd57506301ffc9a760e01b6001600160e01b03198316146107cd565b60018111156128fa5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610900565b816001600160a01b0385166129565761295181600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612979565b836001600160a01b0316856001600160a01b031614612979576129798582612bfe565b6001600160a01b0384166129955761299081612c9b565b6129b8565b846001600160a01b0316846001600160a01b0316146129b8576129b88482612d4a565b5050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156129f65750600090506003612a7a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612a4a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a7357600060019250925050612a7a565b9150600090505b94509492505050565b6001600160a01b038216612ad95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610900565b612ae28161200f565b15612b2f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610900565b612b3d6000838360016123b3565b612b468161200f565b15612b935760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610900565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612c0b84610e2a565b612c1591906137a8565b600083815260076020526040902054909150808214612c68576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612cad906001906137a8565b60008381526009602052604081205460088054939450909284908110612cd557612cd56133c8565b906000526020600020015490508060088381548110612cf657612cf66133c8565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612d2e57612d2e6137bb565b6001900381819060005260206000200160009055905550505050565b6000612d5583610e2a565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160e01b031981168114610c9257600080fd5b600060208284031215612db657600080fd5b81356116c881612d8e565b6000815180845260005b81811015612de757602081850181015186830182015201612dcb565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006116c86020830184612dc1565b600060208284031215612e2c57600080fd5b5035919050565b6001600160a01b0381168114610c9257600080fd5b60008060408385031215612e5b57600080fd5b8235612e6681612e33565b946020939093013593505050565b600080600060608486031215612e8957600080fd5b8335612e9481612e33565b92506020840135612ea481612e33565b929592945050506040919091013590565b60008060408385031215612ec857600080fd5b50508035926020909101359150565b600060608284031215612ee957600080fd5b50919050565b600060208284031215612f0157600080fd5b81356001600160401b03811115612f1757600080fd5b610bf284828501612ed7565b8015158114610c9257600080fd5b600080600060608486031215612f4657600080fd5b833592506020840135612ea481612f23565b600060208284031215612f6a57600080fd5b81356116c881612e33565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115612fa557612fa5612f75565b604051601f8501601f19908116603f01168101908282118183101715612fcd57612fcd612f75565b81604052809350858152868686011115612fe657600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261301157600080fd5b6116c883833560208501612f8b565b80356001600160601b038116811461171e57600080fd5b6000806040838503121561304a57600080fd5b82356001600160401b0381111561306057600080fd5b61306c85828601613000565b92505061307b60208401613020565b90509250929050565b60008060006060848603121561309957600080fd5b83356130a481612e33565b925060208401356001600160401b038111156130bf57600080fd5b6130cb86828701613000565b9250506130da60408501613020565b90509250925092565b600080604083850312156130f657600080fd5b823561310181612e33565b9150602083013561311181612f23565b809150509250929050565b6000806000806080858703121561313257600080fd5b843561313d81612e33565b9350602085013561314d81612e33565b92506040850135915060608501356001600160401b0381111561316f57600080fd5b8501601f8101871361318057600080fd5b61318f87823560208401612f8b565b91505092959194509250565b600080604083850312156131ae57600080fd5b82356001600160401b038111156131c457600080fd5b61306c85828601612ed7565b6000806000606084860312156131e557600080fd5b8335925060208401356131f781612e33565b915060408401356001600160401b038116811461321357600080fd5b809150509250925092565b6000806040838503121561323157600080fd5b823561323c81612e33565b9150602083013561311181612e33565b600181811c9082168061326057607f821691505b602082108103612ee957634e487b7160e01b600052602260045260246000fd5b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107cd576107cd6132cd565b60008261331757634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e1984360301811261333357600080fd5b8301803591506001600160401b0382111561334d57600080fd5b602001915036819003821315610a7f57600080fd5b8183823760009101908152919050565b60208082526036908201527f5369676e61747572655365726965733a2043616c6c6572206973206e6f7420746040820152751bdad95b881bdddb995c881bdc88185c1c1c9bdd995960521b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b808201808211156107cd576107cd6132cd565b60006020828403121561340357600080fd5b81516116c881612f23565b60208082526028908201527f5369676e61747572655365726965733a2055736572206973206e6f742061757460408201526703437b934bd32b2160c51b606082015260800190565b600060018201613468576134686132cd565b5060010190565b6020808252602f908201527f5369676e61747572655365726965733a20526f79616c74792063616e2774206260408201526e65206d6f7265207468616e2031302560881b606082015260800190565b828152604060208201526000610bf26040830184612dc1565b60208082526023908201527f5369676e61747572655365726965733a204e6f6e2d4578697374656e742041736040820152621cd95d60ea1b606082015260800190565b60006020828403121561352c57600080fd5b81516116c881612e33565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160401b0381811683821601908082111561358d5761358d6132cd565b5092915050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b601f8211156109a157600081815260208120601f850160051c810160208610156136005750805b601f850160051c820191505b8181101561361f5782815560010161360c565b505050505050565b81516001600160401b0381111561364057613640612f75565b6136548161364e845461324c565b846135d9565b602080601f83116001811461368957600084156136715750858301515b600019600386901b1c1916600185901b17855561361f565b600085815260208120601f198616915b828110156136b857888601518255948401946001909101908401613699565b50858210156136d65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061378190830184612dc1565b9695505050505050565b60006020828403121561379d57600080fd5b81516116c881612d8e565b818103818111156107cd576107cd6132cd565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220803669a78a031eebc947b3a8cfec378b83e3a88f58e36b5430d7bcd89e2d465464736f6c63430008110033"; type SignatureSeriesConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/TradeHub__factory.ts b/typechain-types/factories/TradeHub__factory.ts index f7b122c..1642976 100644 --- a/typechain-types/factories/TradeHub__factory.ts +++ b/typechain-types/factories/TradeHub__factory.ts @@ -860,7 +860,7 @@ const _abi = [ ]; const _bytecode = - "0x60806040526005805460ff191660011790553480156200001e57600080fd5b50604051620031bd380380620031bd8339810160408190526200004191620000eb565b6001600055600a80546001600160a01b0319166001600160a01b038381169190911790915560048054909116600160a01b6001600160601b0386160217905560066200008e838262000282565b50600480546001600160a01b0319166001600160a01b0392909216919091179055506200034e9050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620000e657600080fd5b919050565b6000806000606084860312156200010157600080fd5b83516001600160601b03811681146200011957600080fd5b602085810151919450906001600160401b03808211156200013957600080fd5b818701915087601f8301126200014e57600080fd5b815181811115620001635762000163620000b8565b604051601f8201601f19908116603f011681019083821181831017156200018e576200018e620000b8565b816040528281528a86848701011115620001a757600080fd5b600093505b82841015620001cb5784840186015181850187015292850192620001ac565b6000868483010152809750505050505050620001ea60408501620000ce565b90509250925092565b600181811c908216806200020857607f821691505b6020821081036200022957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200027d57600081815260208120601f850160051c81016020861015620002585750805b601f850160051c820191505b81811015620002795782815560010162000264565b5050505b505050565b81516001600160401b038111156200029e576200029e620000b8565b620002b681620002af8454620001f3565b846200022f565b602080601f831160018114620002ee5760008415620002d55750858301515b600019600386901b1c1916600185901b17855562000279565b600085815260208120601f198616915b828110156200031f57888601518255948401946001909101908401620002fe565b50858210156200033e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612e5f806200035e6000396000f3fe6080604052600436106101355760003560e01c806371329171116100ab5780639b76a0d91161006f5780639b76a0d9146103cd578063b87613011461040b578063bc197c811461042b578063e18ab47614610457578063e61a70c01461048f578063f23a6e611461052557600080fd5b806371329171146103475780637f47c1671461036757806382367b2d146103875780639979c009146103a75780639979ef45146103ba57600080fd5b80631522a4a3116100fd5780631522a4a31461023b5780632a55205a1461025b5780634fee13fc1461029a57806354fd4d50146102bc5780635a9cd033146102e85780636b7a22001461032757600080fd5b806301ffc9a71461013a57806306fdde031461016f5780630aa7c85414610191578063129f8dca146101c9578063150b7a02146101f7575b600080fd5b34801561014657600080fd5b5061015a610155366004612510565b610551565b60405190151581526020015b60405180910390f35b34801561017b57600080fd5b50610184610582565b604051610166919061258a565b34801561019d57600080fd5b506004546101b1906001600160a01b031681565b6040516001600160a01b039091168152602001610166565b3480156101d557600080fd5b506101e96101e436600461259d565b610610565b604051908152602001610166565b34801561020357600080fd5b50610222610212366004612699565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610166565b34801561024757600080fd5b506101e9610256366004612713565b610755565b34801561026757600080fd5b5061027b61027636600461259d565b610dfb565b604080516001600160a01b039093168352602083019190915201610166565b3480156102a657600080fd5b506102ba6102b536600461259d565b610ea7565b005b3480156102c857600080fd5b506005546102d69060ff1681565b60405160ff9091168152602001610166565b3480156102f457600080fd5b5060045461030f90600160a01b90046001600160601b031681565b6040516001600160601b039091168152602001610166565b34801561033357600080fd5b506102ba610342366004612771565b61107d565b34801561035357600080fd5b506102ba61036236600461279a565b61116b565b34801561037357600080fd5b506102ba61038236600461279a565b6112b8565b34801561039357600080fd5b506101e96103a236600461259d565b61134e565b6102ba6103b536600461259d565b61141a565b6102ba6103c836600461279a565b6116ef565b3480156103d957600080fd5b506101e96103e83660046127b3565b600960209081526000938452604080852082529284528284209052825290205481565b34801561041757600080fd5b506102ba61042636600461279a565b6118ed565b34801561043757600080fd5b50610222610446366004612874565b63bc197c8160e01b95945050505050565b34801561046357600080fd5b506101e9610472366004612922565b600860209081526000928352604080842090915290825290205481565b34801561049b57600080fd5b5061050f6104aa36600461279a565b600760208190526000918252604090912080546001820154600283015460038401546004850154600586015460068701549787015460089097015495976001600160a01b0395861697949693861695929491939092811690600160a01b900460ff168a565b6040516101669a99989796959493929190612964565b34801561053157600080fd5b506102226105403660046129e3565b63f23a6e6160e01b95945050505050565b6000636ad56fd360e11b6001600160e01b031983160161057357506001919050565b61057c826119b3565b92915050565b6006805461058f90612a4c565b80601f01602080910402602001604051908101604052809291908181526020018280546105bb90612a4c565b80156106085780601f106105dd57610100808354040283529160200191610608565b820191906000526020600020905b8154815290600101906020018083116105eb57829003601f168201915b505050505081565b60008281526007602052604081206003015483906001600160a01b031633146106545760405162461bcd60e51b815260040161064b90612a86565b60405180910390fd5b836002600082815260076020526040902060080154600160a01b900460ff1660048111156106845761068461294e565b146106a15760405162461bcd60e51b815260040161064b90612ad1565b60008581526007602052604090206008015485906001600160a01b0316156106db5760405162461bcd60e51b815260040161064b90612b1a565b6106e58542612b73565b60008781526007602052604090819020600601829055517f57726d06d1daca46f05e5ae635548ca11afdbf89f3e1d07af30a7a89df075c6d9161073391899190918252602082015260400190565b60405180910390a1505050600092835250506007602052604090206006015490565b600086610761816119d8565b80610770575061077081611a4b565b6107d35760405162461bcd60e51b815260206004820152602e60248201527f54726164654875623a20436f6e7472616374206973206e6f7420656c6967696260448201526d6c6520666f72206c697374696e6760901b606482015260840161064b565b600086116108325760405162461bcd60e51b815260206004820152602660248201527f54726164654875623a205072696365206d757374206265206174206c6561737460448201526520312077656960d01b606482015260840161064b565b61083b88611a4b565b1561084557600194505b8315156001036108b157603c8310156108b15760405162461bcd60e51b815260206004820152602860248201527f54726164654875623a2054696d652063616e6e6f74206265206c65737320746860448201526730b710189036b4b760c11b606482015260840161064b565b6108bb8888611a81565b915060006108c98989611ca1565b90506108d4896119d8565b156109cd57856001600160a01b038a1662fdd58e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018c9052604401602060405180830381865afa158015610934573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109589190612b86565b10156109bb5760405162461bcd60e51b815260206004820152602c60248201527f54726164654875623a20496e73756666696369656e742071756e61746974792060448201526b666f72206c697374696e672160a01b606482015260840161064b565b6109c88933308b8a611d99565b610aae565b336040516331a9108f60e11b8152600481018a90526001600160a01b03918216918b1690636352211e90602401602060405180830381865afa158015610a17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3b9190612b9f565b6001600160a01b031614610aa05760405162461bcd60e51b815260206004820152602660248201527f54726164654875623a2053656e64657220646f6573206e6f74206f776e20746860448201526565206974656d60d01b606482015260840161064b565b610aae8933308b6001611d99565b600185151514610c3e576040518061014001604052808481526020018a6001600160a01b03168152602001898152602001610ae63390565b6001600160a01b0316815260208101899052604081018890526000606082018190526080820181905260a082015260c0016001905260008481526007602081815260409283902084518155908401516001820180546001600160a01b03199081166001600160a01b039384161790915593850151600283015560608501516003830180548616918316919091179055608085015160048084019190915560a0860151600584015560c0860151600684015560e0860151938301939093556101008501516008830180549586169190921690811782556101208601519294929391926001600160a81b0319161790600160a01b908490811115610bea57610bea61294e565b0217905550899150506001600160a01b038a16847fd90c03e7bfd75512b91d0f3b713ef47c0666e00f5c30a2ac08a6d30514f8996884338c604051610c3193929190612bbc565b60405180910390a4610def565b6000610c4a8542612b73565b90506000610c58888a612bea565b90506040518061014001604052808681526020018c6001600160a01b031681526020018b8152602001610c883390565b6001600160a01b03168152602081018b9052604081018a90526060810184905260808101839052600060a082015260c0016002905260008681526007602081815260409283902084518155908401516001820180546001600160a01b03199081166001600160a01b039384161790915593850151600283015560608501516003830180548616918316919091179055608085015160048084019190915560a0860151600584015560c0860151600684015560e0860151938301939093556101008501516008830180549586169190921690811782556101208601519294929391926001600160a81b0319161790600160a01b908490811115610d8c57610d8c61294e565b0217905550905050610d9b3390565b6001600160a01b03168a8c6001600160a01b03167f39ed0bb0416b400d0f3fa4402ca48e2e9fbc9042ec88cf4a341cc715f14de90488878e88604051610de49493929190612c01565b60405180910390a450505b50509695505050505050565b60008281526002602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610e705750604080518082019091526001546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610e8f906001600160601b031687612bea565b610e999190612c2d565b915196919550909350505050565b60008281526007602052604090206003015482906001600160a01b03163314610ee25760405162461bcd60e51b815260040161064b90612a86565b826001600082815260076020526040902060080154600160a01b900460ff166004811115610f1257610f1261294e565b14610f2f5760405162461bcd60e51b815260040161064b90612c4f565b6000848152600760205260409020600101546001600160a01b0316603c841015610fb25760405162461bcd60e51b815260206004820152602e60248201527f54726164654875623a2054696d65722063616e6e6f74206265206c657373207460448201526d68616e204f6e65204d696e75746560901b606482015260840161064b565b60008581526007602052604081206005810154600490910154610fd59190612bea565b90506000610fe38642612b73565b60008881526007602052604081206006810183905560088101805460ff60a01b1916600160a11b1790556002015491925061101e8583611ca1565b9050336001600160a01b031682866001600160a01b03167f39ed0bb0416b400d0f3fa4402ca48e2e9fbc9042ec88cf4a341cc715f14de9048c85898e60405161106a9493929190612c01565b60405180910390a4505050505050505050565b600a546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156110d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f79190612c94565b6111435760405162461bcd60e51b815260206004820152601a60248201527f457465726e756d506173733a20556e617574686f72697a656421000000000000604482015260640161064b565b600480546001600160601b03909216600160a01b026001600160a01b03909216919091179055565b60008181526007602052604090206003015481906001600160a01b031633146111a65760405162461bcd60e51b815260040161064b90612a86565b60008281526007602052604090206008015482906001600160a01b0316156111e05760405162461bcd60e51b815260040161064b90612b1a565b60008381526007602052604090206001810154600382015460028301546005909301546001600160a01b039283169391909216916112218430858585611d99565b6000878152600760205260408120600801805460ff60a01b1916600160a21b17905561124d8584611ca1565b60008981526007602052604090206002810154600190910154919250906001600160a01b03167fae1e13d4bf13a666a5162ff2a286b302074d0ea0cd82ecb2c4f27a4824738bda8a84336040516112a693929190612cb1565b60405180910390a35050505050505050565b806002600082815260076020526040902060080154600160a01b900460ff1660048111156112e8576112e861294e565b146113055760405162461bcd60e51b815260040161064b90612ad1565b60008281526007602052604090206003015482906001600160a01b031633146113405760405162461bcd60e51b815260040161064b90612a86565b61134983611e9d565b505050565b60008281526007602052604081206003015483906001600160a01b031633146113895760405162461bcd60e51b815260040161064b90612a86565b60008481526007602052604090206008015484906001600160a01b0316156113c35760405162461bcd60e51b815260040161064b90612b1a565b60008581526007602090815260409182902060040186905581518781529081018690527f945c1c4e99aa89f648fbfe3df471b916f719e16d960fcec0737d4d56bd696838910160405180910390a150919392505050565b816001600082815260076020526040902060080154600160a01b900460ff16600481111561144a5761144a61294e565b146114675760405162461bcd60e51b815260040161064b90612c4f565b60008381526007602081815260408084208151610140810183528154815260018201546001600160a01b03908116948201949094526002820154928101929092526003810154831660608301526004808201546080840152600582015460a0840152600682015460c08401529381015460e0830152600881015492831661010083015290929091610120840191600160a01b90910460ff169081111561150f5761150f61294e565b60048111156115205761152061294e565b8152505090508060a0015183111561158c5760405162461bcd60e51b815260206004820152602960248201527f54726164654875623a2067726561746572207175616e74697479207468616e20604482015268617661696c61626c6560b81b606482015260840161064b565b82816080015161159c9190612bea565b34146115fc5760405162461bcd60e51b815260206004820152602960248201527f54726164654875623a20506179204d61726b657420507269636520746f2062756044820152681e481d1a194813919560ba1b606482015260840161064b565b600061161082602001518360400151611ca1565b905061161f82602001516119d8565b15611676576116308534338761200a565b838260a001516116409190612ce2565b60a08301819052600003611671576000858152600760205260409020600801805460ff60a01b1916600360a01b1790555b611687565b60019350611687853433600161200a565b816040015182602001516001600160a01b0316867fb80f6fa5d230e7805d7cf6cfd37e8ef8e49c0a6431aa394ccbe4bc264d6af8b68486606001516116c93390565b88608001518b6040516116e0959493929190612cf5565b60405180910390a45050505050565b806002600082815260076020526040902060080154600160a01b900460ff16600481111561171f5761171f61294e565b1461173c5760405162461bcd60e51b815260040161064b90612ad1565b60008281526007602052604090206006015442106117aa5760405162461bcd60e51b815260206004820152602560248201527f54726164654875623a2054696d65206c696d697420686173206265656e2072656044820152641858da195960da1b606482015260840161064b565b60008281526007602081905260409091200154341161181d5760405162461bcd60e51b815260206004820152602960248201527f54726164654875623a2076616c7565206c657373207468616e2074686520686960448201526819da195cdd08109a5960ba1b606482015260840161064b565b600082815260076020819052604090912060088101549101546001600160a01b03909116908115611880576040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561187e573d6000803e3d6000fd5b505b6000848152600760208181526040928390206008810180546001600160a01b03191633908117909155349190930181905583518881529182015290917fbfbf2db1f7880e9487cbceeb181c4dce363d0ad1b6e73f5aa494ffb5d9191496910160405180910390a250505050565b806002600082815260076020526040902060080154600160a01b900460ff16600481111561191d5761191d61294e565b1461193a5760405162461bcd60e51b815260040161064b90612ad1565b6000828152600760205260409020600601544210156119a65760405162461bcd60e51b815260206004820152602260248201527f54726164654875623a2041756374696f6e206973207374696c6c2072756e6e696044820152616e6760f01b606482015260840161064b565b6119af82611e9d565b5050565b60006001600160e01b0319821663152a902d60e11b148061057c575061057c826123f1565b6040516301ffc9a760e01b8152636cdb3d1360e11b60048201526000906001600160a01b038316906301ffc9a7906024015b602060405180830381865afa158015611a27573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057c9190612c94565b6040516301ffc9a760e01b81526380ac58cd60e01b60048201526000906001600160a01b038316906301ffc9a790602401611a0a565b6000611a8c836119d8565b15611baf573360009081526009602090815260408083206001600160a01b0387168452825280832085845290915281205490819003611b125760038054906000611ad583612d35565b90915550506003543360009081526009602090815260408083206001600160a01b0389168452825280832087845290915290208190559150611ba9565b8015801590611b8357506003600082815260076020526040902060080154600160a01b900460ff166004811115611b4b57611b4b61294e565b1480611b8357506004600082815260076020526040902060080154600160a01b900460ff166004811115611b8157611b8161294e565b145b15611b9057809150611ba9565b6040516351e30c8f60e11b815260040160405180910390fd5b5061057c565b6001600160a01b038316600090815260086020908152604080832085845290915281205490819003611c205760038054906000611beb83612d35565b90915550506003546001600160a01b038516600090815260086020908152604080832087845290915290208190559150611c9a565b8015801590611c9157506003600082815260076020526040902060080154600160a01b900460ff166004811115611c5957611c5961294e565b1480611c9157506004600082815260076020526040902060080154600160a01b900460ff166004811115611c8f57611c8f61294e565b145b15611b90578091505b5092915050565b6060611cac836119d8565b15611d25576040516303a24d0760e21b8152600481018390526001600160a01b03841690630e89341c90602401600060405180830381865afa158015611cf6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d1e9190810190612d4e565b905061057c565b60405163c87b56dd60e01b8152600481018390526001600160a01b0384169063c87b56dd90602401600060405180830381865afa158015611d6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d929190810190612d4e565b9392505050565b611da2856119d8565b15611e2b57604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b158015611e0e57600080fd5b505af1158015611e22573d6000803e3d6000fd5b50505050611e96565b6040516323b872dd60e01b81526001600160a01b0385811660048301528481166024830152604482018490528616906323b872dd90606401600060405180830381600087803b158015611e7d57600080fd5b505af1158015611e91573d6000803e3d6000fd5b505050505b5050505050565b6000818152600760205260409020600801546001600160a01b031615611ffe576000818152600760208190526040822060038101549181015460018201546002909201546001600160a01b039384169491939092169190611efe8383611ca1565b9050611f09836119d8565b15611f445760008681526007602052604090206005810154600890910154611f3e90889087906001600160a01b03168461200a565b50611f6e565b600086815260076020526040902060080154611f6e90879086906001600160a01b0316600161200a565b6000868152600760205260409081902060080154905183916001600160a01b03808716928a927fbbdc0e71c33a588413b2b227163f057b0a3d3f23eb550873ae266121fbe1528192611fc79288928d9216908c90612dc5565b60405180910390a4505050600083815260076020819052604082206008810180546001600160a01b03191690550155506120079050565b61200781612426565b50565b6120126124b7565b60008481526007602081815260408084208151610140810183528154815260018201546001600160a01b03908116948201949094526002820154928101929092526003810154831660608301526004808201546080840152600582015460a0840152600682015460c08401529381015460e0830152600881015492831661010083015290929091610120840191600160a01b90910460ff16908111156120ba576120ba61294e565b60048111156120cb576120cb61294e565b8152505090506120e681602001513085846040015186611d99565b6000806000600a60009054906101000a90046001600160a01b03166001600160a01b031663e554d2346040518163ffffffff1660e01b8152600401602060405180830381865afa15801561213e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121629190612b9f565b905061217184602001516119d8565b1561222a576004546103e89061219790600160a01b90046001600160601b031689612bea565b6121a19190612c2d565b92506121ad8388612ce2565b6040519092506001600160a01b0382169084156108fc029085906000818181858888f193505050501580156121e6573d6000803e3d6000fd5b5083606001516001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015612224573d6000803e3d6000fd5b506123dd565b6004546103e89061224b90600160a01b90046001600160601b031689612bea565b6122559190612c2d565b92506122618388612ce2565b915060008085602001516001600160a01b0316632a55205a8760400151866040518363ffffffff1660e01b81526004016122a5929190918252602082015260400190565b6040805180830381865afa1580156122c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e59190612dfb565b909250905060006122f68286612ce2565b6040519091506001600160a01b0385169087156108fc029088906000818181858888f1935050505015801561232f573d6000803e3d6000fd5b506040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015612366573d6000803e3d6000fd5b5086606001516001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156123a4573d6000803e3d6000fd5b50505060008981526007602052604090206003810180546001600160a01b0319169055600801805460ff60a01b1916600360a01b179055505b505050506123eb6001600055565b50505050565b60006001600160e01b03198216630271189760e51b148061057c57506301ffc9a760e01b6001600160e01b031983161461057c565b60008181526007602052604081206006810182905560088101805460ff60a01b1916600160a01b179055600181015460028201546004909201546001600160a01b03909116926124768484611ca1565b9050826001600160a01b038516867fd90c03e7bfd75512b91d0f3b713ef47c0666e00f5c30a2ac08a6d30514f899688433876040516116e093929190612bbc565b6002600054036125095760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161064b565b6002600055565b60006020828403121561252257600080fd5b81356001600160e01b031981168114611d9257600080fd5b60005b8381101561255557818101518382015260200161253d565b50506000910152565b6000815180845261257681602086016020860161253a565b601f01601f19169290920160200192915050565b602081526000611d92602083018461255e565b600080604083850312156125b057600080fd5b50508035926020909101359150565b6001600160a01b038116811461200757600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612613576126136125d4565b604052919050565b600067ffffffffffffffff821115612635576126356125d4565b50601f01601f191660200190565b600082601f83011261265457600080fd5b81356126676126628261261b565b6125ea565b81815284602083860101111561267c57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156126af57600080fd5b84356126ba816125bf565b935060208501356126ca816125bf565b925060408501359150606085013567ffffffffffffffff8111156126ed57600080fd5b6126f987828801612643565b91505092959194509250565b801515811461200757600080fd5b60008060008060008060c0878903121561272c57600080fd5b8635612737816125bf565b9550602087013594506040870135935060608701359250608087013561275c81612705565b8092505060a087013590509295509295509295565b60006020828403121561278357600080fd5b81356001600160601b0381168114611d9257600080fd5b6000602082840312156127ac57600080fd5b5035919050565b6000806000606084860312156127c857600080fd5b83356127d3816125bf565b925060208401356127e3816125bf565b929592945050506040919091013590565b600082601f83011261280557600080fd5b8135602067ffffffffffffffff821115612821576128216125d4565b8160051b6128308282016125ea565b928352848101820192828101908785111561284a57600080fd5b83870192505b8483101561286957823582529183019190830190612850565b979650505050505050565b600080600080600060a0868803121561288c57600080fd5b8535612897816125bf565b945060208601356128a7816125bf565b9350604086013567ffffffffffffffff808211156128c457600080fd5b6128d089838a016127f4565b945060608801359150808211156128e657600080fd5b6128f289838a016127f4565b9350608088013591508082111561290857600080fd5b5061291588828901612643565b9150509295509295909350565b6000806040838503121561293557600080fd5b8235612940816125bf565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b8a81526001600160a01b038a81166020830152604082018a905288811660608301526080820188905260a0820187905260c0820186905260e0820185905283166101008201526101408101600583106129cd57634e487b7160e01b600052602160045260246000fd5b826101208301529b9a5050505050505050505050565b600080600080600060a086880312156129fb57600080fd5b8535612a06816125bf565b94506020860135612a16816125bf565b93506040860135925060608601359150608086013567ffffffffffffffff811115612a4057600080fd5b61291588828901612643565b600181811c90821680612a6057607f821691505b602082108103612a8057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602b908201527f54726164654875623a2053656e646572206973206e6f742073656c6c6572206f60408201526a662074686973206974656d60a81b606082015260800190565b60208082526029908201527f54726164654875623a205468652061756374696f6e20686173206e6f74207374604082015268185c9d1959081e595d60ba1b606082015260800190565b60208082526023908201527f5472616465487562203a2041756374696f6e206973207374696c6c2072756e6e604082015262696e6760e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561057c5761057c612b5d565b600060208284031215612b9857600080fd5b5051919050565b600060208284031215612bb157600080fd5b8151611d92816125bf565b606081526000612bcf606083018661255e565b6001600160a01b039490941660208301525060400152919050565b808202811582820484141761057c5761057c612b5d565b848152608060208201526000612c1a608083018661255e565b6040830194909452506060015292915050565b600082612c4a57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f54726164654875623a204d61726b6574206974656d206973206e6f7420666f726040820152642073616c6560d81b606082015260800190565b600060208284031215612ca657600080fd5b8151611d9281612705565b838152606060208201526000612cca606083018561255e565b905060018060a01b0383166040830152949350505050565b8181038181111561057c5761057c612b5d565b60a081526000612d0860a083018861255e565b6001600160a01b039687166020840152949095166040820152606081019290925260809091015292915050565b600060018201612d4757612d47612b5d565b5060010190565b600060208284031215612d6057600080fd5b815167ffffffffffffffff811115612d7757600080fd5b8201601f81018413612d8857600080fd5b8051612d966126628261261b565b818152856020838501011115612dab57600080fd5b612dbc82602083016020860161253a565b95945050505050565b608081526000612dd8608083018761255e565b6001600160a01b0395861660208401529390941660408201526060015292915050565b60008060408385031215612e0e57600080fd5b8251612e19816125bf565b602093909301519294929350505056fea2646970667358221220752504ae1bd927bf219a40db66246ecd224b3c915e43a3b9815e6b938149bee164736f6c63430008110033"; + "0x60806040523480156200001157600080fd5b50604051620031b4380380620031b48339810160408190526200003491620000de565b6001600055600980546001600160a01b0319166001600160a01b038381169190911790915560048054909116600160a01b6001600160601b03861602179055600562000081838262000275565b50600480546001600160a01b0319166001600160a01b039290921691909117905550620003419050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620000d957600080fd5b919050565b600080600060608486031215620000f457600080fd5b83516001600160601b03811681146200010c57600080fd5b602085810151919450906001600160401b03808211156200012c57600080fd5b818701915087601f8301126200014157600080fd5b815181811115620001565762000156620000ab565b604051601f8201601f19908116603f01168101908382118183101715620001815762000181620000ab565b816040528281528a868487010111156200019a57600080fd5b600093505b82841015620001be57848401860151818501870152928501926200019f565b6000868483010152809750505050505050620001dd60408501620000c1565b90509250925092565b600181811c90821680620001fb57607f821691505b6020821081036200021c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200027057600081815260208120601f850160051c810160208610156200024b5750805b601f850160051c820191505b818110156200026c5782815560010162000257565b5050505b505050565b81516001600160401b03811115620002915762000291620000ab565b620002a981620002a28454620001e6565b8462000222565b602080601f831160018114620002e15760008415620002c85750858301515b600019600386901b1c1916600185901b1785556200026c565b600085815260208120601f198616915b828110156200031257888601518255948401946001909101908401620002f1565b5085821015620003315787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612e6380620003516000396000f3fe6080604052600436106101355760003560e01c806371329171116100ab5780639b76a0d91161006f5780639b76a0d9146103c8578063b876130114610406578063bc197c8114610426578063e18ab47614610452578063e61a70c01461048a578063f23a6e611461052357600080fd5b806371329171146103425780637f47c1671461036257806382367b2d146103825780639979c009146103a25780639979ef45146103b557600080fd5b80631522a4a3116100fd5780631522a4a31461023b5780632a55205a1461025b5780634fee13fc1461029a57806354fd4d50146102bc5780635a9cd033146102e35780636b7a22001461032257600080fd5b806301ffc9a71461013a57806306fdde031461016f5780630aa7c85414610191578063129f8dca146101c9578063150b7a02146101f7575b600080fd5b34801561014657600080fd5b5061015a610155366004612514565b61054f565b60405190151581526020015b60405180910390f35b34801561017b57600080fd5b50610184610580565b604051610166919061258e565b34801561019d57600080fd5b506004546101b1906001600160a01b031681565b6040516001600160a01b039091168152602001610166565b3480156101d557600080fd5b506101e96101e43660046125a1565b61060e565b604051908152602001610166565b34801561020357600080fd5b5061022261021236600461269d565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610166565b34801561024757600080fd5b506101e9610256366004612717565b610754565b34801561026757600080fd5b5061027b6102763660046125a1565b610dfa565b604080516001600160a01b039093168352602083019190915201610166565b3480156102a657600080fd5b506102ba6102b53660046125a1565b610ea6565b005b3480156102c857600080fd5b506102d1600181565b60405160ff9091168152602001610166565b3480156102ef57600080fd5b5060045461030a90600160a01b90046001600160601b031681565b6040516001600160601b039091168152602001610166565b34801561032e57600080fd5b506102ba61033d366004612775565b61107d565b34801561034e57600080fd5b506102ba61035d36600461279e565b61116b565b34801561036e57600080fd5b506102ba61037d36600461279e565b6112b8565b34801561038e57600080fd5b506101e961039d3660046125a1565b61134e565b6102ba6103b03660046125a1565b61141a565b6102ba6103c336600461279e565b6116ef565b3480156103d457600080fd5b506101e96103e33660046127b7565b600860209081526000938452604080852082529284528284209052825290205481565b34801561041257600080fd5b506102ba61042136600461279e565b6118f0565b34801561043257600080fd5b50610222610441366004612878565b63bc197c8160e01b95945050505050565b34801561045e57600080fd5b506101e961046d366004612926565b600760209081526000928352604080842090915290825290205481565b34801561049657600080fd5b5061050d6104a536600461279e565b600660208190526000918252604090912080546001820154600283015460038401546004850154600586015496860154600787015460089097015495976001600160a01b0395861697949693861695929490939192909190811690600160a01b900460ff168a565b6040516101669a99989796959493929190612968565b34801561052f57600080fd5b5061022261053e3660046129e7565b63f23a6e6160e01b95945050505050565b6000636ad56fd360e11b6001600160e01b031983160161057157506001919050565b61057a826119b7565b92915050565b6005805461058d90612a50565b80601f01602080910402602001604051908101604052809291908181526020018280546105b990612a50565b80156106065780601f106105db57610100808354040283529160200191610606565b820191906000526020600020905b8154815290600101906020018083116105e957829003601f168201915b505050505081565b60008281526006602052604081206003015483906001600160a01b031633146106525760405162461bcd60e51b815260040161064990612a8a565b60405180910390fd5b836002600082815260066020526040902060080154600160a01b900460ff16600481111561068257610682612952565b1461069f5760405162461bcd60e51b815260040161064990612ad5565b60008581526006602052604090206008015485906001600160a01b0316156106d95760405162461bcd60e51b815260040161064990612b1e565b6106e38542612b77565b60008781526006602081905260409182902001829055517f57726d06d1daca46f05e5ae635548ca11afdbf89f3e1d07af30a7a89df075c6d9161073191899190918252602082015260400190565b60405180910390a150505060009283525050600660208190526040909120015490565b600086610760816119dc565b8061076f575061076f81611a4f565b6107d25760405162461bcd60e51b815260206004820152602e60248201527f54726164654875623a20436f6e7472616374206973206e6f7420656c6967696260448201526d6c6520666f72206c697374696e6760901b6064820152608401610649565b600086116108315760405162461bcd60e51b815260206004820152602660248201527f54726164654875623a205072696365206d757374206265206174206c6561737460448201526520312077656960d01b6064820152608401610649565b61083a88611a4f565b1561084457600194505b8315156001036108b057603c8310156108b05760405162461bcd60e51b815260206004820152602860248201527f54726164654875623a2054696d652063616e6e6f74206265206c65737320746860448201526730b710189036b4b760c11b6064820152608401610649565b6108ba8888611a85565b915060006108c88989611ca5565b90506108d3896119dc565b156109cc57856001600160a01b038a1662fdd58e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018c9052604401602060405180830381865afa158015610933573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109579190612b8a565b10156109ba5760405162461bcd60e51b815260206004820152602c60248201527f54726164654875623a20496e73756666696369656e742071756e61746974792060448201526b666f72206c697374696e672160a01b6064820152608401610649565b6109c78933308b8a611d9d565b610aad565b336040516331a9108f60e11b8152600481018a90526001600160a01b03918216918b1690636352211e90602401602060405180830381865afa158015610a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3a9190612ba3565b6001600160a01b031614610a9f5760405162461bcd60e51b815260206004820152602660248201527f54726164654875623a2053656e64657220646f6573206e6f74206f776e20746860448201526565206974656d60d01b6064820152608401610649565b610aad8933308b6001611d9d565b600185151514610c3d576040518061014001604052808481526020018a6001600160a01b03168152602001898152602001610ae53390565b6001600160a01b0316815260208101899052604081018890526000606082018190526080820181905260a082015260c0016001905260008481526006602081815260409283902084518155908401516001820180546001600160a01b03199081166001600160a01b039384161790915593850151600283015560608501516003830180548616918316919091179055608085015160048084019190915560a0860151600584015560c08601519383019390935560e085015160078301556101008501516008830180549586169190921690811782556101208601519294929391926001600160a81b0319161790600160a01b908490811115610be957610be9612952565b0217905550899150506001600160a01b038a16847fd90c03e7bfd75512b91d0f3b713ef47c0666e00f5c30a2ac08a6d30514f8996884338c604051610c3093929190612bc0565b60405180910390a4610dee565b6000610c498542612b77565b90506000610c57888a612bee565b90506040518061014001604052808681526020018c6001600160a01b031681526020018b8152602001610c873390565b6001600160a01b03168152602081018b9052604081018a90526060810184905260808101839052600060a082015260c0016002905260008681526006602081815260409283902084518155908401516001820180546001600160a01b03199081166001600160a01b039384161790915593850151600283015560608501516003830180548616918316919091179055608085015160048084019190915560a0860151600584015560c08601519383019390935560e085015160078301556101008501516008830180549586169190921690811782556101208601519294929391926001600160a81b0319161790600160a01b908490811115610d8b57610d8b612952565b0217905550905050610d9a3390565b6001600160a01b03168a8c6001600160a01b03167f39ed0bb0416b400d0f3fa4402ca48e2e9fbc9042ec88cf4a341cc715f14de90488878e88604051610de39493929190612c05565b60405180910390a450505b50509695505050505050565b60008281526002602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610e6f5750604080518082019091526001546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610e8e906001600160601b031687612bee565b610e989190612c31565b915196919550909350505050565b60008281526006602052604090206003015482906001600160a01b03163314610ee15760405162461bcd60e51b815260040161064990612a8a565b826001600082815260066020526040902060080154600160a01b900460ff166004811115610f1157610f11612952565b14610f2e5760405162461bcd60e51b815260040161064990612c53565b6000848152600660205260409020600101546001600160a01b0316603c841015610fb15760405162461bcd60e51b815260206004820152602e60248201527f54726164654875623a2054696d65722063616e6e6f74206265206c657373207460448201526d68616e204f6e65204d696e75746560901b6064820152608401610649565b60008581526006602052604081206005810154600490910154610fd49190612bee565b90506000610fe28642612b77565b6000888152600660208190526040822090810183905560088101805460ff60a01b1916600160a11b1790556002015491925061101e8583611ca5565b9050336001600160a01b031682866001600160a01b03167f39ed0bb0416b400d0f3fa4402ca48e2e9fbc9042ec88cf4a341cc715f14de9048c85898e60405161106a9493929190612c05565b60405180910390a4505050505050505050565b6009546001600160a01b0316636d70f7ae336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156110d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f79190612c98565b6111435760405162461bcd60e51b815260206004820152601a60248201527f457465726e756d506173733a20556e617574686f72697a6564210000000000006044820152606401610649565b600480546001600160601b03909216600160a01b026001600160a01b03909216919091179055565b60008181526006602052604090206003015481906001600160a01b031633146111a65760405162461bcd60e51b815260040161064990612a8a565b60008281526006602052604090206008015482906001600160a01b0316156111e05760405162461bcd60e51b815260040161064990612b1e565b60008381526006602052604090206001810154600382015460028301546005909301546001600160a01b039283169391909216916112218430858585611d9d565b6000878152600660205260408120600801805460ff60a01b1916600160a21b17905561124d8584611ca5565b60008981526006602052604090206002810154600190910154919250906001600160a01b03167fae1e13d4bf13a666a5162ff2a286b302074d0ea0cd82ecb2c4f27a4824738bda8a84336040516112a693929190612cb5565b60405180910390a35050505050505050565b806002600082815260066020526040902060080154600160a01b900460ff1660048111156112e8576112e8612952565b146113055760405162461bcd60e51b815260040161064990612ad5565b60008281526006602052604090206003015482906001600160a01b031633146113405760405162461bcd60e51b815260040161064990612a8a565b61134983611ea1565b505050565b60008281526006602052604081206003015483906001600160a01b031633146113895760405162461bcd60e51b815260040161064990612a8a565b60008481526006602052604090206008015484906001600160a01b0316156113c35760405162461bcd60e51b815260040161064990612b1e565b60008581526006602090815260409182902060040186905581518781529081018690527f945c1c4e99aa89f648fbfe3df471b916f719e16d960fcec0737d4d56bd696838910160405180910390a150919392505050565b816001600082815260066020526040902060080154600160a01b900460ff16600481111561144a5761144a612952565b146114675760405162461bcd60e51b815260040161064990612c53565b60008381526006602081815260408084208151610140810183528154815260018201546001600160a01b03908116948201949094526002820154928101929092526003810154831660608301526004808201546080840152600582015460a08401529381015460c0830152600781015460e0830152600881015492831661010083015290929091610120840191600160a01b90910460ff169081111561150f5761150f612952565b600481111561152057611520612952565b8152505090508060a0015183111561158c5760405162461bcd60e51b815260206004820152602960248201527f54726164654875623a2067726561746572207175616e74697479207468616e20604482015268617661696c61626c6560b81b6064820152608401610649565b82816080015161159c9190612bee565b34146115fc5760405162461bcd60e51b815260206004820152602960248201527f54726164654875623a20506179204d61726b657420507269636520746f2062756044820152681e481d1a194813919560ba1b6064820152608401610649565b600061161082602001518360400151611ca5565b905061161f82602001516119dc565b15611676576116308534338761200d565b838260a001516116409190612ce6565b60a08301819052600003611671576000858152600660205260409020600801805460ff60a01b1916600360a01b1790555b611687565b60019350611687853433600161200d565b816040015182602001516001600160a01b0316867fb80f6fa5d230e7805d7cf6cfd37e8ef8e49c0a6431aa394ccbe4bc264d6af8b68486606001516116c93390565b88608001518b6040516116e0959493929190612cf9565b60405180910390a45050505050565b806002600082815260066020526040902060080154600160a01b900460ff16600481111561171f5761171f612952565b1461173c5760405162461bcd60e51b815260040161064990612ad5565b6000828152600660208190526040909120015442106117ab5760405162461bcd60e51b815260206004820152602560248201527f54726164654875623a2054696d65206c696d697420686173206265656e2072656044820152641858da195960da1b6064820152608401610649565b600082815260066020526040902060070154341161181d5760405162461bcd60e51b815260206004820152602960248201527f54726164654875623a2076616c7565206c657373207468616e2074686520686960448201526819da195cdd08109a5960ba1b6064820152608401610649565b600082815260066020526040902060088101546007909101546001600160a01b03909116908115611880576040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561187e573d6000803e3d6000fd5b505b6000848152600660209081526040918290206008810180546001600160a01b03191633908117909155346007909201829055835188815292830191909152917fbfbf2db1f7880e9487cbceeb181c4dce363d0ad1b6e73f5aa494ffb5d9191496910160405180910390a250505050565b806002600082815260066020526040902060080154600160a01b900460ff16600481111561192057611920612952565b1461193d5760405162461bcd60e51b815260040161064990612ad5565b600082815260066020819052604090912001544210156119aa5760405162461bcd60e51b815260206004820152602260248201527f54726164654875623a2041756374696f6e206973207374696c6c2072756e6e696044820152616e6760f01b6064820152608401610649565b6119b382611ea1565b5050565b60006001600160e01b0319821663152a902d60e11b148061057a575061057a826123f4565b6040516301ffc9a760e01b8152636cdb3d1360e11b60048201526000906001600160a01b038316906301ffc9a7906024015b602060405180830381865afa158015611a2b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057a9190612c98565b6040516301ffc9a760e01b81526380ac58cd60e01b60048201526000906001600160a01b038316906301ffc9a790602401611a0e565b6000611a90836119dc565b15611bb3573360009081526008602090815260408083206001600160a01b0387168452825280832085845290915281205490819003611b165760038054906000611ad983612d39565b90915550506003543360009081526008602090815260408083206001600160a01b0389168452825280832087845290915290208190559150611bad565b8015801590611b8757506003600082815260066020526040902060080154600160a01b900460ff166004811115611b4f57611b4f612952565b1480611b8757506004600082815260066020526040902060080154600160a01b900460ff166004811115611b8557611b85612952565b145b15611b9457809150611bad565b6040516351e30c8f60e11b815260040160405180910390fd5b5061057a565b6001600160a01b038316600090815260076020908152604080832085845290915281205490819003611c245760038054906000611bef83612d39565b90915550506003546001600160a01b038516600090815260076020908152604080832087845290915290208190559150611c9e565b8015801590611c9557506003600082815260066020526040902060080154600160a01b900460ff166004811115611c5d57611c5d612952565b1480611c9557506004600082815260066020526040902060080154600160a01b900460ff166004811115611c9357611c93612952565b145b15611b94578091505b5092915050565b6060611cb0836119dc565b15611d29576040516303a24d0760e21b8152600481018390526001600160a01b03841690630e89341c90602401600060405180830381865afa158015611cfa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d229190810190612d52565b905061057a565b60405163c87b56dd60e01b8152600481018390526001600160a01b0384169063c87b56dd90602401600060405180830381865afa158015611d6e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d969190810190612d52565b9392505050565b611da6856119dc565b15611e2f57604051637921219560e11b81526001600160a01b0385811660048301528481166024830152604482018490526064820183905260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b158015611e1257600080fd5b505af1158015611e26573d6000803e3d6000fd5b50505050611e9a565b6040516323b872dd60e01b81526001600160a01b0385811660048301528481166024830152604482018490528616906323b872dd90606401600060405180830381600087803b158015611e8157600080fd5b505af1158015611e95573d6000803e3d6000fd5b505050505b5050505050565b6000818152600660205260409020600801546001600160a01b0316156120015760008181526006602052604081206003810154600782015460018301546002909301546001600160a01b039283169491939092169190611f018383611ca5565b9050611f0c836119dc565b15611f475760008681526006602052604090206005810154600890910154611f4190889087906001600160a01b03168461200d565b50611f71565b600086815260066020526040902060080154611f7190879086906001600160a01b0316600161200d565b6000868152600660205260409081902060080154905183916001600160a01b03808716928a927fbbdc0e71c33a588413b2b227163f057b0a3d3f23eb550873ae266121fbe1528192611fca9288928d9216908c90612dc9565b60405180910390a450505060008381526006602052604081206008810180546001600160a01b0319169055600701555061200a9050565b61200a81612429565b50565b6120156124bb565b60008481526006602081815260408084208151610140810183528154815260018201546001600160a01b03908116948201949094526002820154928101929092526003810154831660608301526004808201546080840152600582015460a08401529381015460c0830152600781015460e0830152600881015492831661010083015290929091610120840191600160a01b90910460ff16908111156120bd576120bd612952565b60048111156120ce576120ce612952565b8152505090506120e981602001513085846040015186611d9d565b6000806000600960009054906101000a90046001600160a01b03166001600160a01b031663e554d2346040518163ffffffff1660e01b8152600401602060405180830381865afa158015612141573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121659190612ba3565b905061217484602001516119dc565b1561222d576004546103e89061219a90600160a01b90046001600160601b031689612bee565b6121a49190612c31565b92506121b08388612ce6565b6040519092506001600160a01b0382169084156108fc029085906000818181858888f193505050501580156121e9573d6000803e3d6000fd5b5083606001516001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015612227573d6000803e3d6000fd5b506123e0565b6004546103e89061224e90600160a01b90046001600160601b031689612bee565b6122589190612c31565b92506122648388612ce6565b915060008085602001516001600160a01b0316632a55205a8760400151866040518363ffffffff1660e01b81526004016122a8929190918252602082015260400190565b6040805180830381865afa1580156122c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e89190612dff565b909250905060006122f98286612ce6565b6040519091506001600160a01b0385169087156108fc029088906000818181858888f19350505050158015612332573d6000803e3d6000fd5b506040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015612369573d6000803e3d6000fd5b5086606001516001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156123a7573d6000803e3d6000fd5b50505060008981526006602052604090206003810180546001600160a01b0319169055600801805460ff60a01b1916600360a01b179055505b505050506123ee6001600055565b50505050565b60006001600160e01b03198216630271189760e51b148061057a57506301ffc9a760e01b6001600160e01b031983161461057a565b6000818152600660208190526040822090810182905560088101805460ff60a01b1916600160a01b179055600181015460028201546004909201546001600160a01b039091169261247a8484611ca5565b9050826001600160a01b038516867fd90c03e7bfd75512b91d0f3b713ef47c0666e00f5c30a2ac08a6d30514f899688433876040516116e093929190612bc0565b60026000540361250d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610649565b6002600055565b60006020828403121561252657600080fd5b81356001600160e01b031981168114611d9657600080fd5b60005b83811015612559578181015183820152602001612541565b50506000910152565b6000815180845261257a81602086016020860161253e565b601f01601f19169290920160200192915050565b602081526000611d966020830184612562565b600080604083850312156125b457600080fd5b50508035926020909101359150565b6001600160a01b038116811461200a57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612617576126176125d8565b604052919050565b600067ffffffffffffffff821115612639576126396125d8565b50601f01601f191660200190565b600082601f83011261265857600080fd5b813561266b6126668261261f565b6125ee565b81815284602083860101111561268057600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156126b357600080fd5b84356126be816125c3565b935060208501356126ce816125c3565b925060408501359150606085013567ffffffffffffffff8111156126f157600080fd5b6126fd87828801612647565b91505092959194509250565b801515811461200a57600080fd5b60008060008060008060c0878903121561273057600080fd5b863561273b816125c3565b9550602087013594506040870135935060608701359250608087013561276081612709565b8092505060a087013590509295509295509295565b60006020828403121561278757600080fd5b81356001600160601b0381168114611d9657600080fd5b6000602082840312156127b057600080fd5b5035919050565b6000806000606084860312156127cc57600080fd5b83356127d7816125c3565b925060208401356127e7816125c3565b929592945050506040919091013590565b600082601f83011261280957600080fd5b8135602067ffffffffffffffff821115612825576128256125d8565b8160051b6128348282016125ee565b928352848101820192828101908785111561284e57600080fd5b83870192505b8483101561286d57823582529183019190830190612854565b979650505050505050565b600080600080600060a0868803121561289057600080fd5b853561289b816125c3565b945060208601356128ab816125c3565b9350604086013567ffffffffffffffff808211156128c857600080fd5b6128d489838a016127f8565b945060608801359150808211156128ea57600080fd5b6128f689838a016127f8565b9350608088013591508082111561290c57600080fd5b5061291988828901612647565b9150509295509295909350565b6000806040838503121561293957600080fd5b8235612944816125c3565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b8a81526001600160a01b038a81166020830152604082018a905288811660608301526080820188905260a0820187905260c0820186905260e0820185905283166101008201526101408101600583106129d157634e487b7160e01b600052602160045260246000fd5b826101208301529b9a5050505050505050505050565b600080600080600060a086880312156129ff57600080fd5b8535612a0a816125c3565b94506020860135612a1a816125c3565b93506040860135925060608601359150608086013567ffffffffffffffff811115612a4457600080fd5b61291988828901612647565b600181811c90821680612a6457607f821691505b602082108103612a8457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602b908201527f54726164654875623a2053656e646572206973206e6f742073656c6c6572206f60408201526a662074686973206974656d60a81b606082015260800190565b60208082526029908201527f54726164654875623a205468652061756374696f6e20686173206e6f74207374604082015268185c9d1959081e595d60ba1b606082015260800190565b60208082526023908201527f5472616465487562203a2041756374696f6e206973207374696c6c2072756e6e604082015262696e6760e81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561057a5761057a612b61565b600060208284031215612b9c57600080fd5b5051919050565b600060208284031215612bb557600080fd5b8151611d96816125c3565b606081526000612bd36060830186612562565b6001600160a01b039490941660208301525060400152919050565b808202811582820484141761057a5761057a612b61565b848152608060208201526000612c1e6080830186612562565b6040830194909452506060015292915050565b600082612c4e57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f54726164654875623a204d61726b6574206974656d206973206e6f7420666f726040820152642073616c6560d81b606082015260800190565b600060208284031215612caa57600080fd5b8151611d9681612709565b838152606060208201526000612cce6060830185612562565b905060018060a01b0383166040830152949350505050565b8181038181111561057a5761057a612b61565b60a081526000612d0c60a0830188612562565b6001600160a01b039687166020840152949095166040820152606081019290925260809091015292915050565b600060018201612d4b57612d4b612b61565b5060010190565b600060208284031215612d6457600080fd5b815167ffffffffffffffff811115612d7b57600080fd5b8201601f81018413612d8c57600080fd5b8051612d9a6126668261261f565b818152856020838501011115612daf57600080fd5b612dc082602083016020860161253e565b95945050505050565b608081526000612ddc6080830187612562565b6001600160a01b0395861660208401529390941660408201526060015292915050565b60008060408385031215612e1257600080fd5b8251612e1d816125c3565b602093909301519294929350505056fea2646970667358221220f0d2da7b39196681b26a73daecf51a9b64bfb7801a24f7f355edfa23a908131764736f6c63430008110033"; type TradeHubConstructorParams = | [signer?: Signer]