253 txs
228 calls
constructor
constructor()
functions
acquiredStarterMiner
viewfunction acquiredStarterMiner(address) view returns (bool)
blocksUntilNextHalving
viewfunction blocksUntilNextHalving() view returns (uint256)
burnPct
viewfunction burnPct() view returns (uint256)
calculateClaimFees
viewfunction calculateClaimFees(uint256 _rewardAmount) view returns (uint256 _vaultFee, uint256 _useFee)
claimFee
viewfunction claimFee() view returns (uint256)
cooldown
viewfunction cooldown() view returns (uint256)
cumulativeBigcoinPerHash
viewfunction cumulativeBigcoinPerHash() view returns (uint256)
dev
viewfunction dev() view returns (address)
facilities
viewfunction facilities(uint256) view returns (uint256 maxMiners, uint256 totalPowerOutput, uint256 cost, bool inProduction, uint256 x, uint256 y)
facilityCount
viewfunction facilityCount() view returns (uint256)
flaunchToken
viewfunction flaunchToken() view returns (address)
getMeliPerBlock
viewfunction getMeliPerBlock() view returns (uint256)
getPlayerMinerCount
viewfunction getPlayerMinerCount(address player) view returns (uint256)
getPlayerMinersPaginated
viewfunction getPlayerMinersPaginated(address player, uint256 startIndex, uint256 size) view returns (tuple[])
getReferrals
viewfunction getReferrals(address referrer) view returns (address[])
HALVING_INTERVAL
viewfunction HALVING_INTERVAL() view returns (uint256)
INITIAL_BIGCOIN_PER_BLOCK
viewfunction INITIAL_BIGCOIN_PER_BLOCK() view returns (uint256)
initialFacilityPrice
viewfunction initialFacilityPrice() view returns (uint256)
initializedStarterFacility
viewfunction initializedStarterFacility(address) view returns (bool)
lastFacilityUpgradeTimestamp
viewfunction lastFacilityUpgradeTimestamp(address) view returns (uint256)
lastRewardBlock
viewfunction lastRewardBlock() view returns (uint256)
meli
viewfunction meli() view returns (address)
miners
viewfunction miners(uint256) view returns (uint256 minerIndex, uint256 id, uint256 x, uint256 y, uint256 hashrate, uint256 powerConsumption, uint256 cost, bool inProduction)
minerSecondHandMarket
viewfunction minerSecondHandMarket(uint256) view returns (uint256)
miningHasStarted
viewfunction miningHasStarted() view returns (bool)
oracle
viewfunction oracle() view returns (address)
owner
viewfunction owner() view returns (address)
ownerToFacility
viewfunction ownerToFacility(address) view returns (uint256 facilityIndex, uint256 maxMiners, uint256 currMiners, uint256 totalPowerOutput, uint256 currPowerOutput, uint256 x, uint256 y)
pendingRewards
viewfunction pendingRewards(address player) view returns (uint256)
playerBigcoinDebt
viewfunction playerBigcoinDebt(address) view returns (uint256)
playerHashrate
viewfunction playerHashrate(address) view returns (uint256)
playerMeliPerBlock
viewfunction playerMeliPerBlock(address player) view returns (uint256)
playerMinersId
viewfunction playerMinersId(uint256) view returns (uint256 minerIndex, uint256 id, uint256 x, uint256 y, uint256 hashrate, uint256 powerConsumption, uint256 cost, bool inProduction)
playerMinersOwned
viewfunction playerMinersOwned(address) view returns (uint256 _spacer)
playerOccupiedCoords
viewfunction playerOccupiedCoords(address, uint256, uint256) view returns (bool)
playerPendingRewards
viewfunction playerPendingRewards(address) view returns (uint256)
referralBonusPaid
viewfunction referralBonusPaid(address) view returns (uint256)
referralFee
viewfunction referralFee() view returns (uint256)
referrals
viewfunction referrals(address) view returns (address)
referredUsers
viewfunction referredUsers(address, uint256) view returns (address)
REWARDS_PRECISION
viewfunction REWARDS_PRECISION() view returns (uint256)
startBlock
viewfunction startBlock() view returns (uint256)
STARTER_FACILITY_INDEX
viewfunction STARTER_FACILITY_INDEX() view returns (uint256)
STARTER_MINER_INDEX
viewfunction STARTER_MINER_INDEX() view returns (uint256)
taxRate
viewfunction taxRate() view returns (uint256)
timeUntilNextFacilityUpgrade
viewfunction timeUntilNextFacilityUpgrade(address player) view returns (uint256)
totalHashrate
viewfunction totalHashrate() view returns (uint256)
uniqueMinerCount
viewfunction uniqueMinerCount() view returns (uint256)
useFee
viewfunction useFee() view returns (uint256)
vaultManager
viewfunction vaultManager() view returns (address)
addFacility
nonpayablefunction addFacility(uint256 maxMiners, uint256 totalPowerOutput, uint256 cost, bool inProduction, uint256 x, uint256 y)
addMiner
nonpayablefunction addMiner(uint256 hashrate, uint256 powerConsumption, uint256 cost, bool inProduction)
addSecondaryMarketForMiner
nonpayablefunction addSecondaryMarketForMiner(uint256 minerIndex, uint256 price)
buyMiner
nonpayablefunction buyMiner(uint256 minerIndex, uint256 x, uint256 y)
buyNewFacility
nonpayablefunction buyNewFacility()
changeFacilityCost
nonpayablefunction changeFacilityCost(uint256 facilityIndex, uint256 newCost)
changeMinerCost
nonpayablefunction changeMinerCost(uint256 minerIndex, uint256 newCost)
claimRewards
payablefunction claimRewards() payable
getFreeStarterMiner
nonpayablefunction getFreeStarterMiner(uint256 x, uint256 y)
purchaseInitialFacility
payablefunction purchaseInitialFacility(address referrer) payable
renounceOwnership
nonpayablefunction renounceOwnership()
sellMiner
nonpayablefunction sellMiner(uint256 minerId)
setBurnPct
nonpayablefunction setBurnPct(uint256 burn)
setClaimFee
nonpayablefunction setClaimFee(uint256 _claimFee)
setCooldown
nonpayablefunction setCooldown(uint256 _cooldown)
setDev
nonpayablefunction setDev(address _dev)
setFlaunchToken
nonpayablefunction setFlaunchToken(address _flaunchToken)
setInitialFacilityPrice
nonpayablefunction setInitialFacilityPrice(uint256 _initialPrice)
setMeli
nonpayablefunction setMeli(address _meli)
setOracle
nonpayablefunction setOracle(address _oracle)
setReferralFee
nonpayablefunction setReferralFee(uint256 fee)
setTaxAmount
nonpayablefunction setTaxAmount(uint256 _tax)
setUseFee
nonpayablefunction setUseFee(uint256 _useFee)
setVaultManager
nonpayablefunction setVaultManager(address _vaultManager)
syncRewards
nonpayablefunction syncRewards()
toggleFacilityProduction
nonpayablefunction toggleFacilityProduction(uint256 facilityIndex, bool inProduction)
toggleMinerProduction
nonpayablefunction toggleMinerProduction(uint256 minerIndex, bool inProduction)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdraw
nonpayablefunction withdraw()
withdrawMeli
nonpayablefunction withdrawMeli(uint256 amt)
events
FacilityBought
event FacilityBought(address indexed player, uint256 indexed facilityIndex, uint256 cost)
FacilityCostChanged
event FacilityCostChanged(uint256 indexed facilityIndex, uint256 newCost)
FacilityProductionToggled
event FacilityProductionToggled(uint256 indexed facilityIndex, bool inProduction)
FeeCollected
event FeeCollected(address indexed player, address indexed vaultManager, address indexed dev, uint256 feeAmount)
FeeTransferFailed
event FeeTransferFailed(address indexed player, address indexed vaultManager, address indexed dev, uint256 feeAmount)
InitialFacilityPurchased
event InitialFacilityPurchased(address indexed player)
MinerBought
event MinerBought(address indexed player, uint256 indexed minerIndex, uint256 cost, uint256 minerId, uint256 x, uint256 y)
MinerCostChanged
event MinerCostChanged(uint256 indexed minerIndex, uint256 newCost)
MinerProductionToggled
event MinerProductionToggled(uint256 indexed minerIndex, bool inProduction)
MinerSecondaryMarketAdded
event MinerSecondaryMarketAdded(uint256 indexed minerIndex, uint256 price)
MinerSold
event MinerSold(address indexed player, uint256 indexed minerIndex, uint256 secondHandPrice, uint256 minerId, uint256 x, uint256 y)
MiningStarted
event MiningStarted(uint256 startBlock)
NewFacilityAdded
event NewFacilityAdded(uint256 indexed facilityIndex, uint256 totalPowerOutput, uint256 cost, bool inProduction, uint256 x, uint256 y)
NewMinerAdded
event NewMinerAdded(uint256 indexed minerIndex, uint256 hashRate, uint256 powerConsumption, uint256 cost, bool inProduction)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PlayerHashrateDecreased
event PlayerHashrateDecreased(address indexed player, uint256 playerHashrate, uint256 playerPendingRewards)
PlayerHashrateIncreased
event PlayerHashrateIncreased(address indexed player, uint256 playerHashrate, uint256 playerPendingRewards)
Refund
event Refund(address indexed player, uint256 refundAmount)
RewardsClaimed
event RewardsClaimed(address indexed player, uint256 rewards)
errors
AlreadyAtMaxFacility
error AlreadyAtMaxFacility()
AlreadyPurchasedInitialFactory
error AlreadyPurchasedInitialFactory()
CantBuyNewFacilityYet
error CantBuyNewFacilityYet()
CantModifyStarterFacility
error CantModifyStarterFacility()
CantModifyStarterMiner
error CantModifyStarterMiner()
FacilityDimensionsInvalid
error FacilityDimensionsInvalid()
FacilityInadequatePowerOutput
error FacilityInadequatePowerOutput()
GreatDepression
error GreatDepression()
IncorrectValue
error IncorrectValue()
IndexOutOfBounds
error IndexOutOfBounds()
InvalidFacilityIndex
error InvalidFacilityIndex()
InvalidFee
error InvalidFee()
InvalidMinerCoordinates
error InvalidMinerCoordinates()
InvalidMinerIndex
error InvalidMinerIndex()
InvalidPowerOutput
error InvalidPowerOutput()
MinerNotInProduction
error MinerNotInProduction()
MiningHasntStarted
error MiningHasntStarted()
NeedToInitializeFacility
error NeedToInitializeFacility()
NewFacilityNotInProduction
error NewFacilityNotInProduction()
NonExistentFacility
error NonExistentFacility()
NonExistentMiner
error NonExistentMiner()
NoRewardsPending
error NoRewardsPending()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PlayerDoesNotOwnMiner
error PlayerDoesNotOwnMiner()
RefundFailed
error RefundFailed()
StarterMinerAlreadyAcquired
error StarterMinerAlreadyAcquired()
TooPoor
error TooPoor()
WithdrawFailed
error WithdrawFailed()
creation bytecode
0x60c060409080825234620002755733156200026057505f8054336001600160a01b0319821681178355916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36201fa40600e5566b1a2bc2ec50000600f55670de0b6b3a764000060105567016345785d8a00006011556703782dace9d900006012555f601355661ff973cafa8000602455620000ab60095462000279565b600981905560808190528151906001600160401b03906101008301828111848210176200024c578452825262000160602083019260075f199485815286830186815260608401878152608085016064815260a08601916001835260c08701938a855260e08801955f87526080515f5260176020528c5f209851895551600189015551600288015551600387015551600486015551600585015551600684015551151591019060ff801983541691151516179055565b82519160c08301918211838310176200024c576005918452600483526020830190601c8252848401908152620001eb606085015f815260808601926002845260a087019460028652620001b5600a5462000279565b80600a555f526018602052885f2097518855516001880155516002870155511515600386019060ff801983541691151516179055565b51600484015551910155600a5460a052516150b990816200029d82396080518181816104df01528181611077015281816120ef0152818161305e01526132c3015260a051818181610e17015281816120160152818161234f0152612d660152f35b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b81525f6004820152602490fd5b5f80fd5b5f198114620002885760010190565b634e487b7160e01b5f52601160045260245ffdfe60806040526004361015610011575f80fd5b5f803560e01c806310bba10f1461436457806310d96759146142e057806311d988bc1461429d578063157e204c146141ff5780631a267cd21461419c5780631bce7821146141395780631e57057d146140d657806322b54ba414614095578063234f3f1b1461403257806324b4464e14613fea5780632bd923ea14613f995780632e75ab5014613f5a5780632fc96ce614613eb8578063304fc71a14613e3657806330775a94146139dc57806331d7a2621461399a578063372500ab1461340f5780633a8ee01e146130035780633ccfd60b14612f715780633e89bb1314612cac57806340f5da9e14612c4957806341a0894d14612b6f578063476e2e66146124d057806348cd4cb1146124945780634fc3f41a146124535780635069605214612417578063542f9e6a1461237257806359058ad1146123195780635a5ccef0146122dd5780635c539d35146122365780635c7421e3146121e25780635fd9491d146121a65780636756a1c7146120cd57806369f0ee3314611ff45780636d12ff5214611fb8578063713494d714611f68578063715018a614611ecc57806372779cba14611e9057806372c0c21114611e55578063771a3a1d14611e19578063787a08a614611ddd5780637adbf97314611d5b5780637b30deb314611d095780637dc0d1d014611cb75780637e08b5b314611c55578063811c508914611c1357806384ae2bc614611bd757806384fd7f37146119145780638685e3f21461172857806386b3cd26146116e757806389f1401b146116a65780638a4adf24146116545780638da5cb5b146116035780638dfc39331461159b57806391cca3db146115495780639292ae9b1461150d57806394e49ff5146114d457806394fc19e4146114935780639618b31c1461145757806399d32fc41461141b5780639ca423b3146113b55780639f715f6014611266578063a688e5c3146111fc578063a9f8d181146111c0578063b543503e1461113e578063c243589414611032578063c3d9c9d714610fd7578063c51a2bba14610f52578063ca18117014610eea578063d147129614610dd2578063d477f05f14610d50578063d9ba62b314610779578063dd6a4c65146106cc578063df1e3b7f1461068b578063e0d152af146105da578063e2b15d8c14610588578063e92820e614610502578063ea26fa2d146104a9578063eef3b2d01461046d5763f2fde38b1461038a575f80fd5b3461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576103c16143e6565b6103c9614c08565b73ffffffffffffffffffffffffffffffffffffffff809116908115610439575f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a380f35b602483604051907f1e4fbdf70000000000000000000000000000000000000000000000000000000082526004820152fd5b80fd5b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576020602454604051908152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b503461046a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a5761053a6143e6565b6024359173ffffffffffffffffffffffffffffffffffffffff809216815260226020526040812090815484101561046a5750602092610578916144b0565b9190546040519260031b1c168152f35b503461046a5760ff604060209273ffffffffffffffffffffffffffffffffffffffff6105b336614409565b929091168352601f8652838320908352855282822090825284522054166040519015158152f35b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57604090600435815260176020522080546106876001830154926002810154906003810154600482015460058301549160ff60076006860154950154169460405198899889969390989794919260e0969361010089019a8952602089015260408801526060870152608086015260a085015260c08401521515910152565b0390f35b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576106c3614c08565b60043560245580f35b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576040906004358152601a6020522080546106876001830154926002810154906003810154600482015460058301549160ff60076006860154950154169460405198899889969390989794919260e0969361010089019a8952602089015260408801526060870152608086015260a085015260c08401521515910152565b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57338152601960205260408120600435906318fb586460045282526024822068fbb67fda52d4bfb8bf60043514610d435760043515610d32575b80195415610d00576020528152604081205415155b15610cd6576004358152601a6020526040812090604051916108188361454f565b60ff600782549283865260018101546020870152600281015460408701526003810154606087015260048101546080870152600581015460a0870152600681015460c0870152015416151560e08401528152601e60205260408120546024602073ffffffffffffffffffffffffffffffffffffffff60015416604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa908115610ccb578391610c95575b508111610c6b57338252601b602052604082206002810154908115610c3e57938360809281967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8092016002820155610934600460a086015192019182546145c5565b9055338252601960205260408220600435906318fb58646004528352602483209060043515610c2e575b81199081549283159360011c9085820192600184811b1795610bd15781602052875260408720958654938415610bc35781850103610ba6575b5050505055555b6004358452601a602052836007604082208281558260018201558260028201558260038201558260048201558260058201558260068201550155338452601f60205260408420604082015185526020526040842060608201518552602052604084207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055805160408201517f952aa29dabfc45e8c9bba19903b0a8bb9031c952db14a06ad48af137e5835b07610a7f606085015160405191829133956004358b859094939260609260808301968352602083015260408201520152565b0390a30151610a8d33614ca5565b610a9981600c546145c5565b600c553383526014602052610ab3604084209182546145c5565b9055338252601460205260408220546015602052604083205460405191825260208201527fe331ada0d0e61e9a4196bf4994f2519193d70a601daff346c4276d591664da9a60403392a280610b055750f35b6001546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101929092529091602091839160449183919073ffffffffffffffffffffffffffffffffffffffff165af18015610b9b57610b6f575080f35b610b909060203d602011610b94575b610b88818361456c565b8101906148d5565b5080f35b503d610b7e565b6040513d84823e3d90fd5b80849383010154928392010155855260408520555f808080610997565b50505050505050505061099e565b9550935050505081815414610c15576001810182815414610c05575060020190815414610bff57505061099e565b5561099e565b915060020190815490555561099e565b905060026001820191825481550190815490555561099e565b5068fbb67fda52d4bfb8bf61095e565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60046040517f515d3e81000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011610cc3575b81610cb06020938361456c565b81010312610cbf57515f6108d1565b5f80fd5b3d9150610ca3565b6040513d85823e3d90fd5b60046040517f3d9f63cb000000000000000000000000000000000000000000000000000000008152fd5b9060019181815414610d2b57818382015414610d2b576002015414610d265750806107f7565b6107f7565b50506107f7565b68fbb67fda52d4bfb8bf91506107e2565b63f5a267f183526004601cfd5b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a5773ffffffffffffffffffffffffffffffffffffffff610d9d6143e6565b610da5614c08565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600454161760045580f35b503461046a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57600435610e0d6144a1565b610e15614c08565b7f000000000000000000000000000000000000000000000000000000000000000082108015610edf575b610eb55760207f0bd772fd008a8dd5673c42a4f50f72220b2603eee55113cd6c38ff78d71e644f9183855260188252610ea981600360408820019060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b6040519015158152a280f35b60046040517fedd999f8000000000000000000000000000000000000000000000000000000008152fd5b50600a548211610e3f565b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a5760ff604060209273ffffffffffffffffffffffffffffffffffffffff610f3e6143e6565b168152601c84522054166040519015158152f35b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57600435610f8d614c08565b670de0b6b3a7640000610fa2601154836145d2565b11610fad5760105580f35b60046040517f58d620b3000000000000000000000000000000000000000000000000000000008152fd5b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57600435611012614c08565b670de0b6b3a7640000611027826010546145d2565b11610fad5760115580f35b503461046a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a5760043561106d6144a1565b611075614c08565b7f000000000000000000000000000000000000000000000000000000000000000082108015611133575b6111095760207fd0a7ceb410ade2d440d8ed59d6b338fe480f98025101655790e0de736edddabe9183855260178252610ea981600760408820019060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b60046040517f3b87f109000000000000000000000000000000000000000000000000000000008152fd5b50600954821161109f565b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a5773ffffffffffffffffffffffffffffffffffffffff61118b6143e6565b611193614c08565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600554161760055580f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576020600b54604051908152f35b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a5761125e604060209273ffffffffffffffffffffffffffffffffffffffff6112516143e6565b1681526019845220614f08565b604051908152f35b503461046a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576024357fe0a2f8482bbba7e119c069eb63409ac33b15fc516cffed25aeabb6a9669e07c260806004356044356112ca614492565b906112d3614c08565b6113986112e16009546148ed565b92836009556007604051916112f58361454f565b8583528a8a602085018281526040860183815260608701908482528c8801928c845260a08901948552604060c08a01968c885260e08b019815159d8e8a5281526017602052209851895551600189015551600288015551600387015551600486015551600585015551600684015551151591019060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b60095495604051938452602084015260408301526060820152a280f35b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57602090604073ffffffffffffffffffffffffffffffffffffffff91826114096143e6565b16815260218452205416604051908152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576020601254604051908152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576020601054604051908152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57602060ff600754166040519015158152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57602061125e614bd0565b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576020600d54604051908152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a5760ff604060209273ffffffffffffffffffffffffffffffffffffffff6115ef6143e6565b168152601d84522054166040519015158152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a5773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57602073ffffffffffffffffffffffffffffffffffffffff60055416604051908152f35b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576116de614c08565b60043560135580f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576020604051670de0b6b3a76400008152f35b503461046a5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57604435600435602435611769614492565b9060a435608435611778614c08565b8461178383836148c2565b036118dc57600a54938488526018602052604088208383600483015411918215611906575b50506118dc57848852601860205283600160408a200154116118b2577f6ae4a0e17ec15e82a1af6ff99411c44193a38f27f15c3ddd30b0f09ab1c5fd2c9560058460a0976118868c95604051956117fe876144f2565b86528c602087018b815260408801918252604060608901931515998a855261183360808b01978d895260a08c01998a526148ed565b80600a55815260186020522097518855516001880155516002870155511515600386019060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b51600484015551910155600a54966040519485526020850152604084015260608301526080820152a280f35b60046040517fd2a50ed0000000000000000000000000000000000000000000000000000000008152fd5b60046040517f472ea01c000000000000000000000000000000000000000000000000000000008152fd5b60050154119050835f6117a8565b503461046a57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576004359061196261195983601254614e6d565b92601354614e6d565b6003546001546040517f92eee35c0000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff92831660048301819052602483019790975292821696909590939284876044818b5afa968715611bcc578697611b9b575b5060405190815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260248101929092528282604481895afa918215611b90578492611b61575b50600254169460405194838680611a7a7f3eea64a600000000000000000000000000000000000000000000000000000000948583528b600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0381855afa958615611b56578596611b1f575b5060405190815273ffffffffffffffffffffffffffffffffffffffff90961660048701526024860191909152819085908180604481015b03915afa918215611b135791611ae3575b604080945051928352820152f35b80915083813d8311611b0c575b611afa818361456c565b81010312610cbf576040925190611ad5565b503d611af0565b604051903d90823e3d90fd5b92919095508383813d8311611b4f575b611b39818361456c565b81010312610cbf57915194909190611ac4611a8d565b503d611b2f565b6040513d87823e3d90fd5b9091508281813d8311611b89575b611b79818361456c565b81010312610cbf5751905f611a18565b503d611b6f565b6040513d86823e3d90fd5b919096508482813d8311611bc5575b611bb4818361456c565b81010312610cbf57905195846119d5565b503d611baa565b6040513d88823e3d90fd5b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576020600f54604051908152f35b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57602061125e611c506143e6565b614b82565b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57604060209173ffffffffffffffffffffffffffffffffffffffff611ca76143e6565b1681528280522054604051908152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a5773ffffffffffffffffffffffffffffffffffffffff611da86143e6565b611db0614c08565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035580f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576020600e54604051908152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576020601154604051908152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57611e8d33614ca5565b80f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576020600954604051908152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57611f03614c08565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57600435611fa3614c08565b670de0b6b3a76400008111610fad57600f5580f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576020600a54604051908152f35b503461046a576120033661445e565b61200b614c08565b600a5482116120a3577f000000000000000000000000000000000000000000000000000000000000000082146120795760207ff721e9425607d38abda58b925d2a080b3aefa127d46973d2683875dc87cb9a6b9183855260188252806002604087200155604051908152a280f35b60046040517ff1fa1762000000000000000000000000000000000000000000000000000000008152fd5b60046040517f6cb40908000000000000000000000000000000000000000000000000000000008152fd5b503461046a576120dc3661445e565b6120e4614c08565b600954821161217c577f000000000000000000000000000000000000000000000000000000000000000082146121525760207ff920b24ea96b3814655944622f9eb86875e3193c5de1a9de018777e6c8705cee9183855260178252806006604087200155604051908152a280f35b60046040517f4705d684000000000000000000000000000000000000000000000000000000008152fd5b60046040517f3a6c77df000000000000000000000000000000000000000000000000000000008152fd5b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57602060405162034bc08152f35b503461046a5760207f86257f0afab037798cc4548a6d86125f52c92410a1e29aff03d787d49dac20db6122143661445e565b61221f939193614c08565b838552601e8252806040862055604051908152a280f35b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a5761226e614c08565b600154600480546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821681840152913560248301529091602091839160449183918791165af18015610b9b57610b6f575080f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576020600c54604051908152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57604060e09173ffffffffffffffffffffffffffffffffffffffff6123c46143e6565b168152601b60205220805490600181015490600281015460038201546004830154916006600585015494015494604051968752602087015260408601526060850152608084015260a083015260c0820152f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576020601354604051908152f35b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a5761248b614c08565b600435600e5580f35b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a576020600654604051908152f35b503461046a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57600435815260176020526040812060ff60076040519261251f8461454f565b8054845260018101546020850152600281015460408501526003810154606085015260048101546080850152600581015460a0850152600681015460c0850152015416151560e0820152338252601b6020526040822061258e6005820154600683015490604435602435614d1f565b612b455760e082015115612b1b5773ffffffffffffffffffffffffffffffffffffffff600154166040517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152602081602481855afa908115611b56578591612ae9575b5060c084015111612abf57612616600483015460a0850151906145d2565b600383015410612a955760c08301516040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810191909152906020908290606490829088905af18015611b9057612a76575b5061268b60c083015160105490614c58565b61269c60c084015160115490614c58565b6126a681836145d2565b60c085015110610fad57849173ffffffffffffffffffffffffffffffffffffffff6001541690813b15612a725783916024839260405194859384927f42966c6800000000000000000000000000000000000000000000000000000000845260048401525af1908115610ccb578391612a5a575b50506001546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820181905260248201929092529160209183916044918391905af18015611b9057612a3b575b50602435604083015260443560608301526127a06008546148ed565b806008556020830152338352601f6020526040832060243584526020526040832060443584526020526040832060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055338352601960205260408320600854906318fb58646004528452602484209068fbb67fda52d4bfb8bf8114612a2e5791611e8d93918360809415612a1e575b811991825491816020528215612980575b80895260408920928354156129665750505050505b6008548552601a6020526128e6604086208351815560208401516001820155604084015160028201556060840151600382015584840151600482015560a0840151600582015560c08401516006820155600760e0850151151591019060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b600281016128f481546148ed565b9055600461290960a0840151828401546145d2565b91015560c08101516008546040805192835260208301919091526024359082015260443560608201526004359033907f70a5d2d3258adcf9978a193a4dd8fa309ae83a9f1046a0a5ea99a133bf34f9a590608090a3015133614d6c565b60011c8092015560010180915560011b600117905561285b565b915080548015612a1657828114612a0d57600182018054908115612a0157508381146129f757600283019182549283156129ea57508483146129df578a52600160408b20558952600260408a2055885260036040892055600791612846565b50505050505061285b565b949550505050505561285b565b505050505061285b565b9394505050505561285b565b5050505061285b565b50555061285b565b5068fbb67fda52d4bfb8bf612835565b63f5a267f185526004601cfd5b612a539060203d602011610b9457610b88818361456c565b505f612784565b612a639061453b565b612a6e57815f612719565b5080fd5b8380fd5b612a8e9060203d602011610b9457610b88818361456c565b505f612679565b60046040517ffbfd2f40000000000000000000000000000000000000000000000000000000008152fd5b60046040517fff0b21e6000000000000000000000000000000000000000000000000000000008152fd5b90506020813d602011612b13575b81612b046020938361456c565b81010312610cbf57515f6125f8565b3d9150612af7565b60046040517faa8a9b98000000000000000000000000000000000000000000000000000000008152fd5b60046040517fa800e0ac000000000000000000000000000000000000000000000000000000008152fd5b503461046a57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a579073ffffffffffffffffffffffffffffffffffffffff9182612bc16143e6565b168152602282526040812090604051808484549182815201908194845285842090845b818110612c335750505081612bfa91038261456c565b6040519380850191818652518092526040850193925b828110612c1d5785850386f35b8351871685529381019392810192600101612c10565b8254891684529287019260019283019201612be4565b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57604060209173ffffffffffffffffffffffffffffffffffffffff612c9b6143e6565b168152601583522054604051908152f35b506020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112612a6e57612ce06143e6565b6024543403612f4757338352601c825260ff604084205416612f1d5773ffffffffffffffffffffffffffffffffffffffff80911690338214612ec8575b338452601c83526040842060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905581159081612e76575b5015612e2a575b5060067f0000000000000000000000000000000000000000000000000000000000000000918284526018815260408420604051612d9d816144f2565b815481526001820154908381019182526002830154604082015260ff60038401541615156060820152601b60056004850154946080840195865201549460a08301958652338952526040872095865551600186015551600385015551600584015551910155337fe424ed553a53c3a900c875ed34d63043e4dfb799427ee8ae0836b046a603c90e8280a280f35b3383526021825260408320817fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055825260228152612e703360408420614b34565b5f612d61565b80600454166021855260408620907fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560045416845260228352612ec23360408620614b34565b5f612d5a565b80600454163385526021845260408520907fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790558060045416845260228352612f183360408620614b34565b612d1d565b60046040517f8fe6f7d8000000000000000000000000000000000000000000000000000000008152fd5b60046040517fd2ade556000000000000000000000000000000000000000000000000000000008152fd5b503461046a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57612fa8614c08565b808080804773ffffffffffffffffffffffffffffffffffffffff600454165af1612fd0614ad7565b5015612fd95780f35b60046040517f750b219c000000000000000000000000000000000000000000000000000000008152fd5b503461046a576130123661445e565b90338352601d60205260ff6040842054166133e557338352601d6020526040832060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f000000000000000000000000000000000000000000000000000000000000000083526017602052604083209160ff60076040519461309a8661454f565b8054865260018101546020870152600281015460408701526003810154606087015260048101546080870152600581015460a0870152600681015460c0870152015416151560e0840152338452601b6020526040842061310560058201546006830154908486614d1f565b612b455761311c600482015460a0860151906145d2565b600382015410612a955782604085015281606085015261313d6008546148ed565b806008556020850152338552601f60205260408520838652602052604085208286526020526040852060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055338552601960205260408520600854906318fb58646004528652602486209068fbb67fda52d4bfb8bf81146133d85791611e8d9593918360809694156133c8575b81199182549181602052821561332a575b808b5260408b20928354156133105750505050505b6008548752601a602052613281604088208551815560208601516001820155604086015160028201556060860151600382015586860151600482015560a0860151600582015560c08601516006820155600760e0870151151591019060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b6002810161328f81546148ed565b905560046132a460a0860151828401546145d2565b91015560085491604051928784526020840152604083015260608201527f0000000000000000000000000000000000000000000000000000000000000000907f70a5d2d3258adcf9978a193a4dd8fa309ae83a9f1046a0a5ea99a133bf34f9a5843392a3015133614d6c565b60011c8092015560010180915560011b60011790556131f6565b9150805480156133c0578281146133b7576001820180549081156133ab57508381146133a157600283019182549283156133945750848314613389578c52600160408d20558b52600260408c20558a52600360408b20556007916131e1565b5050505050506131f6565b94955050505050556131f6565b50505050506131f6565b939450505050556131f6565b505050506131f6565b5055506131f6565b5068fbb67fda52d4bfb8bf6131d0565b63f5a267f187526004601cfd5b60046040517f70e9a55a000000000000000000000000000000000000000000000000000000008152fd5b50807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a5761344233614ca5565b33815260206015815260408220549081156139705773ffffffffffffffffffffffffffffffffffffffff90816005541682600454169085918691879260135460125461348e81836145d2565b6137fd575b505061349f81856145d2565b93843410612abf57821580156137f5575b610c6b5789908534116137e3575b85613732575b505050505050806136c0575b50338452601581528360408120556134ea600f5484614c58565b846134f582866145c5565b8460015416803b15613616576040517f40c10f190000000000000000000000000000000000000000000000000000000080825233600483015260248201939093529083908290604490829084905af1908115610ccb5783916136ac575b5050338252602184526040822054851694851561361a576001541690813b156136165760405190815273ffffffffffffffffffffffffffffffffffffffff86166004820152602481018490529082908290604490829084905af18015610b9b576135fe575b50927ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe9352602382526135ef604086209182546145d2565b90555b6040519283523392a280f35b6136079061453b565b61361257845f6135b7565b8480fd5b8280fd5b90919294506001541690813b1561361657604051908152306004820152602481018590529082908290604490829084905af18015610b9b57613698575b50507ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe9130855260238252613691604086209182546145d2565b90556135f2565b6136a19061453b565b612a7257835f613657565b6136b59061453b565b612a6e57815f613552565b8480808084335af1906136d1614ad7565b506040519081527fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d833392a215613708575f6134d0565b60046040517ff0c49d44000000000000000000000000000000000000000000000000000000008152fd5b81808080808080968a9b9c9d9a5af19461374a614ad7565b50885af190613757614ad7565b50159081156137da575b50156137a95783613771916145d2565b926040519081527f9e75674c7d3c9e484d1d937e8c6f7d18d7c5f894db2046f4f9a25cba529ca466853392a45b5f80808088816134c4565b926040519081527f3e7be0af9d546b20a6a2e91e4151659dfcad117daa1df79e78d17c5ad2f45b76853392a461379e565b9050155f613761565b95506137ef85346145c5565b956134be565b5083156134b0565b6003546001546040517f92eee35c000000000000000000000000000000000000000000000000000000008152908b1673ffffffffffffffffffffffffffffffffffffffff166004820152602481018c9052908a1696509092508781604481895afa80156139655788918c91613934575b506002546040517f3eea64a6000000000000000000000000000000000000000000000000000000008152908b1673ffffffffffffffffffffffffffffffffffffffff16600482015260248101919091529586908180604481015b03915afa948515613929578a956138f6575b50906138e86138ee9286614e6d565b94614e6d565b925f80613493565b919094508682813d8311613922575b61390f818361456c565b81010312610cbf579051936138e86138d9565b503d613905565b6040513d8c823e3d90fd5b82819392503d831161395e575b61394b818361456c565b81010312610cbf575187906138c761386d565b503d613941565b6040513d8d823e3d90fd5b60046040517f0df723dc000000000000000000000000000000000000000000000000000000008152fd5b503461046a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046a57602061125e6139d76143e6565b61491a565b5034610cbf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cbf57335f52602090601c825260ff60405f20541615613e0c57335f52601b825260405f20805492600a548414613de257335f52808052613a4d60405f2054426145c5565b600e5411613db857600193848101809111613d8b575f526018815260405f209160405194613a7a866144f2565b8354865280840154938387019485526002810154946040880195865260ff6003830154161592831560608a0152600560048401549360808b0194855201549360a08a01948552613d615773ffffffffffffffffffffffffffffffffffffffff98898254166040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201528881602481855afa908115613d0c575f91613d34575b50895111612abf5788516040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810191909152908890829060649082905f905af18015613d0c57613d17575b50613b8c885160105490614c58565b99613b9b895160115490614c58565b9a613ba68c826145d2565b8a5110610fad578184541690813b15610cbf575f916024839260405194859384927f42966c6800000000000000000000000000000000000000000000000000000000845260048401525af18015613d0c57613cf3575b5096613c648a9b829a9b99855416906040519a8b809481937fa9059cbb00000000000000000000000000000000000000000000000000000000835285600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af1968715613929577fe2dbc44c627e3876b04b29d12596a77c7d0fa585ccb754b9fcd92e48d813dd7797613cd6575b50613ca186546148ed565b86555190850155516003840155516005830155516006820155338552828052426040862055549251916040519283523392a380f35b613cec90893d8b11610b9457610b88818361456c565b505f613c96565b613d009198999a5061453b565b5f989796613c64613bfc565b6040513d5f823e3d90fd5b613d2d90883d8a11610b9457610b88818361456c565b505f613b7d565b90508881813d8311613d5a575b613d4b818361456c565b81010312610cbf57515f613b20565b503d613d41565b60046040517f47cd2fa6000000000000000000000000000000000000000000000000000000008152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b60046040517f41fde9ef000000000000000000000000000000000000000000000000000000008152fd5b60046040517f72932dd3000000000000000000000000000000000000000000000000000000008152fd5b60046040517f0c02d44e000000000000000000000000000000000000000000000000000000008152fd5b34610cbf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cbf5773ffffffffffffffffffffffffffffffffffffffff613e826143e6565b613e8a614c08565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002555f80f35b34610cbf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cbf576006548015613f305762034bc080613efe83436145c5565b0460018101809111613d8b57818102918183041490151715613d8b57602091613f2b61125e9243926145d2565b6145c5565b60046040517f602fe2ca000000000000000000000000000000000000000000000000000000008152fd5b34610cbf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cbf57613f91614c08565b600435601255005b34610cbf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cbf57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b34610cbf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cbf576004355f52601e602052602060405f2054604051908152f35b34610cbf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cbf5773ffffffffffffffffffffffffffffffffffffffff61407e6143e6565b165f526014602052602060405f2054604051908152f35b34610cbf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cbf57602061125e6140d16143e6565b61483f565b34610cbf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cbf5773ffffffffffffffffffffffffffffffffffffffff6141226143e6565b165f526019602052602060405f2054604051908152f35b34610cbf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cbf5773ffffffffffffffffffffffffffffffffffffffff6141856143e6565b165f526016602052602060405f2054604051908152f35b34610cbf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cbf5773ffffffffffffffffffffffffffffffffffffffff6141e86143e6565b165f526023602052602060405f2054604051908152f35b34610cbf5761421661421036614409565b916145f3565b604051602091828201838352815180915283604084019201935f5b82811061423e5784840385f35b855180518552808301518584015260408082015190860152606080820151908601526080808201519086015260a0808201519086015260c0808201519086015260e0908101511515908501529481019461010090930192600101614231565b34610cbf575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cbf5760206040516a019852199002a192c000008152f35b34610cbf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cbf576004355f52601860205260c060405f20805490600181015490600281015460ff6003830154169060056004840154930154936040519586526020860152604085015215156060840152608083015260a0820152f35b34610cbf5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cbf5773ffffffffffffffffffffffffffffffffffffffff6143b06143e6565b6143b8614c08565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f80f35b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610cbf57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6060910112610cbf5760043573ffffffffffffffffffffffffffffffffffffffff81168103610cbf57906024359060443590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6040910112610cbf576004359060243590565b606435908115158203610cbf57565b602435908115158203610cbf57565b80548210156144c5575f5260205f2001905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b60c0810190811067ffffffffffffffff82111761450e57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161450e57604052565b610100810190811067ffffffffffffffff82111761450e57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761450e57604052565b67ffffffffffffffff811161450e5760051b60200190565b91908203918211613d8b57565b91908201809211613d8b57565b80518210156144c55760209160051b010190565b73ffffffffffffffffffffffffffffffffffffffff90929192165f52602060198152604090815f209261462584614f08565b808610156147d55785614637916145c5565b90818111156147cd5750915b61464c836145ad565b946146598251968761456c565b8386527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0614686856145ad565b01835f5b828110614789575050505f5b8481106146a65750505050505090565b6146b081836145d2565b6004906318fb58648252875f528060245f200154906146ce89614f08565b111561476157908168fbb67fda52d4bfb8bf600194931415025f52601a865260ff6007865f208751936147008561454f565b81548552868201548a860152600282015489860152600382015460608601528101546080850152600581015460a0850152600681015460c0850152015416151560e082015261474f828a6145df565b5261475a81896145df565b5001614696565b5083517f4e23d035000000000000000000000000000000000000000000000000000000008152fd5b84516147948161454f565b5f81525f838201525f868201525f60608201525f60808201525f60a08201525f60c08201525f60e082015282828b01015201849061468a565b905091614643565b5050815193508301915067ffffffffffffffff82118383101761450e57525f815290565b8115614803570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b60ff8111613d8b576001901b90565b600c549081156148bc5761486262034bc061485c600654436145c5565b04614830565b80156148035773ffffffffffffffffffffffffffffffffffffffff906a019852199002a192c000000491165f5260146020528160405f2054828102928184041490151702156148af570490565b63ad251c275f526004601cfd5b50505f90565b81810292918115918404141715613d8b57565b90816020910312610cbf57518015158103610cbf5790565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114613d8b5760010190565b60ff6007541615614ad257600c54908115614a8f57600b54916006549262034bc09061494a8261485c87846145c5565b8015614803576a019852199002a192c000000492600d54955b4383106149e95750505050506149c39173ffffffffffffffffffffffffffffffffffffffff6149d092165f52601560205260405f20549060146020526149c960405f20546016602052670de0b6b3a764000095869360405f2054906145c5565b906148c2565b04906145d2565b90600f548103908111613d8b576149e691614c58565b90565b836149f482856145c5565b04600190818101809111613d8b5785810290808204871490151715613d8b57614a1d90836145d2565b9743891015614a8257614a3b614a358a965b876145c5565b886148c2565b90670de0b6b3a764000091828102928184041490151715613d8b57614a6385614a69936147f9565b906145d2565b978414614a77575b50614963565b9490941c935f614a71565b614a3b614a354396614a2f565b73ffffffffffffffffffffffffffffffffffffffff9150165f52601560205260405f2054600f54670de0b6b3a7640000908103908111613d8b576149e691614c58565b505f90565b3d15614b2f573d9067ffffffffffffffff821161450e5760405191614b2460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461456c565b82523d5f602084013e565b606090565b80546801000000000000000081101561450e57614b56916001820181556144b0565b73ffffffffffffffffffffffffffffffffffffffff9291928084549260031b9316831b921b1916179055565b73ffffffffffffffffffffffffffffffffffffffff16805f526020805260405f2054614bb1600e5480926145d2565b42116148bc576149e6915f5260208052613f2b429160405f20546145d2565b60ff6007541615614c0457614bee62034bc061485c600654436145c5565b8015614803576a019852199002a192c000000490565b5f90565b73ffffffffffffffffffffffffffffffffffffffff5f54163303614c2857565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b90807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211614c92575b670de0b6b3a764000091020490565b8015614c835763bac65e5b5f526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff90614cc3614f8a565b16805f526014602052670de0b6b3a7640000614cf360405f20546149c3600d54601660205260405f2054906145c5565b04815f526015602052614d0b60405f209182546145d2565b9055600d54905f52601660205260405f2055565b91929092821090811591614d61575b50614d5a57335f52601f60205260405f20905f5260205260405f20905f5260205260ff60405f20541690565b5050600190565b90508210155f614d2e565b73ffffffffffffffffffffffffffffffffffffffff9060075460ff811615614e0c575b50614d9981614ca5565b614da583600c546145d2565b600c551690815f526014602052614dc160405f209182546145d2565b90555f52601460205260405f2054601560205260405f205460405191825260208201527fa051d58ced8df58040b29d2c939da70a826ae40290f77c9a66b38b8b85315f6560403392a2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060019116176007554360065543600b557fdaae9aa758637a0d349f036f099afd70aa88d8ac63fce096321de512ffebc16c6020604051438152a15f614d8f565b81810291670de0b6b3a7640000918282828604148215170215614e91575050900490565b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8383098581108601900392839209921115614efb57828211900360ee1b910360121c177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690290565b63ae47f7025f526004601cfd5b6318fb58646004525f5260245f2090811954916001908360011c931515918154159060018301541591600280940154159415614f46575b5050505050565b909192939495505f90614f82575090614f78575090614f6d57506003905f80808080614f3f565b905f80808080614f3f565b9291808080614f3f565b949380614f3f565b600c80541561507c57600b549062034bc090600692614faf8361485c600654846145c5565b8015614803576a019852199002a192c0000004935b438210614fd657505050505043600b55565b805484614fe382856145c5565b0490600191828101809111613d8b5786810290808204881490151715613d8b5761500c916145d2565b4381101561506f57615023614a3582955b866145c5565b670de0b6b3a764000090818102918183041490151715613d8b578554615048916147f9565b615055600d9182546145d2565b90558314615064575b50614fc4565b9490941c935f61505e565b615023614a35439561501d565b5043600b5556fea2646970667358221220d01ae0c9acb322e139d164490cbd4f2f57a23a0bf05b6818e8e555323fe09d5164736f6c63430008180033