[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyTermContractPaired", "type": "error" }, { "inputs": [], "name": "AuctionNotClosed", "type": "error" }, { "inputs": [], "name": "AuctionNotOpen", "type": "error" }, { "inputs": [], "name": "AuctionNotRevealing", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "reveal", "type": "uint256" }, { "internalType": "uint256", "name": "end", "type": "uint256" } ], "name": "AuctionRevealsAfterEnd", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "reveal", "type": "uint256" } ], "name": "AuctionStartsAfterReveal", "type": "error" }, { "inputs": [], "name": "BidAlreadyRevealed", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "BidAmountTooLow", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "bidCount", "type": "uint256" } ], "name": "BidCountIncorrect", "type": "error" }, { "inputs": [], "name": "BidNotOwned", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "bidId", "type": "bytes32" } ], "name": "BidNotRevealed", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "BidPriceModified", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "bidId", "type": "bytes32" } ], "name": "BidRevealed", "type": "error" }, { "inputs": [], "name": "CollateralAmountTooLow", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "CollateralTokenNotApproved", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "bidId", "type": "bytes32" } ], "name": "GeneratingExistingBid", "type": "error" }, { "inputs": [], "name": "InvalidPurchaseToken", "type": "error" }, { "inputs": [], "name": "InvalidSelfReferral", "type": "error" }, { "inputs": [], "name": "InvalidTermRepoServicer", "type": "error" }, { "inputs": [], "name": "LockingPaused", "type": "error" }, { "inputs": [], "name": "MaxBidCountReached", "type": "error" }, { "inputs": [], "name": "NoCollateralToUnlock", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "bidId", "type": "bytes32" } ], "name": "NonExistentBid", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "bidId", "type": "bytes32" } ], "name": "NonExpiredRolloverBid", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "NonRolloverBid", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "PurchaseTokenNotApproved", "type": "error" }, { "inputs": [], "name": "RevealedBidsNotSorted", "type": "error" }, { "inputs": [], "name": "RolloverBid", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "bidId", "type": "bytes32" } ], "name": "RolloverBidExpired", "type": "error" }, { "inputs": [], "name": "RolloverBidInShortfall", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "uint256", "name": "maxPrice", "type": "uint256" } ], "name": "TenderPriceTooHigh", "type": "error" }, { "inputs": [], "name": "UnlockingPaused", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "previousAdmin", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "beacon", "type": "address" } ], "name": "BeaconUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "AUCTIONEER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEVOPS_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "INITIALIZER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_BID_COUNT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_BID_PRICE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ROLLOVER_MANAGER", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "THREESIXTY_DAYCOUNT_SECONDS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "auctionEndTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "auctionStartTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "address", "name": "bidder", "type": "address" }, { "internalType": "address[]", "name": "bidCollateralTokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "auctionUnlockBid", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "bidCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20Upgradeable", "name": "", "type": "address" } ], "name": "collateralTokens", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dayCountFractionMantissa", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "revealedBids", "type": "bytes32[]" }, { "internalType": "bytes32[]", "name": "expiredRolloverBids", "type": "bytes32[]" }, { "internalType": "bytes32[]", "name": "unrevealedBids", "type": "bytes32[]" } ], "name": "getAllBids", "outputs": [ { "components": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "address", "name": "bidder", "type": "address" }, { "internalType": "uint256", "name": "bidPriceRevealed", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256[]", "name": "collateralAmounts", "type": "uint256[]" }, { "internalType": "address", "name": "purchaseToken", "type": "address" }, { "internalType": "address[]", "name": "collateralTokens", "type": "address[]" }, { "internalType": "bool", "name": "isRollover", "type": "bool" }, { "internalType": "address", "name": "rolloverPairOffTermRepoServicer", "type": "address" } ], "internalType": "struct TermAuctionRevealedBid[]", "name": "", "type": "tuple[]" }, { "components": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "address", "name": "bidder", "type": "address" }, { "internalType": "bytes32", "name": "bidPriceHash", "type": "bytes32" }, { "internalType": "uint256", "name": "bidPriceRevealed", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256[]", "name": "collateralAmounts", "type": "uint256[]" }, { "internalType": "address", "name": "purchaseToken", "type": "address" }, { "internalType": "address[]", "name": "collateralTokens", "type": "address[]" }, { "internalType": "bool", "name": "isRollover", "type": "bool" }, { "internalType": "address", "name": "rolloverPairOffTermRepoServicer", "type": "address" }, { "internalType": "bool", "name": "isRevealed", "type": "bool" } ], "internalType": "struct TermAuctionBid[]", "name": "", "type": "tuple[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "termRepoId_", "type": "string" }, { "internalType": "string", "name": "auctionId_", "type": "string" }, { "internalType": "uint256", "name": "auctionStartTime_", "type": "uint256" }, { "internalType": "uint256", "name": "revealTime_", "type": "uint256" }, { "internalType": "uint256", "name": "auctionEndTime_", "type": "uint256" }, { "internalType": "uint256", "name": "redemptionTimestamp_", "type": "uint256" }, { "internalType": "uint256", "name": "minimumTenderAmount_", "type": "uint256" }, { "internalType": "address", "name": "purchaseToken_", "type": "address" }, { "internalType": "contract IERC20Upgradeable[]", "name": "collateralTokens_", "type": "address[]" }, { "internalType": "address", "name": "termInitializer_", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "address", "name": "bidder", "type": "address" }, { "internalType": "bytes32", "name": "bidPriceHash", "type": "bytes32" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256[]", "name": "collateralAmounts", "type": "uint256[]" }, { "internalType": "address", "name": "purchaseToken", "type": "address" }, { "internalType": "address[]", "name": "collateralTokens", "type": "address[]" } ], "internalType": "struct TermAuctionBidSubmission[]", "name": "bidSubmissions", "type": "tuple[]" } ], "name": "lockBids", "outputs": [ { "internalType": "bytes32[]", "name": "", "type": "bytes32[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "address", "name": "bidder", "type": "address" }, { "internalType": "bytes32", "name": "bidPriceHash", "type": "bytes32" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256[]", "name": "collateralAmounts", "type": "uint256[]" }, { "internalType": "address", "name": "purchaseToken", "type": "address" }, { "internalType": "address[]", "name": "collateralTokens", "type": "address[]" } ], "internalType": "struct TermAuctionBidSubmission[]", "name": "bidSubmissions", "type": "tuple[]" }, { "internalType": "address", "name": "referralAddress", "type": "address" } ], "name": "lockBidsWithReferral", "outputs": [ { "internalType": "bytes32[]", "name": "", "type": "bytes32[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "address", "name": "bidder", "type": "address" }, { "internalType": "bytes32", "name": "bidPriceHash", "type": "bytes32" }, { "internalType": "uint256", "name": "bidPriceRevealed", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256[]", "name": "collateralAmounts", "type": "uint256[]" }, { "internalType": "address", "name": "purchaseToken", "type": "address" }, { "internalType": "address[]", "name": "collateralTokens", "type": "address[]" }, { "internalType": "bool", "name": "isRollover", "type": "bool" }, { "internalType": "address", "name": "rolloverPairOffTermRepoServicer", "type": "address" }, { "internalType": "bool", "name": "isRevealed", "type": "bool" } ], "internalType": "struct TermAuctionBid", "name": "bid", "type": "tuple" } ], "name": "lockRolloverBid", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "lockedBid", "outputs": [ { "components": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "internalType": "address", "name": "bidder", "type": "address" }, { "internalType": "bytes32", "name": "bidPriceHash", "type": "bytes32" }, { "internalType": "uint256", "name": "bidPriceRevealed", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256[]", "name": "collateralAmounts", "type": "uint256[]" }, { "internalType": "address", "name": "purchaseToken", "type": "address" }, { "internalType": "address[]", "name": "collateralTokens", "type": "address[]" }, { "internalType": "bool", "name": "isRollover", "type": "bool" }, { "internalType": "address", "name": "rolloverPairOffTermRepoServicer", "type": "address" }, { "internalType": "bool", "name": "isRevealed", "type": "bool" } ], "internalType": "struct TermAuctionBid", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lockingPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minimumTenderAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "rolloverManager", "type": "address" } ], "name": "pairRolloverManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "termAuction_", "type": "address" }, { "internalType": "contract ITermRepoServicer", "name": "termRepoServicer_", "type": "address" }, { "internalType": "contract ITermEventEmitter", "name": "emitter_", "type": "address" }, { "internalType": "contract ITermRepoCollateralManager", "name": "termRepoCollateralManager_", "type": "address" }, { "internalType": "contract ITermPriceOracle", "name": "termPriceOracle_", "type": "address" }, { "internalType": "address", "name": "devopsMultisig_", "type": "address" }, { "internalType": "address", "name": "adminWallet_", "type": "address" } ], "name": "pairTermContracts", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pauseLocking", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pauseUnlocking", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "purchaseToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "ids", "type": "bytes32[]" }, { "internalType": "uint256[]", "name": "prices", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "nonces", "type": "uint256[]" } ], "name": "revealBids", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "revealTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "termAuction", "outputs": [ { "internalType": "contract ITermAuction", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "termAuctionId", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "termRepoCollateralManager", "outputs": [ { "internalType": "contract ITermRepoCollateralManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "termRepoId", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "termRepoServicer", "outputs": [ { "internalType": "contract ITermRepoServicer", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "ids", "type": "bytes32[]" } ], "name": "unlockBids", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unlockingPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpauseLocking", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpauseUnlocking", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" } ], "name": "upgradeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b608051615f526200011f60003960008181610e3c01528181610e7c015281816113110152818161135101526113c90152615f526000f3fe60806040526004361061025e5760003560e01c80635c16456711610145578063ae91fa33116100bc578063ae91fa33146106d5578063b40a5627146106f2578063ba829d7114610709578063ba98b5ef14610720578063cc5b6e4a1461074d578063cdae1ee014610764578063cfe9232b14610784578063cffbc297146107a6578063d547741f146107d7578063d6725d0c146107f7578063e61f00e61461080f578063eb54f9ec1461082f578063f9202d631461084657600080fd5b80635c164567146105795780636d7331411461059957806375b238fc146105b05780637a6944c5146105d25780637d33274f146105e95780637dae3fb71461060a5780637e3f71d51461062a578063811b86cd1461064a5780638a5cd91e1461066a57806391d148541461067f578063a217fddf1461069f578063a95c4d62146106b457600080fd5b80633659cfe6116101d95780633659cfe61461041857806338665e9f146104385780633de81dc4146104655780633e836b3d146104865780633efbfd8c1461049b578063408f2e10146104bc57806341da5432146104d1578063475d266a146104e65780634b449cba146105065780634f1ef2861461051d57806352d1902d1461053057806354fd4d501461054557600080fd5b806301ffc9a7146102635780630283ce5b1461029857806302b65fb0146102ba5780631f642705146102ea578063201a6625146102ff578063248a9ca31461032157806325a2471a1461035157806327df3d3e146103685780632f2ff15d1461038a578063323c6183146103aa578063357a77d2146103ca57806336568abe146103f8575b600080fd5b34801561026f57600080fd5b5061028361027e366004614bdc565b610874565b60405190151581526020015b60405180910390f35b3480156102a457600080fd5b506102b86102b3366004614c76565b6108ab565b005b3480156102c657600080fd5b506102dc600080516020615ebd83398151915281565b60405190815260200161028f565b3480156102f657600080fd5b506102b8610a30565b34801561030b57600080fd5b506102dc600080516020615e3683398151915281565b34801561032d57600080fd5b506102dc61033c366004614d01565b600090815260c9602052604090206001015490565b34801561035d57600080fd5b506102dc6101325481565b34801561037457600080fd5b506102dc600080516020615e5683398151915281565b34801561039657600080fd5b506102b86103a5366004614d1a565b610ad1565b3480156103b657600080fd5b506102b86103c5366004614eb3565b610afb565b3480156103d657600080fd5b50610137546103eb906001600160a01b031681565b60405161028f9190614fa6565b34801561040457600080fd5b506102b8610413366004614d1a565b610db4565b34801561042457600080fd5b506102b8610433366004614fba565b610e32565b34801561044457600080fd5b50610458610453366004614fd7565b610efa565b60405161028f919061502d565b34801561047157600080fd5b50610136546103eb906001600160a01b031681565b34801561049257600080fd5b506102b86110c4565b3480156104a757600080fd5b5061013d546102839062010000900460ff1681565b3480156104c857600080fd5b506102dc609681565b3480156104dd57600080fd5b506102b8611128565b3480156104f257600080fd5b50610458610501366004615071565b61118d565b34801561051257600080fd5b506102dc6101315481565b6102b861052b3660046150b2565b611307565b34801561053c57600080fd5b506102dc6113bc565b34801561055157600080fd5b5060408051808201825260058152640302e362e360dc1b6020820152905161028f919061517d565b34801561058557600080fd5b506102b86105943660046151b0565b61146a565b3480156105a557600080fd5b506102dc61012e5481565b3480156105bc57600080fd5b506102dc600080516020615edd83398151915281565b3480156105de57600080fd5b506102dc6101335481565b3480156105f557600080fd5b5061013a546103eb906001600160a01b031681565b34801561061657600080fd5b506102b8610625366004615071565b611505565b34801561063657600080fd5b5061013d5461028390610100900460ff1681565b34801561065657600080fd5b506102b8610665366004614fba565b6116a7565b34801561067657600080fd5b506102b86116d7565b34801561068b57600080fd5b5061028361069a366004614d1a565b611741565b3480156106ab57600080fd5b506102dc600081565b3480156106c057600080fd5b50610134546103eb906001600160a01b031681565b3480156106e157600080fd5b506102dc68056bc75e2d6310000081565b3480156106fe57600080fd5b506102dc61013c5481565b34801561071557600080fd5b506102dc6101305481565b34801561072c57600080fd5b5061074061073b366004614d01565b61176c565b60405161028f919061536d565b34801561075957600080fd5b506102dc61012d5481565b34801561077057600080fd5b506102b861077f366004615380565b6118c9565b34801561079057600080fd5b506102dc600080516020615efd83398151915281565b3480156107b257600080fd5b506102836107c1366004614fba565b6101356020526000908152604090205460ff1681565b3480156107e357600080fd5b506102b86107f2366004614d1a565b611a9a565b34801561080357600080fd5b506102dc6301da9c0081565b34801561081b57600080fd5b506102b861082a366004615416565b611abf565b34801561083b57600080fd5b506102dc61012f5481565b34801561085257600080fd5b506108666108613660046151b0565b611c92565b60405161028f9291906154a3565b60006001600160e01b03198216637965db0b60e01b14806108a557506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020615efd8339815191526108c381611ccb565b600087815261013b602052604090206008015460ff16156108f75760405163041753a560e31b815260040160405180910390fd5b6101395461012e546040516307fec0e360e01b81526001600160a01b03909216916307fec0e391610935918b90600401918252602082015260400190565b600060405180830381600087803b15801561094f57600080fd5b505af1158015610963573d6000803e3d6000fd5b5050505060005b84811015610a2657610136546001600160a01b03166348717eb788888885818110610997576109976155ae565b90506020020160208101906109ac9190614fba565b8787868181106109be576109be6155ae565b905060200201356040518463ffffffff1660e01b81526004016109e3939291906155c4565b600060405180830381600087803b1580156109fd57600080fd5b505af1158015610a11573d6000803e3d6000fd5b5050505080610a1f906155fe565b905061096a565b5050505050505050565b600080516020615edd833981519152610a4881611ccb565b61013d805462ff00001916620100001790556101395461012e5461012d54604051631258284760e21b81526001600160a01b0390931692634960a11c92610a9c929091600401918252602082015260400190565b600060405180830381600087803b158015610ab657600080fd5b505af1158015610aca573d6000803e3d6000fd5b5050505050565b600082815260c96020526040902060010154610aec81611ccb565b610af68383611cd5565b505050565b600054610100900460ff1615808015610b1b5750600054600160ff909116105b80610b3c5750610b2a30611d5b565b158015610b3c575060005460ff166001145b610ba45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610bc7576000805461ff0019166101001790555b610bcf611d6a565b610bd7611d6a565b610bdf611d93565b610bf7600080516020615e5683398151915283611cd5565b8c8c604051602001610c0a929190615617565b60408051601f1981840301815290829052805160209182012061012d55610c35918d918d9101615617565b60408051601f19818403018152919052805160209091012061012e5587891115610c7c576040516372067af960e11b8152600481018a905260248101899052604401610b9b565b61012f8990556101308890556101318790556101328590556301da9c00670de0b6b3a7640000610cac8989615627565b610cb6919061563a565b610cc09190615651565b6101335561013480546001600160a01b0319166001600160a01b03861617905560005b83518160ff161015610d4d5760016101356000868460ff1681518110610d0b57610d0b6155ae565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055610d4681615673565b9050610ce3565b50600061013c5561013d805460ff191690558015610da5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050505050565b6001600160a01b0381163314610e245760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610b9b565b610e2e8282611dc2565b5050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e7a5760405162461bcd60e51b8152600401610b9b90615692565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610eac611e29565b6001600160a01b031614610ed25760405162461bcd60e51b8152600401610b9b906156de565b610edb81611e45565b60408051600080825260208201909252610ef791839190611ec8565b50565b606061013054421180610f0f575061012f5442105b15610f2d5760405163f046007760e01b815260040160405180910390fd5b61013d54610100900460ff1615610f575760405163059e557960e41b815260040160405180910390fd5b610f5f612033565b6001600160a01b0382163303610f88576040516333d8ca2d60e11b815260040160405180910390fd5b6000836001600160401b03811115610fa257610fa2614d8b565b604051908082528060200260200182016040528015610fcb578160200160208202803683370190505b50905060005b848110156110b0576000611011878784818110610ff057610ff06155ae565b9050602002810190611002919061572a565b61100b90615809565b3361208c565b9050806000015483838151811061102a5761102a6155ae565b60209081029190910101526101395461012e5460405163050ecc8960e11b81526001600160a01b0390921691630a1d99129161106c9185908a90600401615928565b600060405180830381600087803b15801561108657600080fd5b505af115801561109a573d6000803e3d6000fd5b5050505050806110a9906155fe565b9050610fd1565b5090506110bd600160fb55565b9392505050565b600080516020615edd8339815191526110dc81611ccb565b61013d805461ff00191690556101395461012e5461012d5460405163b423ac9d60e01b8152600481019290925260248201526001600160a01b039091169063b423ac9d90604401610a9c565b600080516020615edd83398151915261114081611ccb565b61013d805462ff0000191690556101395461012e5461012d54604051632044037760e21b8152600481019290925260248201526001600160a01b03909116906381100ddc90604401610a9c565b6060610130544211806111a2575061012f5442105b156111c05760405163f046007760e01b815260040160405180910390fd5b61013d54610100900460ff16156111ea5760405163059e557960e41b815260040160405180910390fd5b6111f2612033565b6000826001600160401b0381111561120c5761120c614d8b565b604051908082528060200260200182016040528015611235578160200160208202803683370190505b50905060005b838110156112fa57600061125a868684818110610ff057610ff06155ae565b90508060000154838381518110611273576112736155ae565b60209081029190910101526101395461012e5460405163050ecc8960e11b81526001600160a01b0390921691630a1d9912916112b6918590600090600401615928565b600060405180830381600087803b1580156112d057600080fd5b505af11580156112e4573d6000803e3d6000fd5b5050505050806112f3906155fe565b905061123b565b5090506108a5600160fb55565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361134f5760405162461bcd60e51b8152600401610b9b90615692565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611381611e29565b6001600160a01b0316146113a75760405162461bcd60e51b8152600401610b9b906156de565b6113b082611e45565b610e2e82826001611ec8565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114575760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610b9b565b50600080516020615e7683398151915290565b6101305442101561148e576040516302a3f58760e51b815260040160405180910390fd5b60005b858110156114fc576114ec8787838181106114ae576114ae6155ae565b905060200201358686848181106114c7576114c76155ae565b905060200201358585858181106114e0576114e06155ae565b90506020020135612707565b6114f5816155fe565b9050611491565b50505050505050565b61013d5462010000900460ff161561153057604051631370a4e760e31b815260040160405180910390fd5b611538612033565b61012f5442101561155c5760405163f046007760e01b815260040160405180910390fd5b61013054421180156115e3575061013a60009054906101000a90046001600160a01b03166001600160a01b0316638dfea9e76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e19190615a34565b155b156116015760405163f046007760e01b815260040160405180910390fd5b60005b8181101561169c5761168c838383818110611621576116216155ae565b905060200201353361013b6000878787818110611640576116406155ae565b90506020020135815260200190815260200160002060070161013b600088888881811061166f5761166f6155ae565b905060200201358152602001908152602001600020600501612839565b611695816155fe565b9050611604565b50610e2e600160fb55565b600080516020615edd8339815191526116bf81611ccb565b610e2e600080516020615ebd83398151915283611cd5565b600080516020615edd8339815191526116ef81611ccb565b61013d805461ff0019166101001790556101395461012e5461012d5460405163210d6add60e21b81526001600160a01b0390931692638435ab7492610a9c929091600401918252602082015260400190565b600091825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611774614a63565b600082815261013b60209081526040918290208251610160810184528154815260018201546001600160a01b03168184015260028201548185015260038201546060820152600482015460808201526005820180548551818602810186019096528086529194929360a0860193929083018282801561181257602002820191906000526020600020905b8154815260200190600101908083116117fe575b505050918352505060068201546001600160a01b0316602080830191909152600783018054604080518285028101850182528281529401939283018282801561188457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611866575b50505091835250506008919091015460ff808216151560208401526001600160a01b036101008304166040840152600160a81b90910416151560609091015292915050565b600080516020615e568339815191526118e181611ccb565b61013d5460ff161561190657604051634ce377bb60e11b815260040160405180910390fd5b61013d805460ff191660011790556001600160a01b03871661193b5760405163a258508760e01b815260040160405180910390fd5b61013780546001600160a01b03808a166001600160a01b03199283161790925561013a8054928b1692909116919091179055611985600080516020615efd83398151915289611cd5565b61199d600080516020615e3683398151915284611cd5565b6119b5600080516020615edd83398151915283611cd5565b61013980546001600160a01b038881166001600160a01b03199283168117909355610136805489831690841617905561013880549188169190921617905561012d5461012e5461012f54610130546101325461013354604051632b6cea3160e01b8152600481019690965260248601949094523060448601526064850192909252608484015268056bc75e2d6310000060a484015260c483015260e4820152632b6cea319061010401600060405180830381600087803b158015611a7857600080fd5b505af1158015611a8c573d6000803e3d6000fd5b505050505050505050505050565b600082815260c96020526040902060010154611ab581611ccb565b610af68383611dc2565b61013d54610100900460ff1615611ae95760405163059e557960e41b815260040160405180910390fd5b600080516020615ebd833981519152611b0181611ccb565b611b09612033565b61013054421115611b2d5760405163f046007760e01b815260040160405180910390fd5b8160800135600003611c77578135600090815261013b60205260408120600401549003611b70576040516311ebb27f60e11b815282356004820152602401610b9b565b8135600090815261013b602052604081208181556001810180546001600160a01b031916905560028101829055600381018290556004810182905590611bb96005830182614abe565b6006820180546001600160a01b0319169055611bd9600783016000614abe565b5060080180546001600160b01b031916905561013c805460019190600090611c02908490615627565b90915550506101395461012e546040516307fec0e360e01b81526004810191909152833560248201526001600160a01b03909116906307fec0e390604401600060405180830381600087803b158015611c5a57600080fd5b505af1158015611c6e573d6000803e3d6000fd5b50505050611c88565b611c88611c8383615a5c565b612ab6565b610e2e600160fb55565b606080600080516020615efd833981519152611cad81611ccb565b611cbb898989898989612cf2565b9250925050965096945050505050565b610ef781336131f1565b611cdf8282611741565b610e2e57600082815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055611d173390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6001600160a01b03163b151590565b600054610100900460ff16611d915760405162461bcd60e51b8152600401610b9b90615b49565b565b600054610100900460ff16611dba5760405162461bcd60e51b8152600401610b9b90615b49565b611d9161324a565b611dcc8282611741565b15610e2e57600082815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600080516020615e76833981519152546001600160a01b031690565b600080516020615e36833981519152611e5d81611ccb565b6101395460405163b3c2d50b60e01b81523060048201526001600160a01b0384811660248301529091169063b3c2d50b906044015b600060405180830381600087803b158015611eac57600080fd5b505af1158015611ec0573d6000803e3d6000fd5b505050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611efb57610af683613271565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611f55575060408051601f3d908101601f19168201909252611f5291810190615b94565b60015b611fb85760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610b9b565b600080516020615e7683398151915281146120275760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610b9b565b50610af683838361330b565b600260fb54036120855760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b9b565b600260fb55565b6000826020015182816001600160a01b0316816001600160a01b0316146120c6576040516305732abb60e51b815260040160405180910390fd5b609661013c54106120ea576040516346f317d760e01b815260040160405180910390fd5b8451600090815261013b60205260408120600401541580159190612157576020808801518851600090815261013b9092526040909120600101546001600160a01b0390811691161461214f576040516305732abb60e51b815260040160405180910390fd5b508551612166565b86516121639087613336565b90505b60a0870151610134546001600160a01b039081169116146121a0578660a0015160405163e34b641f60e01b8152600401610b9b9190614fa6565b60005b8760c001515181101561223e5761013560008960c0015183815181106121cb576121cb6155ae565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1661222e578760c00151818151811061220c5761220c6155ae565b602002602001015160405163052baa4960e31b8152600401610b9b9190614fa6565b612237816155fe565b90506121a3565b50610132548760600151101561226f57866060015160405163235c188560e01b8152600401610b9b91815260200190565b61228687606001518860c0015189608001516133bd565b156122a4576040516354f8f85560e11b815260040160405180910390fd5b6000805b8860c001515181101561251557831561245a57600083815261013b602052604090206005018054829081106122df576122df6155ae565b9060005260206000200154915088608001518181518110612302576123026155ae565b60200260200101518210156123cb576101365460208a015160c08b015180516001600160a01b0390931692632391281c92919085908110612345576123456155ae565b6020026020010151858d608001518681518110612364576123646155ae565b60200260200101516123769190615627565b6040518463ffffffff1660e01b8152600401612394939291906155c4565b600060405180830381600087803b1580156123ae57600080fd5b505af11580156123c2573d6000803e3d6000fd5b50505050612505565b886080015181815181106123e1576123e16155ae565b6020026020010151821115612455576101365460208a015160c08b015180516001600160a01b03909316926348717eb792919085908110612424576124246155ae565b60200260200101518c608001518581518110612442576124426155ae565b6020026020010151866123769190615627565b612505565b6101365460208a015160c08b015180516001600160a01b0390931692632391281c9291908590811061248e5761248e6155ae565b60200260200101518c6080015185815181106124ac576124ac6155ae565b60200260200101516040518463ffffffff1660e01b81526004016124d2939291906155c4565b600060405180830381600087803b1580156124ec57600080fd5b505af1158015612500573d6000803e3d6000fd5b505050505b61250e816155fe565b90506122a8565b5060405180610160016040528083815260200189602001516001600160a01b03168152602001896040015181526020016000815260200189606001518152602001896080015181526020018960a001516001600160a01b031681526020018960c00151815260200160001515815260200160006001600160a01b031681526020016000151581525061013b60008481526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005019080519060200190612622929190614adc565b5060c08201516006820180546001600160a01b0319166001600160a01b0390921691909117905560e08201518051612664916007840191602090910190614b27565b50610100828101516008929092018054610120850151610140909501516001600160a81b0319909116931515610100600160a81b031916939093176001600160a01b039094169091029290921760ff60a81b1916600160a81b91151591909102179055826126e657600161013c60008282546126e09190615bad565b90915550505b50600090815261013b602052604090209695505050505050565b600160fb55565b600083815261013b6020908152604091829020600201548251918201859052918101839052606001604051602081830303815290604052805190602001201461276657604051637afe112160e11b815260048101849052602401610b9b565b68056bc75e2d631000008211156127a257604051632dc71e8d60e01b81526004810184905268056bc75e2d631000006024820152604401610b9b565b600083815261013b60205260409081902060038101849055600801805460ff60a81b1916600160a81b1790556101395461012e5491516315d1070b60e11b8152600481019290925260248201859052604482018490526001600160a01b031690632ba20e1690606401600060405180830381600087803b15801561282557600080fd5b505af11580156114fc573d6000803e3d6000fd5b600084815261013b6020526040812060040154900361286e576040516311ebb27f60e11b815260048101859052602401610b9b565b600084815261013b60205260409020600101546001600160a01b038481169116146128ac576040516305732abb60e51b815260040160405180910390fd5b600084815261013b602052604090206008015460ff16156128e05760405163041753a560e31b815260040160405180910390fd5b60005b82548110156129b4576101365483546001600160a01b03909116906348717eb7908690869085908110612918576129186155ae565b9060005260206000200160009054906101000a90046001600160a01b0316858581548110612948576129486155ae565b90600052602060002001546040518463ffffffff1660e01b8152600401612971939291906155c4565b600060405180830381600087803b15801561298b57600080fd5b505af115801561299f573d6000803e3d6000fd5b50505050806129ad906155fe565b90506128e3565b50600084815261013b602052604081208181556001810180546001600160a01b0319169055600281018290556003810182905560048101829055906129fc6005830182614abe565b6006820180546001600160a01b0319169055612a1c600783016000614abe565b5060080180546001600160b01b031916905561013c805460019190600090612a45908490615627565b90915550506101395461012e546040516307fec0e360e01b81526001600160a01b03909216916307fec0e391612a88918890600401918252602082015260400190565b600060405180830381600087803b158015612aa257600080fd5b505af1158015610a26573d6000803e3d6000fd5b609661013c5410612ada576040516346f317d760e01b815260040160405180910390fd5b806101000151612b0357805160405163103dad4560e11b81526004810191909152602401610b9b565b6101325481608001511015612b3357806080015160405163235c188560e01b8152600401610b9b91815260200190565b8051600090815261013b602052604090206004015460c082015161013454911515916001600160a01b03908116911614612b805760405163ed82d81b60e01b815260040160405180910390fd5b8151600090815261013b602090815260409182902084518155818501516001820180546001600160a01b0319166001600160a01b03909216919091179055918401516002830155606084015160038301556080840151600483015560a08401518051859392612bf6926005850192910190614adc565b5060c08201516006820180546001600160a01b0319166001600160a01b0390921691909117905560e08201518051612c38916007840191602090910190614b27565b50610100828101516008929092018054610120850151610140909501516001600160a81b0319909116931515610100600160a81b031916939093176001600160a01b039094169091029290921760ff60a81b1916600160a81b9115159190910217905580612cba57600161013c6000828254612cb49190615bad565b90915550505b6101395461012e5460405163050ecc8960e11b81526001600160a01b0390921691630a1d991291611e92918690600090600401615bc0565b61013c54606090819083612d06878a615bad565b612d109190615bad565b14612d355761013c54604051633c123a1960e01b8152600401610b9b91815260200190565b60005b85811015612eb957600061013b6000898985818110612d5957612d596155ae565b90506020020135815260200190815260200160002090508060040154600003612db157878783818110612d8e57612d8e6155ae565b905060200201356040516311ebb27f60e11b8152600401610b9b91815260200190565b600881015460ff16612df257878783818110612dcf57612dcf6155ae565b9050602002013560405163103dad4560e11b8152600401610b9b91815260200190565b60008160080160019054906101000a90046001600160a01b03169050806001600160a01b0316631320834f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e709190615b94565b421115612e87578154612e8290613614565b612ea6565b8154604051631a034f1360e11b81526004810191909152602401610b9b565b505080612eb2906155fe565b9050612d38565b606060008080612eca8d8d8a6136ac565b929650909450925090506000612ee18e8e86613d13565b90506000836001600160401b03811115612efd57612efd614d8b565b604051908082528060200260200182016040528015612f3657816020015b612f23614a63565b815260200190600190039081612f1b5790505b50905060008097505b8a88101561316b57600061013b60008e8e8c818110612f6057612f606155ae565b90506020020135815260200190815260200160002090508060040154600003612f95578c8c8a818110612d8e57612d8e6155ae565b6008810154600160a81b900460ff1615612fde578c8c8a818110612fbb57612fbb6155ae565b9050602002013560405163b53dcb6360e01b8152600401610b9b91815260200190565b60408051610160810182528254815260018301546001600160a01b031660208083019190915260028401548284015260038401546060830152600484015460808301526005840180548451818402810184019095528085529293859360a086019391929183018282801561307157602002820191906000526020600020905b81548152602001906001019080831161305d575b505050918352505060068201546001600160a01b031660208083019190915260078301805460408051828502810185018252828152940193928301828280156130e357602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116130c5575b50505091835250506008919091015460ff808216151560208401526001600160a01b036101008304166040840152600160a81b9091041615156060909101528351849084908110613136576131366155ae565b60200260200101819052508161314b906155fe565b915061315a8160000154613614565b50613164886155fe565b9750612f3f565b600097505b838810156131cb5786888151811061318a5761318a6155ae565b60200260200101518282815181106131a4576131a46155ae565b6020026020010181905250806131b9906155fe565b90506131c4886155fe565b9750613170565b61013c54156131dc576131dc615bf1565b50909e909d509b505050505050505050505050565b6131fb8282611741565b610e2e5761320881613f59565b613213836020613f6b565b604051602001613224929190615c07565b60408051601f198184030181529082905262461bcd60e51b8252610b9b9160040161517d565b600054610100900460ff166127005760405162461bcd60e51b8152600401610b9b90615b49565b61327a81611d5b565b6132dc5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610b9b565b600080516020615e7683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61331483614106565b6000825111806133215750805b15610af6576133308383614146565b50505050565b60008083833060405160200161337093929190928352606091821b6001600160601b03199081166020850152911b16603482015260480190565b60408051601f198184030181529181528151602092830120600081815261013b909352912060040154909150156110bd576040516310f5216760e21b815260048101829052602401610b9b565b61013854610134546040516303d3c9db60e21b815260009283926001600160a01b0391821692630f4f276c926133f99216908990600401615c76565b602060405180830381865afa158015613416573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343a9190615c8f565b60408051602081019091526000808252919250905b85518110156135f257600086828151811061346c5761346c6155ae565b602090810291909101015161013654604051632a1e8cdb60e01b81529192506000916001600160a01b0390911690632a1e8cdb906134ae908590600401614fa6565b602060405180830381865afa1580156134cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134ef9190615b94565b9050868381518110613503576135036155ae565b60200260200101516000036135195750506135e2565b60006135d061013860009054906101000a90046001600160a01b03166001600160a01b0316630f4f276c858b8881518110613556576135566155ae565b60200260200101516040518363ffffffff1660e01b815260040161357b929190615c76565b602060405180830381865afa158015613598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135bc9190615c8f565b60405180602001604052808581525061416b565b90506135dc81866141ae565b94505050505b6135eb816155fe565b905061344f565b50815181511015613608576001925050506110bd565b50600095945050505050565b600081815261013b602052604081208181556001810180546001600160a01b03191690556002810182905560038101829055600481018290559061365b6005830182614abe565b6006820180546001600160a01b031916905561367b600783016000614abe565b5060080180546001600160b01b031916905561013c8054600191906000906136a4908490615627565b909155505050565b606060008080858582826001600160401b038111156136cd576136cd614d8b565b60405190808252806020026020018201604052801561370657816020015b6136f3614a63565b8152602001906001900390816136eb5790505b50905060008060005b8b811015613cfe57600061013b60008f8f85818110613730576137306155ae565b90506020020135815260200190815260200160002090508060040154600003613765578d8d83818110612d8e57612d8e6155ae565b806003015483111561378a576040516370dcb33760e11b815260040160405180910390fd5b80600301549250600881015460ff16156139f25760008160080160019054906101000a90046001600160a01b03169050806001600160a01b0316631320834f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381c9190615b94565b42111561384257815460405163bcbe400960e01b81526004810191909152602401610b9b565b61384c82826141da565b6139ec57613859876155fe565b60408051610160810182528454815260018501546001600160a01b03166020808301919091526002860154828401526003860154606083015260048601546080830152600586018054845181840281018401909552808552949b509193869360a086019390929091908301828280156138f157602002820191906000526020600020905b8154815260200190600101908083116138dd575b505050918352505060068201546001600160a01b0316602080830191909152600783018054604080518285028101850182528281529401939283018282801561396357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613945575b50505091835250506008919091015460ff808216151560208401526001600160a01b036101008304166040840152600160a81b90910416151560609091015286518790879081106139b6576139b66155ae565b6020026020010181905250846139cb906155fe565b94506139d688615cd0565b97506139e58260000154613614565b5050613cee565b50613a24565b6008810154600160a81b900460ff16613a245780546040516362d45c6f60e11b81526004810191909152602401610b9b565b613ae68160040154826003015483600701805480602002602001604051908101604052809291908181526020018280548015613a8957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613a6b575b505050505084600501805480602002602001604051908101604052809291908181526020018280548015613adc57602002820191906000526020600020905b815481526020019060010190808311613ac8575b505050505061458c565b15613cec576101395461012e548254604051635bcf235d60e01b8152600481019290925260248201526001600160a01b0390911690635bcf235d90604401600060405180830381600087803b158015613b3e57600080fd5b505af1158015613b52573d6000803e3d6000fd5b5050505085613b60906155fe565b60408051610160810182528354815260018401546001600160a01b03166020808301919091526002850154828401526003850154606083015260048501546080830152600585018054845181840281018401909552808552949a509193859360a08601939092909190830182828015613bf857602002820191906000526020600020905b815481526020019060010190808311613be4575b505050918352505060068201546001600160a01b03166020808301919091526007830180546040805182850281018501825282815294019392830182828015613c6a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613c4c575b50505091835250506008919091015460ff808216151560208401526001600160a01b036101008304166040840152600160a81b9091041615156060909101528551869086908110613cbd57613cbd6155ae565b602002602001018190525083613cd2906155fe565b9350613cdd87615cd0565b9650613cec8160000154613614565b505b613cf7816155fe565b905061370f565b50919b939a5091985090965090945050505050565b60606000826001600160401b03811115613d2f57613d2f614d8b565b604051908082528060200260200182016040528015613d6857816020015b613d55614b7c565b815260200190600190039081613d4d5790505b5090506000805b85811015613f4e57600061013b6000898985818110613d9057613d906155ae565b90506020020135815260200190815260200160002090508060040154600003613db95750613f3e565b60408051610160810182528254815260018301546001600160a01b03166020808301919091526002840154828401526003840154606083015260048401546080830152600584018054845181840281018401909552808552613f0494869360a0860193919290830182828015613e4e57602002820191906000526020600020905b815481526020019060010190808311613e3a575b505050918352505060068201546001600160a01b03166020808301919091526007830180546040805182850281018501825282815294019392830182828015613ec057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613ea2575b50505091835250506008919091015460ff808216151560208401526001600160a01b036101008304166040840152600160a81b9091041615156060909101526147fd565b848481518110613f1657613f166155ae565b60200260200101819052508280613f2c906155fe565b935050613f3c8160000154613614565b505b613f47816155fe565b9050613d6f565b509095945050505050565b60606108a56001600160a01b03831660145b60606000613f7a83600261563a565b613f85906002615bad565b6001600160401b03811115613f9c57613f9c614d8b565b6040519080825280601f01601f191660200182016040528015613fc6576020820181803683370190505b509050600360fc1b81600081518110613fe157613fe16155ae565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110614010576140106155ae565b60200101906001600160f81b031916908160001a905350600061403484600261563a565b61403f906001615bad565b90505b60018111156140b7576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614073576140736155ae565b1a60f81b828281518110614089576140896155ae565b60200101906001600160f81b031916908160001a90535060049490941c936140b081615cd0565b9050614042565b5083156110bd5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610b9b565b61410f81613271565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606110bd8383604051806060016040528060278152602001615e966027913961488f565b60408051602081019091526000815260405180602001604052806141a561419e8660000151670de0b6b3a7640000614907565b8551614913565b90529392505050565b60408051602081019091526000815260405180602001604052806141a58560000151856000015161491f565b6001820154604051632762697d60e01b815260009182916001600160a01b0385811692632762697d926142139290911690600401614fa6565b602060405180830381865afa158015614230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142549190615b94565b9050806000036142685760009150506108a5565b604080516020808201835261013354825282518082018085526101375463fa19d0ed60e01b90915293516000946142f9949383926001600160a01b039092169163fa19d0ed91602480860192908187030181865afa1580156142ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f29190615b94565b905261492b565b600001519050600061435261434d6040518060200160405280670de0b6b3a764000087614326919061563a565b905260408051602081019091528061434687670de0b6b3a7640000615627565b905261416b565b61496a565b9050856004015481101561436857600486018190555b600081670de0b6b3a76400008860040154614383919061563a565b61438d9190615651565b90506000866001600160a01b0316633de81dc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143f39190615ce7565b6001890154604051636f3fc39760e11b815291925060009182916001600160a01b038086169263de7f872e9261442d921690600401614fa6565b600060405180830381865afa15801561444a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526144729190810190615d5f565b90925090506000805b8351811015614510576144b56040518060200160405280888152508483815181106144a8576144a86155ae565b6020026020010151614982565b91508b60050181815481106144cc576144cc6155ae565b9060005260206000200154821461450057818c60050182815481106144f3576144f36155ae565b6000918252602090912001555b614509816155fe565b905061447b565b506101395461012e5460405163050ecc8960e11b81526001600160a01b0390921691630a1d991291614549918f90600090600401615928565b600060405180830381600087803b15801561456357600080fd5b505af1158015614577573d6000803e3d6000fd5b5060019e9d5050505050505050505050505050565b6000808460000361459e57508461461b565b60006145e86040518060200160405280670de0b6b3a76400008152506145e360405180602001604052806101335481525060405180602001604052808b81525061492b565b6141ae565b905061461761434d6040518060200160405280670de0b6b3a76400008b61460f919061563a565b90528361492b565b9150505b61013854610134546040516303d3c9db60e21b81526000926001600160a01b0390811692630f4f276c9261465792909116908690600401615c76565b602060405180830381865afa158015614674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146989190615c8f565b60408051602081019091526000808252919250905b86518110156147d65760008782815181106146ca576146ca6155ae565b6020908102919091010151610136546040516320db25d560e01b81529192506000916001600160a01b03909116906320db25d59061470c908590600401614fa6565b602060405180830381865afa158015614729573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061474d9190615b94565b9050878381518110614761576147616155ae565b60200260200101516000036147775750506147c6565b60006147b461013860009054906101000a90046001600160a01b03166001600160a01b0316630f4f276c858c8881518110613556576135566155ae565b90506147c081866141ae565b94505050505b6147cf816155fe565b90506146ad565b508151815110156147ed57600193505050506147f5565b600093505050505b949350505050565b614805614b7c565b6040518061012001604052808360000151815260200183602001516001600160a01b0316815260200183606001518152602001836080015181526020018360a0015181526020018360c001516001600160a01b031681526020018360e001518152602001836101000151151581526020018361012001516001600160a01b03168152509050919050565b6060600080856001600160a01b0316856040516148ac9190615e23565b600060405180830381855af49150503d80600081146148e7576040519150601f19603f3d011682016040523d82523d6000602084013e6148ec565b606091505b50915091506148fd8683838761499a565b9695505050505050565b60006110bd828461563a565b60006110bd8284615651565b60006110bd8284615bad565b6040805160208101909152600081526040518060200160405280670de0b6b3a764000061496086600001518660000151614907565b6141a59190615651565b80516000906108a590670de0b6b3a764000090615651565b60008061498f8484614a11565b90506147f58161496a565b60608315614a07578251600003614a00576149b485611d5b565b614a005760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b9b565b50816147f5565b6147f58383614a39565b60408051602081019091526000815260405180602001604052806141a5856000015185614907565b815115614a495781518083602001fd5b8060405162461bcd60e51b8152600401610b9b919061517d565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a0820181905260c0820183905260e08201526101008101829052610120810182905261014081019190915290565b5080546000825590600052602060002090810190610ef79190614bc7565b828054828255906000526020600020908101928215614b17579160200282015b82811115614b17578251825591602001919060010190614afc565b50614b23929150614bc7565b5090565b828054828255906000526020600020908101928215614b17579160200282015b82811115614b1757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614b47565b604080516101208101825260008082526020820181905291810182905260608082018390526080820181905260a0820183905260c082015260e0810182905261010081019190915290565b5b80821115614b235760008155600101614bc8565b600060208284031215614bee57600080fd5b81356001600160e01b0319811681146110bd57600080fd5b6001600160a01b0381168114610ef757600080fd5b8035614c2681614c06565b919050565b60008083601f840112614c3d57600080fd5b5081356001600160401b03811115614c5457600080fd5b6020830191508360208260051b8501011115614c6f57600080fd5b9250929050565b60008060008060008060808789031215614c8f57600080fd5b863595506020870135614ca181614c06565b945060408701356001600160401b0380821115614cbd57600080fd5b614cc98a838b01614c2b565b90965094506060890135915080821115614ce257600080fd5b50614cef89828a01614c2b565b979a9699509497509295939492505050565b600060208284031215614d1357600080fd5b5035919050565b60008060408385031215614d2d57600080fd5b823591506020830135614d3f81614c06565b809150509250929050565b60008083601f840112614d5c57600080fd5b5081356001600160401b03811115614d7357600080fd5b602083019150836020828501011115614c6f57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715614dc357614dc3614d8b565b60405290565b60405161016081016001600160401b0381118282101715614dc357614dc3614d8b565b604051601f8201601f191681016001600160401b0381118282101715614e1457614e14614d8b565b604052919050565b60006001600160401b03821115614e3557614e35614d8b565b5060051b60200190565b600082601f830112614e5057600080fd5b81356020614e65614e6083614e1c565b614dec565b82815260059290921b84018101918181019086841115614e8457600080fd5b8286015b84811015614ea8578035614e9b81614c06565b8352918301918301614e88565b509695505050505050565b6000806000806000806000806000806000806101408d8f031215614ed657600080fd5b6001600160401b038d351115614eeb57600080fd5b614ef88e8e358f01614d4a565b909c509a506001600160401b0360208e01351115614f1557600080fd5b614f258e60208f01358f01614d4a565b909a50985060408d0135975060608d0135965060808d0135955060a08d0135945060c08d01359350614f5960e08e01614c1b565b92506001600160401b036101008e01351115614f7457600080fd5b614f858e6101008f01358f01614e3f565b9150614f946101208e01614c1b565b90509295989b509295989b509295989b565b6001600160a01b0391909116815260200190565b600060208284031215614fcc57600080fd5b81356110bd81614c06565b600080600060408486031215614fec57600080fd5b83356001600160401b0381111561500257600080fd5b61500e86828701614c2b565b909450925050602084013561502281614c06565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561506557835183529284019291840191600101615049565b50909695505050505050565b6000806020838503121561508457600080fd5b82356001600160401b0381111561509a57600080fd5b6150a685828601614c2b565b90969095509350505050565b600080604083850312156150c557600080fd5b82356150d081614c06565b91506020838101356001600160401b03808211156150ed57600080fd5b818601915086601f83011261510157600080fd5b81358181111561511357615113614d8b565b615125601f8201601f19168501614dec565b9150808252878482850101111561513b57600080fd5b80848401858401376000848284010152508093505050509250929050565b60005b8381101561517457818101518382015260200161515c565b50506000910152565b602081526000825180602084015261519c816040850160208701615159565b601f01601f19169190910160400192915050565b600080600080600080606087890312156151c957600080fd5b86356001600160401b03808211156151e057600080fd5b6151ec8a838b01614c2b565b9098509650602089013591508082111561520557600080fd5b6152118a838b01614c2b565b90965094506040890135915080821115614ce257600080fd5b6001600160a01b03169052565b600081518084526020808501945080840160005b838110156152675781518752958201959082019060010161524b565b509495945050505050565b600081518084526020808501945080840160005b838110156152675781516001600160a01b031687529582019590820190600101615286565b60006101608251845260208301516152c6602086018261522a565b5060408301516040850152606083015160608501526080830151608085015260a08301518160a08601526152fc82860182615237565b91505060c083015161531160c086018261522a565b5060e083015184820360e08601526153298282615272565b915050610100808401516153408287018215159052565b5050610120808401516153558287018261522a565b50506101409283015115159390920192909252919050565b6020815260006110bd60208301846152ab565b600080600080600080600060e0888a03121561539b57600080fd5b87356153a681614c06565b965060208801356153b681614c06565b955060408801356153c681614c06565b945060608801356153d681614c06565b935060808801356153e681614c06565b925060a08801356153f681614c06565b915060c088013561540681614c06565b8091505092959891949750929550565b60006020828403121561542857600080fd5b81356001600160401b0381111561543e57600080fd5b820161016081850312156110bd57600080fd5b6000815180845260208085019450848260051b860182860160005b858110156154965783830389526154848383516152ab565b9885019892509084019060010161546c565b5090979650505050505050565b60006040808301818452808651808352606092508286019150828160051b8701016020808a0160005b8481101561558e57605f198a8503018652815161012081518652848201516154f68688018261522a565b50898201518a8701528882015189870152608080830151828289015261551e83890182615237565b9250505060a0808301516155348289018261522a565b505060c0808301518783038289015261554d8382615272565b9250505060e0808301516155648289018215159052565b5050610100918201519161557a8782018461522a565b5096840196945050908201906001016154cc565b5050878203908801526155a18189615451565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601160045260246000fd5b600060018201615610576156106155e8565b5060010190565b8183823760009101908152919050565b818103818111156108a5576108a56155e8565b80820281158282048414176108a5576108a56155e8565b60008261566e57634e487b7160e01b600052601260045260246000fd5b500490565b600060ff821660ff8103615689576156896155e8565b60010192915050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6000823560de1983360301811261574057600080fd5b9190910192915050565b600082601f83011261575b57600080fd5b8135602061576b614e6083614e1c565b82815260059290921b8401810191818101908684111561578a57600080fd5b8286015b84811015614ea8578035835291830191830161578e565b600082601f8301126157b657600080fd5b813560206157c6614e6083614e1c565b82815260059290921b840181019181810190868411156157e557600080fd5b8286015b84811015614ea85780356157fc81614c06565b83529183019183016157e9565b600060e0823603121561581b57600080fd5b615823614da1565b8235815261583360208401614c1b565b6020820152604083013560408201526060830135606082015260808301356001600160401b038082111561586657600080fd5b6158723683870161574a565b608084015261588360a08601614c1b565b60a084015260c085013591508082111561589c57600080fd5b506158a9368286016157a5565b60c08301525092915050565b6000815480845260208085019450836000528060002060005b83811015615267578154875295820195600191820191016158ce565b6000815480845260208085019450836000528060002060005b838110156152675781546001600160a01b031687529582019560019182019101615903565b8381526060602082015282546060820152600061594f60018501546001600160a01b031690565b61595c608084018261522a565b50600284015460a0830152600384015460c0830152600484015460e0830152610160806101008401526159966101c08401600587016158b5565b60068601546001600160a01b03166159b261012086018261522a565b50838103605f19016101408501526159cd81600788016158ea565b905060088601546159e483860160ff831615159052565b6159ff6101808601600883901c6001600160a01b031661522a565b615a146101a0860160ff8360a81c1615159052565b5091506147f59050604083018461522a565b8015158114610ef757600080fd5b600060208284031215615a4657600080fd5b81516110bd81615a26565b8035614c2681615a26565b60006101608236031215615a6f57600080fd5b615a77614dc9565b82358152615a8760208401614c1b565b602082015260408301356040820152606083013560608201526080830135608082015260a08301356001600160401b0380821115615ac457600080fd5b615ad03683870161574a565b60a0840152615ae160c08601614c1b565b60c084015260e0850135915080821115615afa57600080fd5b50615b07368286016157a5565b60e083015250610100615b1b818501615a51565b90820152610120615b2d848201614c1b565b90820152610140615b3f848201615a51565b9082015292915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600060208284031215615ba657600080fd5b5051919050565b808201808211156108a5576108a56155e8565b838152606060208201526000615bd960608301856152ab565b905060018060a01b0383166040830152949350505050565b634e487b7160e01b600052600160045260246000fd5b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351615c39816017850160208801615159565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615c6a816028840160208801615159565b01602801949350505050565b6001600160a01b03929092168252602082015260400190565b600060208284031215615ca157600080fd5b604051602081018181106001600160401b0382111715615cc357615cc3614d8b565b6040529151825250919050565b600081615cdf57615cdf6155e8565b506000190190565b600060208284031215615cf957600080fd5b81516110bd81614c06565b600082601f830112615d1557600080fd5b81516020615d25614e6083614e1c565b82815260059290921b84018101918181019086841115615d4457600080fd5b8286015b84811015614ea85780518352918301918301615d48565b60008060408385031215615d7257600080fd5b82516001600160401b0380821115615d8957600080fd5b818501915085601f830112615d9d57600080fd5b81516020615dad614e6083614e1c565b82815260059290921b84018101918181019089841115615dcc57600080fd5b948201945b83861015615df3578551615de481614c06565b82529482019490820190615dd1565b91880151919650909350505080821115615e0c57600080fd5b50615e1985828601615d04565b9150509250929050565b6000825161574081846020870161515956fe793a6c9b7e0a9549c74edc2f9ae0dc50903dfaa9a56fb0116b27a8c71de3e2c630d41a597cac127d8249d31298b50e481ee82c3f4a49ff93c76a22735aa9f3ad360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65646e3cc031d23d7153f72e87cbfd113a0351c60d8ce52b8a31c944d543a384b7c9a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775c1df76f4e50bdb95676f782d4b88b23904c5346d8bc7c986ae26f7e10e601891a264697066735822122051cf78f57692943a9c3e016baea8058b363d2e77cb296320dbe2e23a9bc1506164736f6c63430008120033