@keep-network/tbtc-v2 0.1.1-dev.60 → 0.1.1-dev.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/Bank.json +3 -3
- package/artifacts/Bridge.json +48 -48
- package/artifacts/Deposit.json +7 -7
- package/artifacts/DepositSweep.json +7 -7
- package/artifacts/EcdsaDkgValidator.json +1 -1
- package/artifacts/EcdsaInactivity.json +1 -1
- package/artifacts/Fraud.json +9 -9
- package/artifacts/KeepRegistry.json +1 -1
- package/artifacts/KeepStake.json +2 -2
- package/artifacts/KeepToken.json +2 -2
- package/artifacts/KeepTokenStaking.json +1 -1
- package/artifacts/MovingFunds.json +7 -7
- package/artifacts/NuCypherStakingEscrow.json +1 -1
- package/artifacts/NuCypherToken.json +2 -2
- package/artifacts/RandomBeaconStub.json +1 -1
- package/artifacts/Redemption.json +7 -7
- package/artifacts/ReimbursementPool.json +2 -2
- package/artifacts/Relay.json +9 -9
- package/artifacts/SortitionPool.json +2 -2
- package/artifacts/T.json +2 -2
- package/artifacts/TBTC.json +3 -3
- package/artifacts/TBTCToken.json +3 -3
- package/artifacts/TokenStaking.json +1 -1
- package/artifacts/TokenholderGovernor.json +9 -9
- package/artifacts/TokenholderTimelock.json +8 -8
- package/artifacts/VendingMachine.json +10 -10
- package/artifacts/VendingMachineKeep.json +1 -1
- package/artifacts/VendingMachineNuCypher.json +1 -1
- package/artifacts/WalletRegistry.json +2 -2
- package/artifacts/WalletRegistryGovernance.json +2 -2
- package/artifacts/Wallets.json +7 -7
- package/artifacts/solcInputs/{59994c0eff9c9c3b454733a65b82146c.json → 6ff443beb223cf0c26c6b81361aa1799.json} +8 -2
- package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
- package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
- package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
- package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.json +2 -2
- package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
- package/build/contracts/bridge/Bridge.sol/Bridge.json +2 -2
- package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
- package/build/contracts/bridge/BridgeState.sol/BridgeState.json +2 -2
- package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
- package/build/contracts/bridge/Deposit.sol/Deposit.json +2 -2
- package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +1 -1
- package/build/contracts/bridge/DepositSweep.sol/DepositSweep.json +2 -2
- package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
- package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
- package/build/contracts/bridge/Fraud.sol/Fraud.json +2 -2
- package/build/contracts/bridge/Heartbeat.sol/Heartbeat.dbg.json +4 -0
- package/build/contracts/bridge/Heartbeat.sol/Heartbeat.json +10 -0
- package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
- package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
- package/build/contracts/bridge/MovingFunds.sol/MovingFunds.json +2 -2
- package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +1 -1
- package/build/contracts/bridge/Redemption.sol/OutboundTx.json +2 -2
- package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
- package/build/contracts/bridge/Redemption.sol/Redemption.json +2 -2
- package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
- package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
- package/build/contracts/bridge/Wallets.sol/Wallets.json +2 -2
- package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
- package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
- package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
- package/contracts/bridge/BitcoinTx.sol +18 -3
- package/contracts/bridge/Heartbeat.sol +107 -0
- package/package.json +1 -1
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a >= b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow, so we distribute.\n return (a / 2) + (b / 2) + (((a % 2) + (b % 2)) / 2);\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a / b + (a % b == 0 ? 0 : 1);\n }\n}\n"
|
|
123
123
|
},
|
|
124
124
|
"contracts/bridge/BitcoinTx.sol": {
|
|
125
|
-
"content": "// SPDX-License-Identifier: MIT\n\n// ██████████████ ▐████▌ ██████████████\n// ██████████████ ▐████▌ ██████████████\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ██████████████ ▐████▌ ██████████████\n// ██████████████ ▐████▌ ██████████████\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n\npragma solidity ^0.8.9;\n\nimport {BTCUtils} from \"@keep-network/bitcoin-spv-sol/contracts/BTCUtils.sol\";\nimport {BytesLib} from \"@keep-network/bitcoin-spv-sol/contracts/BytesLib.sol\";\nimport {ValidateSPV} from \"@keep-network/bitcoin-spv-sol/contracts/ValidateSPV.sol\";\n\nimport \"./BridgeState.sol\";\n\n/// @title Bitcoin transaction\n/// @notice Allows to reference Bitcoin raw transaction in Solidity.\n/// @dev See https://developer.bitcoin.org/reference/transactions.html#raw-transaction-format\n///\n/// Raw Bitcoin transaction data:\n///\n/// | Bytes | Name | BTC type | Description |\n/// |--------|--------------|------------------------|---------------------------|\n/// | 4 | version | int32_t (LE) | TX version number |\n/// | varies | tx_in_count | compactSize uint (LE) | Number of TX inputs |\n/// | varies | tx_in | txIn[] | TX inputs |\n/// | varies | tx_out count | compactSize uint (LE) | Number of TX outputs |\n/// | varies | tx_out | txOut[] | TX outputs |\n/// | 4 | lock_time | uint32_t (LE) | Unix time or block number |\n///\n//\n/// Non-coinbase transaction input (txIn):\n///\n/// | Bytes | Name | BTC type | Description |\n/// |--------|------------------|------------------------|---------------------------------------------|\n/// | 36 | previous_output | outpoint | The previous outpoint being spent |\n/// | varies | script bytes | compactSize uint (LE) | The number of bytes in the signature script |\n/// | varies | signature script | char[] | The signature script, empty for P2WSH |\n/// | 4 | sequence | uint32_t (LE) | Sequence number |\n///\n///\n/// The reference to transaction being spent (outpoint):\n///\n/// | Bytes | Name | BTC type | Description |\n/// |-------|-------|---------------|------------------------------------------|\n/// | 32 | hash | char[32] | Hash of the transaction to spend |\n/// | 4 | index | uint32_t (LE) | Index of the specific output from the TX |\n///\n///\n/// Transaction output (txOut):\n///\n/// | Bytes | Name | BTC type | Description |\n/// |--------|-----------------|-----------------------|--------------------------------------|\n/// | 8 | value | int64_t (LE) | Number of satoshis to spend |\n/// | 1+ | pk_script_bytes | compactSize uint (LE) | Number of bytes in the pubkey script |\n/// | varies | pk_script | char[] | Pubkey script |\n///\n/// compactSize uint format:\n///\n/// | Value | Bytes | Format |\n/// |-----------------------------------------|-------|----------------------------------------------|\n/// | >= 0 && <= 252 | 1 | uint8_t |\n/// | >= 253 && <= 0xffff | 3 | 0xfd followed by the number as uint16_t (LE) |\n/// | >= 0x10000 && <= 0xffffffff | 5 | 0xfe followed by the number as uint32_t (LE) |\n/// | >= 0x100000000 && <= 0xffffffffffffffff | 9 | 0xff followed by the number as uint64_t (LE) |\n///\n/// (*) compactSize uint is often references as VarInt)\n///\nlibrary BitcoinTx {\n using BTCUtils for bytes;\n using BTCUtils for uint256;\n using BytesLib for bytes;\n using ValidateSPV for bytes;\n using ValidateSPV for bytes32;\n\n /// @notice Represents Bitcoin transaction data.\n struct Info {\n /// @notice Bitcoin transaction version\n /// @dev `version` from raw Bitcoin transaction data.\n /// Encoded as 4-bytes signed integer, little endian.\n bytes4 version;\n /// @notice All Bitcoin transaction inputs, prepended by the number of\n /// transaction inputs.\n /// @dev `tx_in_count | tx_in` from raw Bitcoin transaction data.\n ///\n /// The number of transaction inputs encoded as compactSize\n /// unsigned integer, little-endian.\n ///\n /// Note that some popular block explorers reverse the order of\n /// bytes from `outpoint`'s `hash` and display it as big-endian.\n /// Solidity code of Bridge expects hashes in little-endian, just\n /// like they are represented in a raw Bitcoin transaction.\n bytes inputVector;\n /// @notice All Bitcoin transaction outputs prepended by the number of\n /// transaction outputs.\n /// @dev `tx_out_count | tx_out` from raw Bitcoin transaction data.\n ///\n /// The number of transaction outputs encoded as a compactSize\n /// unsigned integer, little-endian.\n bytes outputVector;\n /// @notice Bitcoin transaction locktime.\n ///\n /// @dev `lock_time` from raw Bitcoin transaction data.\n /// Encoded as 4-bytes unsigned integer, little endian.\n bytes4 locktime;\n }\n\n /// @notice Represents data needed to perform a Bitcoin SPV proof.\n struct Proof {\n /// @notice The merkle proof of transaction inclusion in a block.\n bytes merkleProof;\n /// @notice Transaction index in the block (0-indexed).\n uint256 txIndexInBlock;\n /// @notice Single byte-string of 80-byte bitcoin headers,\n /// lowest height first.\n bytes bitcoinHeaders;\n }\n\n /// @notice Represents info about an unspent transaction output.\n struct UTXO {\n /// @notice Hash of the transaction the output belongs to.\n /// @dev Byte order corresponds to the Bitcoin internal byte order.\n bytes32 txHash;\n /// @notice Index of the transaction output (0-indexed).\n uint32 txOutputIndex;\n /// @notice Value of the transaction output.\n uint64 txOutputValue;\n }\n\n /// @notice Represents Bitcoin signature in the R/S/V format.\n struct RSVSignature {\n /// @notice Signature r value.\n bytes32 r;\n /// @notice Signature s value.\n bytes32 s;\n /// @notice Signature recovery value.\n uint8 v;\n }\n\n /// @notice Validates the SPV proof of the Bitcoin transaction.\n /// Reverts in case the validation or proof verification fail.\n /// @param txInfo Bitcoin transaction data\n /// @param proof Bitcoin proof data\n /// @return txHash Proven 32-byte transaction hash.\n function validateProof(\n BridgeState.Storage storage self,\n Info calldata txInfo,\n Proof calldata proof\n ) internal view returns (bytes32 txHash) {\n require(\n txInfo.inputVector.validateVin(),\n \"Invalid input vector provided\"\n );\n require(\n txInfo.outputVector.validateVout(),\n \"Invalid output vector provided\"\n );\n\n txHash = abi\n .encodePacked(\n txInfo.version,\n txInfo.inputVector,\n txInfo.outputVector,\n txInfo.locktime\n )\n .hash256View();\n\n require(\n txHash.prove(\n proof.bitcoinHeaders.extractMerkleRootLE(),\n proof.merkleProof,\n proof.txIndexInBlock\n ),\n \"Tx merkle proof is not valid for provided header and tx hash\"\n );\n\n evaluateProofDifficulty(self, proof.bitcoinHeaders);\n\n return txHash;\n }\n\n /// @notice Evaluates the given Bitcoin proof difficulty against the actual\n /// Bitcoin chain difficulty provided by the relay oracle.\n /// Reverts in case the evaluation fails.\n /// @param bitcoinHeaders Bitcoin headers chain being part of the SPV\n /// proof. Used to extract the observed proof difficulty\n function evaluateProofDifficulty(\n BridgeState.Storage storage self,\n bytes memory bitcoinHeaders\n ) internal view {\n IRelay relay = self.relay;\n uint256 currentEpochDifficulty = relay.getCurrentEpochDifficulty();\n uint256 previousEpochDifficulty = relay.getPrevEpochDifficulty();\n\n uint256 requestedDiff = 0;\n uint256 firstHeaderDiff = bitcoinHeaders\n .extractTarget()\n .calculateDifficulty();\n\n if (firstHeaderDiff == currentEpochDifficulty) {\n requestedDiff = currentEpochDifficulty;\n } else if (firstHeaderDiff == previousEpochDifficulty) {\n requestedDiff = previousEpochDifficulty;\n } else {\n revert(\"Not at current or previous difficulty\");\n }\n\n uint256 observedDiff = bitcoinHeaders.validateHeaderChain();\n\n require(\n observedDiff != ValidateSPV.getErrBadLength(),\n \"Invalid length of the headers chain\"\n );\n require(\n observedDiff != ValidateSPV.getErrInvalidChain(),\n \"Invalid headers chain\"\n );\n require(\n observedDiff != ValidateSPV.getErrLowWork(),\n \"Insufficient work in a header\"\n );\n\n require(\n observedDiff >= requestedDiff * self.txProofDifficultyFactor,\n \"Insufficient accumulated difficulty in header chain\"\n );\n }\n\n /// @notice Extracts public key hash from the provided P2PKH or P2WPKH output.\n /// Reverts if the validation fails.\n /// @param output The transaction output\n /// @return pubKeyHash 20-byte public key hash the output locks funds on\n /// @dev Requirements:\n /// - The output must be of P2PKH or P2WPKH type and lock the funds\n /// on a 20-byte public key hash\n function extractPubKeyHash(BridgeState.Storage storage, bytes memory output)\n internal\n view\n returns (bytes20 pubKeyHash)\n {\n bytes memory pubKeyHashBytes = output.extractHash();\n\n require(\n pubKeyHashBytes.length == 20,\n \"Output's public key hash must have 20 bytes\"\n );\n\n pubKeyHash = pubKeyHashBytes.slice20(0);\n\n // We need to make sure that the 20-byte public key hash\n // is actually used in the right context of a P2PKH or P2WPKH\n // output. To do so, we must extract the full script from the output\n // and compare with the expected P2PKH and P2WPKH scripts\n // referring to that 20-byte public key hash. The output consists\n // of an 8-byte value and a variable length script. To extract the\n // script we slice the output starting from 9th byte until the end.\n bytes32 outputScriptKeccak = keccak256(\n output.slice(8, output.length - 8)\n );\n // Build the expected P2PKH script which has the following byte\n // format: <0x1976a914> <20-byte PKH> <0x88ac>. According to\n // https://en.bitcoin.it/wiki/Script#Opcodes this translates to:\n // - 0x19: Byte length of the entire script\n // - 0x76: OP_DUP\n // - 0xa9: OP_HASH160\n // - 0x14: Byte length of the public key hash\n // - 0x88: OP_EQUALVERIFY\n // - 0xac: OP_CHECKSIG\n // which matches the P2PKH structure as per:\n // https://en.bitcoin.it/wiki/Transaction#Pay-to-PubkeyHash\n bytes32 P2PKHScriptKeccak = keccak256(\n abi.encodePacked(hex\"1976a914\", pubKeyHash, hex\"88ac\")\n );\n // Build the expected P2WPKH script which has the following format:\n // <0x160014> <20-byte PKH>. According to\n // https://en.bitcoin.it/wiki/Script#Opcodes this translates to:\n // - 0x16: Byte length of the entire script\n // - 0x00: OP_0\n // - 0x14: Byte length of the public key hash\n // which matches the P2WPKH structure as per:\n // https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#P2WPKH\n bytes32 P2WPKHScriptKeccak = keccak256(\n abi.encodePacked(hex\"160014\", pubKeyHash)\n );\n // Make sure the actual output script matches either the P2PKH\n // or P2WPKH format.\n require(\n outputScriptKeccak == P2PKHScriptKeccak ||\n outputScriptKeccak == P2WPKHScriptKeccak,\n \"Output must be P2PKH or P2WPKH\"\n );\n\n return pubKeyHash;\n }\n}\n"
|
|
125
|
+
"content": "// SPDX-License-Identifier: MIT\n\n// ██████████████ ▐████▌ ██████████████\n// ██████████████ ▐████▌ ██████████████\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ██████████████ ▐████▌ ██████████████\n// ██████████████ ▐████▌ ██████████████\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n\npragma solidity ^0.8.9;\n\nimport {BTCUtils} from \"@keep-network/bitcoin-spv-sol/contracts/BTCUtils.sol\";\nimport {BytesLib} from \"@keep-network/bitcoin-spv-sol/contracts/BytesLib.sol\";\nimport {ValidateSPV} from \"@keep-network/bitcoin-spv-sol/contracts/ValidateSPV.sol\";\n\nimport \"./BridgeState.sol\";\n\n/// @title Bitcoin transaction\n/// @notice Allows to reference Bitcoin raw transaction in Solidity.\n/// @dev See https://developer.bitcoin.org/reference/transactions.html#raw-transaction-format\n///\n/// Raw Bitcoin transaction data:\n///\n/// | Bytes | Name | BTC type | Description |\n/// |--------|--------------|------------------------|---------------------------|\n/// | 4 | version | int32_t (LE) | TX version number |\n/// | varies | tx_in_count | compactSize uint (LE) | Number of TX inputs |\n/// | varies | tx_in | txIn[] | TX inputs |\n/// | varies | tx_out_count | compactSize uint (LE) | Number of TX outputs |\n/// | varies | tx_out | txOut[] | TX outputs |\n/// | 4 | lock_time | uint32_t (LE) | Unix time or block number |\n///\n//\n/// Non-coinbase transaction input (txIn):\n///\n/// | Bytes | Name | BTC type | Description |\n/// |--------|------------------|------------------------|---------------------------------------------|\n/// | 36 | previous_output | outpoint | The previous outpoint being spent |\n/// | varies | script_bytes | compactSize uint (LE) | The number of bytes in the signature script |\n/// | varies | signature_script | char[] | The signature script, empty for P2WSH |\n/// | 4 | sequence | uint32_t (LE) | Sequence number |\n///\n///\n/// The reference to transaction being spent (outpoint):\n///\n/// | Bytes | Name | BTC type | Description |\n/// |-------|-------|---------------|------------------------------------------|\n/// | 32 | hash | char[32] | Hash of the transaction to spend |\n/// | 4 | index | uint32_t (LE) | Index of the specific output from the TX |\n///\n///\n/// Transaction output (txOut):\n///\n/// | Bytes | Name | BTC type | Description |\n/// |--------|-----------------|-----------------------|--------------------------------------|\n/// | 8 | value | int64_t (LE) | Number of satoshis to spend |\n/// | 1+ | pk_script_bytes | compactSize uint (LE) | Number of bytes in the pubkey script |\n/// | varies | pk_script | char[] | Pubkey script |\n///\n/// compactSize uint format:\n///\n/// | Value | Bytes | Format |\n/// |-----------------------------------------|-------|----------------------------------------------|\n/// | >= 0 && <= 252 | 1 | uint8_t |\n/// | >= 253 && <= 0xffff | 3 | 0xfd followed by the number as uint16_t (LE) |\n/// | >= 0x10000 && <= 0xffffffff | 5 | 0xfe followed by the number as uint32_t (LE) |\n/// | >= 0x100000000 && <= 0xffffffffffffffff | 9 | 0xff followed by the number as uint64_t (LE) |\n///\n/// (*) compactSize uint is often references as VarInt)\n///\n/// Coinbase transaction input (txIn):\n///\n/// | Bytes | Name | BTC type | Description |\n/// |--------|------------------|------------------------|---------------------------------------------|\n/// | 32 | hash | char[32] | A 32-byte 0x0 null (no previous_outpoint) |\n/// | 4 | index | uint32_t (LE) | 0xffffffff (no previous_outpoint) |\n/// | varies | script_bytes | compactSize uint (LE) | The number of bytes in the coinbase script |\n/// | varies | height | char[] | The block height of this block (BIP34) (*) |\n/// | varies | coinbase_script | none | Arbitrary data, max 100 bytes |\n/// | 4 | sequence | uint32_t (LE) | Sequence number\n///\n/// (*) Uses script language: starts with a data-pushing opcode that indicates how many bytes to push to\n/// the stack followed by the block height as a little-endian unsigned integer. This script must be as\n/// short as possible, otherwise it may be rejected. The data-pushing opcode will be 0x03 and the total\n/// size four bytes until block 16,777,216 about 300 years from now.\nlibrary BitcoinTx {\n using BTCUtils for bytes;\n using BTCUtils for uint256;\n using BytesLib for bytes;\n using ValidateSPV for bytes;\n using ValidateSPV for bytes32;\n\n /// @notice Represents Bitcoin transaction data.\n struct Info {\n /// @notice Bitcoin transaction version\n /// @dev `version` from raw Bitcoin transaction data.\n /// Encoded as 4-bytes signed integer, little endian.\n bytes4 version;\n /// @notice All Bitcoin transaction inputs, prepended by the number of\n /// transaction inputs.\n /// @dev `tx_in_count | tx_in` from raw Bitcoin transaction data.\n ///\n /// The number of transaction inputs encoded as compactSize\n /// unsigned integer, little-endian.\n ///\n /// Note that some popular block explorers reverse the order of\n /// bytes from `outpoint`'s `hash` and display it as big-endian.\n /// Solidity code of Bridge expects hashes in little-endian, just\n /// like they are represented in a raw Bitcoin transaction.\n bytes inputVector;\n /// @notice All Bitcoin transaction outputs prepended by the number of\n /// transaction outputs.\n /// @dev `tx_out_count | tx_out` from raw Bitcoin transaction data.\n ///\n /// The number of transaction outputs encoded as a compactSize\n /// unsigned integer, little-endian.\n bytes outputVector;\n /// @notice Bitcoin transaction locktime.\n ///\n /// @dev `lock_time` from raw Bitcoin transaction data.\n /// Encoded as 4-bytes unsigned integer, little endian.\n bytes4 locktime;\n }\n\n /// @notice Represents data needed to perform a Bitcoin SPV proof.\n struct Proof {\n /// @notice The merkle proof of transaction inclusion in a block.\n bytes merkleProof;\n /// @notice Transaction index in the block (0-indexed).\n uint256 txIndexInBlock;\n /// @notice Single byte-string of 80-byte bitcoin headers,\n /// lowest height first.\n bytes bitcoinHeaders;\n }\n\n /// @notice Represents info about an unspent transaction output.\n struct UTXO {\n /// @notice Hash of the transaction the output belongs to.\n /// @dev Byte order corresponds to the Bitcoin internal byte order.\n bytes32 txHash;\n /// @notice Index of the transaction output (0-indexed).\n uint32 txOutputIndex;\n /// @notice Value of the transaction output.\n uint64 txOutputValue;\n }\n\n /// @notice Represents Bitcoin signature in the R/S/V format.\n struct RSVSignature {\n /// @notice Signature r value.\n bytes32 r;\n /// @notice Signature s value.\n bytes32 s;\n /// @notice Signature recovery value.\n uint8 v;\n }\n\n /// @notice Validates the SPV proof of the Bitcoin transaction.\n /// Reverts in case the validation or proof verification fail.\n /// @param txInfo Bitcoin transaction data\n /// @param proof Bitcoin proof data\n /// @return txHash Proven 32-byte transaction hash.\n function validateProof(\n BridgeState.Storage storage self,\n Info calldata txInfo,\n Proof calldata proof\n ) internal view returns (bytes32 txHash) {\n require(\n txInfo.inputVector.validateVin(),\n \"Invalid input vector provided\"\n );\n require(\n txInfo.outputVector.validateVout(),\n \"Invalid output vector provided\"\n );\n\n txHash = abi\n .encodePacked(\n txInfo.version,\n txInfo.inputVector,\n txInfo.outputVector,\n txInfo.locktime\n )\n .hash256View();\n\n require(\n txHash.prove(\n proof.bitcoinHeaders.extractMerkleRootLE(),\n proof.merkleProof,\n proof.txIndexInBlock\n ),\n \"Tx merkle proof is not valid for provided header and tx hash\"\n );\n\n evaluateProofDifficulty(self, proof.bitcoinHeaders);\n\n return txHash;\n }\n\n /// @notice Evaluates the given Bitcoin proof difficulty against the actual\n /// Bitcoin chain difficulty provided by the relay oracle.\n /// Reverts in case the evaluation fails.\n /// @param bitcoinHeaders Bitcoin headers chain being part of the SPV\n /// proof. Used to extract the observed proof difficulty\n function evaluateProofDifficulty(\n BridgeState.Storage storage self,\n bytes memory bitcoinHeaders\n ) internal view {\n IRelay relay = self.relay;\n uint256 currentEpochDifficulty = relay.getCurrentEpochDifficulty();\n uint256 previousEpochDifficulty = relay.getPrevEpochDifficulty();\n\n uint256 requestedDiff = 0;\n uint256 firstHeaderDiff = bitcoinHeaders\n .extractTarget()\n .calculateDifficulty();\n\n if (firstHeaderDiff == currentEpochDifficulty) {\n requestedDiff = currentEpochDifficulty;\n } else if (firstHeaderDiff == previousEpochDifficulty) {\n requestedDiff = previousEpochDifficulty;\n } else {\n revert(\"Not at current or previous difficulty\");\n }\n\n uint256 observedDiff = bitcoinHeaders.validateHeaderChain();\n\n require(\n observedDiff != ValidateSPV.getErrBadLength(),\n \"Invalid length of the headers chain\"\n );\n require(\n observedDiff != ValidateSPV.getErrInvalidChain(),\n \"Invalid headers chain\"\n );\n require(\n observedDiff != ValidateSPV.getErrLowWork(),\n \"Insufficient work in a header\"\n );\n\n require(\n observedDiff >= requestedDiff * self.txProofDifficultyFactor,\n \"Insufficient accumulated difficulty in header chain\"\n );\n }\n\n /// @notice Extracts public key hash from the provided P2PKH or P2WPKH output.\n /// Reverts if the validation fails.\n /// @param output The transaction output\n /// @return pubKeyHash 20-byte public key hash the output locks funds on\n /// @dev Requirements:\n /// - The output must be of P2PKH or P2WPKH type and lock the funds\n /// on a 20-byte public key hash\n function extractPubKeyHash(BridgeState.Storage storage, bytes memory output)\n internal\n view\n returns (bytes20 pubKeyHash)\n {\n bytes memory pubKeyHashBytes = output.extractHash();\n\n require(\n pubKeyHashBytes.length == 20,\n \"Output's public key hash must have 20 bytes\"\n );\n\n pubKeyHash = pubKeyHashBytes.slice20(0);\n\n // We need to make sure that the 20-byte public key hash\n // is actually used in the right context of a P2PKH or P2WPKH\n // output. To do so, we must extract the full script from the output\n // and compare with the expected P2PKH and P2WPKH scripts\n // referring to that 20-byte public key hash. The output consists\n // of an 8-byte value and a variable length script. To extract the\n // script we slice the output starting from 9th byte until the end.\n bytes32 outputScriptKeccak = keccak256(\n output.slice(8, output.length - 8)\n );\n // Build the expected P2PKH script which has the following byte\n // format: <0x1976a914> <20-byte PKH> <0x88ac>. According to\n // https://en.bitcoin.it/wiki/Script#Opcodes this translates to:\n // - 0x19: Byte length of the entire script\n // - 0x76: OP_DUP\n // - 0xa9: OP_HASH160\n // - 0x14: Byte length of the public key hash\n // - 0x88: OP_EQUALVERIFY\n // - 0xac: OP_CHECKSIG\n // which matches the P2PKH structure as per:\n // https://en.bitcoin.it/wiki/Transaction#Pay-to-PubkeyHash\n bytes32 P2PKHScriptKeccak = keccak256(\n abi.encodePacked(hex\"1976a914\", pubKeyHash, hex\"88ac\")\n );\n // Build the expected P2WPKH script which has the following format:\n // <0x160014> <20-byte PKH>. According to\n // https://en.bitcoin.it/wiki/Script#Opcodes this translates to:\n // - 0x16: Byte length of the entire script\n // - 0x00: OP_0\n // - 0x14: Byte length of the public key hash\n // which matches the P2WPKH structure as per:\n // https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#P2WPKH\n bytes32 P2WPKHScriptKeccak = keccak256(\n abi.encodePacked(hex\"160014\", pubKeyHash)\n );\n // Make sure the actual output script matches either the P2PKH\n // or P2WPKH format.\n require(\n outputScriptKeccak == P2PKHScriptKeccak ||\n outputScriptKeccak == P2WPKHScriptKeccak,\n \"Output must be P2PKH or P2WPKH\"\n );\n\n return pubKeyHash;\n }\n}\n"
|
|
126
126
|
},
|
|
127
127
|
"contracts/bridge/EcdsaLib.sol": {
|
|
128
128
|
"content": "// SPDX-License-Identifier: MIT\n\n// ██████████████ ▐████▌ ██████████████\n// ██████████████ ▐████▌ ██████████████\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ██████████████ ▐████▌ ██████████████\n// ██████████████ ▐████▌ ██████████████\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n\npragma solidity ^0.8.9;\n\nimport \"@keep-network/bitcoin-spv-sol/contracts/BytesLib.sol\";\n\nlibrary EcdsaLib {\n using BytesLib for bytes;\n\n /// @notice Converts public key X and Y coordinates (32-byte each) to a\n /// compressed public key (33-byte). Compressed public key is X\n /// coordinate prefixed with `02` or `03` based on the Y coordinate parity.\n /// It is expected that the uncompressed public key is stripped\n /// (i.e. it is not prefixed with `04`).\n /// @param x Wallet's public key's X coordinate.\n /// @param y Wallet's public key's Y coordinate.\n /// @return Compressed public key (33-byte), prefixed with `02` or `03`.\n function compressPublicKey(bytes32 x, bytes32 y)\n internal\n pure\n returns (bytes memory)\n {\n bytes1 prefix;\n if (uint256(y) % 2 == 0) {\n prefix = hex\"02\";\n } else {\n prefix = hex\"03\";\n }\n\n return bytes.concat(prefix, x);\n }\n}\n"
|
|
@@ -179,7 +179,13 @@
|
|
|
179
179
|
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.9;\n\nimport \"../bridge/Bridge.sol\";\n\ncontract TestRelay is IRelay {\n uint256 private currentEpochDifficulty;\n uint256 private prevEpochDifficulty;\n\n function setCurrentEpochDifficulty(uint256 _difficulty) external {\n currentEpochDifficulty = _difficulty;\n }\n\n function setPrevEpochDifficulty(uint256 _difficulty) external {\n prevEpochDifficulty = _difficulty;\n }\n\n function getCurrentEpochDifficulty()\n external\n view\n override\n returns (uint256)\n {\n return currentEpochDifficulty;\n }\n\n function getPrevEpochDifficulty() external view override returns (uint256) {\n return prevEpochDifficulty;\n }\n}\n"
|
|
180
180
|
},
|
|
181
181
|
"contracts/test/TestEcdsaLib.sol": {
|
|
182
|
-
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.9;\n\nimport \"../bridge/EcdsaLib.sol\";\n\n/// @dev This is a contract implemented to test EcdsaLib library directly.\ncontract TestEcdsaLib {\n function compressPublicKey(bytes32 x, bytes32 y)\n public\n pure\n returns (bytes memory)\n {\n return EcdsaLib.compressPublicKey(x, y);\n }\n}\n"
|
|
182
|
+
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.9;\n\nimport \"../bridge/EcdsaLib.sol\";\n\n// TODO: Rename to EcdsLibStub\n/// @dev This is a contract implemented to test EcdsaLib library directly.\ncontract TestEcdsaLib {\n function compressPublicKey(bytes32 x, bytes32 y)\n public\n pure\n returns (bytes memory)\n {\n return EcdsaLib.compressPublicKey(x, y);\n }\n}\n"
|
|
183
|
+
},
|
|
184
|
+
"contracts/bridge/Heartbeat.sol": {
|
|
185
|
+
"content": "// SPDX-License-Identifier: MIT\n\n// ██████████████ ▐████▌ ██████████████\n// ██████████████ ▐████▌ ██████████████\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ██████████████ ▐████▌ ██████████████\n// ██████████████ ▐████▌ ██████████████\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n\npragma solidity ^0.8.9;\n\nimport {BytesLib} from \"@keep-network/bitcoin-spv-sol/contracts/BytesLib.sol\";\n\n/// @title Bridge wallet heartbeat\n/// @notice The library establishes expected format for heartbeat messages\n/// signed by wallet ECDSA signing group. Heartbeat messages are\n/// constructed in such a way that they can not be used as a Bitcoin\n/// transaction preimages.\n/// @dev The smallest Bitcoin non-coinbase transaction is a one spending an\n/// OP_TRUE anyonecanspend output and creating 1 OP_TRUE anyonecanspend\n/// output. Such a transaction has 61 bytes (see `BitcoinTx` documentation):\n/// 4 bytes for version\n/// 1 byte for tx_in_count\n/// 36 bytes for tx_in.previous_output\n/// 1 byte for tx_in.script_bytes (value: 0)\n/// 0 bytes for tx_in.signature_script\n/// 4 bytes for tx_in.sequence\n/// 1 byte for tx_out_count\n/// 8 bytes for tx_out.value\n/// 1 byte for tx_out.pk_script_bytes\n/// 1 byte for tx_out.pk_script\n/// 4 bytes for lock_time\n///\n///\n/// The smallest Bitcoin coinbase transaction is a one creating\n/// 1 OP_TRUE anyonecanspend output and having an empty coinbase script.\n/// Such a transaction has 65 bytes:\n/// 4 bytes for version\n/// 1 byte for tx_in_count\n/// 32 bytes for tx_in.hash (all 0x00)\n/// 4 bytes for tx_in.index (all 0xff)\n/// 1 byte for tx_in.script_bytes (value: 0)\n/// 4 bytes for tx_in.height\n/// 0 byte for tx_in.coinbase_script\n/// 4 bytes for tx_in.sequence\n/// 1 byte for tx_out_count\n/// 8 bytes for tx_out.value\n/// 1 byte for tx_out.pk_script_bytes\n/// 1 byte for tx_out.pk_script\n/// 4 bytes for lock_time\n///\n///\n/// A SIGHASH flag is used to indicate which part of the transaction is\n/// signed by the ECDSA signature. There are currently 3 flags:\n/// SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE, and different combinations\n/// of these flags.\n///\n/// No matter the SIGHASH flag and no matter the combination, the following\n/// fields from the transaction are always included in the constructed\n/// preimage:\n/// 4 bytes for version\n/// 36 bytes for tx_in.previous_output (or tx_in.hash + tx_in.index for coinbase)\n/// 4 bytes for lock_time\n///\n/// Additionally, the last 4 bytes of the preimage determines the SIGHASH\n/// flag.\n///\n/// This is enough to say there is no way the preimage could be shorter\n/// than 4 + 36 + 4 + 4 = 48 bytes.\n///\n/// For this reason, we construct the heartbeat message, as a 16-byte\n/// message. The first 8 bytes are 0xffffffffffffffff. The last 8 bytes\n/// are for an arbitrary uint64, being a signed heartbeat nonce (for\n/// example, the last Ethereum block hash).\nlibrary Heartbeat {\n using BytesLib for bytes;\n\n /// @notice Determines if the signed byte array is a valid, non-fraudulent\n /// heartbeat message.\n /// @param message Message signed by the wallet. It is a potential heartbeat\n /// message, Bitcoin transaction preimage, or an arbitrary signed\n /// bytes\n /// @dev Wallet heartbeat message must be exactly 16 bytes long with the first\n /// 8 bytes set to 0xffffffffffffffff.\n /// @return True if valid heartbeat message, false otherwise.\n function isValidHeartbeatMessage(bytes calldata message)\n internal\n pure\n returns (bool)\n {\n if (message.length != 16) {\n return false;\n }\n\n if (message.slice8(0) != 0xffffffffffffffff) {\n return false;\n }\n\n return true;\n }\n}\n"
|
|
186
|
+
},
|
|
187
|
+
"contracts/test/HeartbeatStub.sol": {
|
|
188
|
+
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.9;\n\nimport \"../bridge/Heartbeat.sol\";\n\n/// @dev This is a contract implemented to test Heartbeat library directly.\ncontract HeartbeatStub {\n function isValidHeartbeatMessage(bytes calldata message)\n public\n pure\n returns (bool)\n {\n return Heartbeat.isValidHeartbeatMessage(message);\n }\n}\n"
|
|
183
189
|
},
|
|
184
190
|
"contracts/test/TestERC721.sol": {
|
|
185
191
|
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.9;\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721.sol\";\n\ncontract TestERC721 is ERC721 {\n string public constant NAME = \"Test ERC721 Token\";\n string public constant SYMBOL = \"TT\";\n\n constructor() ERC721(NAME, SYMBOL) {}\n\n function mint(address to, uint256 tokenId) public {\n _mint(to, tokenId);\n }\n}\n"
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
"contractName": "BitcoinTx",
|
|
4
4
|
"sourceName": "contracts/bridge/BitcoinTx.sol",
|
|
5
5
|
"abi": [],
|
|
6
|
-
"bytecode": "
|
|
7
|
-
"deployedBytecode": "
|
|
6
|
+
"bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cd2c40d1456f625da802b418785b7ad8428472a904c1782ddef8b4c5e01bd35b64736f6c63430008090033",
|
|
7
|
+
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220cd2c40d1456f625da802b418785b7ad8428472a904c1782ddef8b4c5e01bd35b64736f6c63430008090033",
|
|
8
8
|
"linkReferences": {},
|
|
9
9
|
"deployedLinkReferences": {}
|
|
10
10
|
}
|
|
@@ -2358,8 +2358,8 @@
|
|
|
2358
2358
|
"type": "function"
|
|
2359
2359
|
}
|
|
2360
2360
|
],
|
|
2361
|
-
"bytecode": "0x60806040523480156200001157600080fd5b5060405162004472380380620044728339810160408190526200003491620003e1565b6001600160a01b038516620000905760405162461bcd60e51b815260206004820152601b60248201527f42616e6b20616464726573732063616e6e6f74206265207a65726f000000000060448201526064015b60405180910390fd5b600180546001600160a01b0319166001600160a01b03878116919091179091558416620001005760405162461bcd60e51b815260206004820152601c60248201527f52656c617920616464726573732063616e6e6f74206265207a65726f00000000604482015260640162000087565b600280546001600160a01b0319166001600160a01b03868116919091179091558216620001855760405162461bcd60e51b815260206004820152602c60248201527f45434453412057616c6c6574205265676973747279206164647265737320636160448201526b6e6e6f74206265207a65726f60a01b606482015260840162000087565b600380546001600160a01b0319166001600160a01b03848116919091179091558316620001f55760405162461bcd60e51b815260206004820152601f60248201527f547265617375727920616464726573732063616e6e6f74206265207a65726f00604482015260640162000087565b6005805460048390556001600160a01b0385166001600160e01b031990911617613d0960a61b179055600680546001600160801b03191669271000000000000007d0179055600e80546001600160c01b031990811671271000000000000007d000000000000f4240179091556202a300600f556010805469021e19e0c9bab24000006001600160601b03199182168117909255606460118190557d021e19e0c9bab240000000093a800000000000004e200000000000002710600955600a819055600b805490941675021e19e0c9bab240000000093a80000000000000271017909355600c839055671bc16d674ec8000060145562093a806015556016805490911690911790556017557eeff1000000000002faf08000000002540be4000000000005f5e10000093a80601a55601b80546001600160c01b0316621dcd6560c91b179055601c80546234bc0063ffffffff19909116179055620003583362000363565b505050505062000448565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b80516001600160a01b0381168114620003dc57600080fd5b919050565b600080600080600060a08688031215620003fa57600080fd5b6200040586620003c4565b94506200041560208701620003c4565b93506200042560408701620003c4565b92506200043560608701620003c4565b9150608086015190509295509295909350565b61401a80620004586000396000f3fe6080604052600436106102f25760003560e01c8063883d6a111161018f578063b29a604b116100e1578063d38bfff41161008a578063e53c0b5511610064578063e53c0b5514610de0578063e65e19d514610e19578063f18cf1b114610e4657600080fd5b8063d38bfff414610d74578063d6eccdf014610d94578063ded1d24a14610db457600080fd5b8063be05abe3116100bb578063be05abe314610c62578063c42b64d014610d09578063c8b5d2db14610d5457600080fd5b8063b29a604b14610c02578063b34b321614610c22578063b7d372a414610c4257600080fd5b8063a8fa0f4211610143578063b02c43d01161011d578063b02c43d014610a5f578063b2146cd614610ba2578063b216bd3514610be257600080fd5b8063a8fa0f42146109df578063a9de2f3a146109ff578063abaeed8f14610a3f57600080fd5b806392238f321161017457806392238f321461097f578063a145e2d51461099f578063a51e3d1a146109bf57600080fd5b8063883d6a111461093f57806391a9fdde1461095f57600080fd5b806350aea15a1161024857806361ccf97a116101fc5780636e70ce41116101d65780636e70ce411461084657806375b922d1146108d857806377145f211461091f57600080fd5b806361ccf97a1461078557806361d027b3146108155780636d02b43c1461083357600080fd5b80635aa6e6751161022d5780635aa6e6751461070d5780635c0b48121461074557806360d712fc1461076557600080fd5b806350aea15a146106cd578063575e4279146106ed57600080fd5b80632bb818c2116102aa57806333e957cb1161028457806333e957cb146105ae5780633dce98121461068d5780634fb1b4c6146106ad57600080fd5b80632bb818c2146105505780632f429b641461056e57806331a4889a1461058e57600080fd5b80630b6ba19d116102db5780630b6ba19d1461044157806317c96400146104fe57806324028c111461051e57600080fd5b806303d952f7146102f757806307f7d2231461041f575b600080fd5b34801561030357600080fd5b506103b4610312366004612f11565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260126020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b90046001600160401b039081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b6040516104169190600060a0820190506001600160a01b03835116825260208301516001600160401b038082166020850152806040860151166040850152806060860151166060850152505063ffffffff608084015116608083015292915050565b60405180910390f35b34801561042b57600080fd5b5061043f61043a366004612f5f565b610e73565b005b34801561044d57600080fd5b506103b461045c366004612f11565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260136020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b90046001600160401b039081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b34801561050a57600080fd5b5061043f610519366004612faa565b610efc565b34801561052a57600080fd5b50601b54600160a01b900463ffffffff1660405163ffffffff9091168152602001610416565b34801561055c57600080fd5b50600454604051908152602001610416565b34801561057a57600080fd5b5061043f610589366004612fff565b610f6d565b34801561059a57600080fd5b5061043f6105a9366004613110565b610ffa565b3480156105ba57600080fd5b506106496105c9366004612f11565b60408051608081018252600080825260208201819052918101829052606081019190915250600090815260186020908152604091829020825160808101845281546001600160a01b031681526001820154928101929092526002015463ffffffff81169282019290925264010000000090910460ff161515606082015290565b604051610416919081516001600160a01b031681526020808301519082015260408083015163ffffffff169082015260609182015115159181019190915260800190565b34801561069957600080fd5b5061043f6106a8366004613190565b61108c565b3480156106b957600080fd5b5061043f6106c83660046131bc565b61111c565b3480156106d957600080fd5b5061043f6106e8366004613243565b611177565b3480156106f957600080fd5b5061043f610708366004612f5f565b6111d0565b34801561071957600080fd5b5060005461072d906001600160a01b031681565b6040516001600160a01b039091168152602001610416565b34801561075157600080fd5b5061043f61076036600461329c565b611225565b34801561077157600080fd5b5061043f61078036600461331d565b61127a565b34801561079157600080fd5b50601a54601b54601c546040805163ffffffff80861682526001600160401b036401000000008704811660208401526c010000000000000000000000008704811693830193909352600160a01b860483166060830152600160e01b90950485166080820152600160c01b9093041660a08301529190911660c082015260e001610416565b34801561082157600080fd5b506005546001600160a01b031661072d565b61043f610841366004613347565b611333565b34801561085257600080fd5b50610891600e54600f546010546011546001600160401b0380851695600160401b8604821695600160801b900490911693926001600160601b03169190565b604080516001600160401b0397881681529587166020870152939095169284019290925260608301526001600160601b0316608082015260a081019190915260c001610416565b3480156108e457600080fd5b506014546015546016546017546040805194855260208501939093526001600160601b03909116918301919091526060820152608001610416565b34801561092b57600080fd5b5061043f61093a366004613399565b61138c565b34801561094b57600080fd5b5061043f61095a366004613419565b6113e7565b34801561096b57600080fd5b5061043f61097a36600461349f565b611452565b34801561098b57600080fd5b5061043f61099a36600461350a565b6114a9565b3480156109ab57600080fd5b5061043f6109ba36600461355c565b611500565b3480156109cb57600080fd5b5061043f6109da366004613596565b611586565b3480156109eb57600080fd5b5061043f6109fa366004613190565b6115f3565b348015610a0b57600080fd5b50600154600254600354604080516001600160a01b0394851681529284166020840152921691810191909152606001610416565b348015610a4b57600080fd5b5061043f610a5a366004613630565b611659565b348015610a6b57600080fd5b50610b2d610a7a366004612f11565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915250600090815260076020908152604091829020825160c08101845281546001600160a01b0380821683526001600160401b03600160a01b80840482169685019690965263ffffffff600160e01b938490048116978501979097526001949094015490811660608401529384049092166080820152910490911660a082015290565b6040516104169190600060c0820190506001600160a01b0380845116835260208401516001600160401b0380821660208601526040860151915063ffffffff80831660408701528360608801511660608701528160808801511660808701528060a08801511660a08701525050505092915050565b348015610bae57600080fd5b50610bd2610bbd366004612f11565b60009081526019602052604090205460ff1690565b6040519015158152602001610416565b348015610bee57600080fd5b5061043f610bfd3660046136cb565b6116f1565b348015610c0e57600080fd5b5061043f610c1d366004613731565b61175b565b348015610c2e57600080fd5b5061043f610c3d366004612fff565b6117c9565b348015610c4e57600080fd5b5061043f610c5d36600461349f565b611822565b348015610c6e57600080fd5b50600954600a54600b54600c54604080516001600160401b038087168252600160401b80880482166020840152600160801b880463ffffffff90811694840194909452600160a01b9097046001600160601b0390811660608401526080830196909652841660a08201529483041660c08501526c0100000000000000000000000090910490911660e083015261010082015261012001610416565b348015610d1557600080fd5b5060055460065460408051600160a01b9093046001600160401b0390811684528083166020850152600160401b90920490911690820152606001610416565b348015610d6057600080fd5b5061043f610d6f36600461376e565b611879565b348015610d8057600080fd5b5061043f610d8f366004613789565b611887565b348015610da057600080fd5b5061043f610daf3660046137a4565b611966565b348015610dc057600080fd5b50601b5460601b6040516001600160601b03199091168152602001610416565b348015610dec57600080fd5b50610bd2610dfb366004613789565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610e2557600080fd5b50610e39610e3436600461376e565b6119c1565b6040516104169190613838565b348015610e5257600080fd5b50610e66610e61366004612f11565b611ae4565b60405161041691906138dc565b6040517f260b6cde00000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063260b6cde90610ec8906001908690869060040161396d565b60006040518083038186803b158015610ee057600080fd5b505af4158015610ef4573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610f5b5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b610f686001848484611b9c565b505050565b6040517e92bac900000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906292bac990610fc4906001908890889088908890600401613b23565b60006040518083038186803b158015610fdc57600080fd5b505af4158015610ff0573d6000803e3d6000fd5b5050505050505050565b6040517fa76558b300000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a76558b3906110559060019089908990899089908990600401613bbc565b60006040518083038186803b15801561106d57600080fd5b505af4158015611081573d6000803e3d6000fd5b505050505050505050565b6040517fc87de7f400000000000000000000000000000000000000000000000000000000815260016004820152602481018390526044810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063c87de7f4906064015b60006040518083038186803b1580156110ff57600080fd5b505af4158015611113573d6000803e3d6000fd5b50505050505050565b6040517f89b43a8600000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__906389b43a86906110559060019089908990899089908990600401613c06565b6040517f899bef9d00000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063899bef9d90610fc4906001908890889088908890600401613c47565b6040517f99b0b84700000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__906399b0b84790610ec8906001908690869060040161396d565b6040517faea7fd0b00000000000000000000000000000000000000000000000000000000815273__$894ce12e79ca3e5683c1b49e363f37fa22$__9063aea7fd0b90610ec89060019086908690600401613c7e565b6000546001600160a01b031633146112d45760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f910160405180910390a25050565b6040517f3b5d9f2400000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__90633b5d9f2490610fc4906001908890889088908890600401613db1565b6040517f624526fe00000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__9063624526fe906110559060019089908990899089908990600401613e0b565b6000546001600160a01b031633146114415760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b611113600188888888888888611dcf565b6040517f2fcc8fb100000000000000000000000000000000000000000000000000000000815273__$24f7e155a6d011c1bf9032506ba9b1954c$__90632fcc8fb1906110e790600190879087908790600401613e4e565b6040517f07f96c4200000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906307f96c42906110e790600190879087908790600401613e92565b6040517fd079fbb100000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063d079fbb190611553906001908590600401613ebc565b60006040518083038186803b15801561156b57600080fd5b505af415801561157f573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146115e05760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b61108160018a8a8a8a8a8a8a8a8a612192565b6040517f4afbe4c90000000000000000000000000000000000000000000000000000000081526001600482015260248101849052604481018390526064810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__90634afbe4c9906084016110e7565b6040517fc8f7794300000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063c8f77943906116b8906001908b908b908b908b908b908b908b90600401613ed0565b60006040518083038186803b1580156116d057600080fd5b505af41580156116e4573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b0316331461174b5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b610ef46001878787878787612741565b6000546001600160a01b031633146117b55760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b6117c3600185858585612ac6565b50505050565b6040517fa164de6e00000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a164de6e90610fc4906001908890889088908890600401613b23565b6040517fb79a972500000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063b79a9725906110e790600190879087908790600401613e4e565b611884600182612c38565b50565b6000546001600160a01b031633146118e15760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b6001600160a01b03811661195d5760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610f52565b61188481612d90565b6040517f7333b36900000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__90637333b369906110559060019089908990899089908990600401613f5b565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101919091526001600160601b031982166000908152601d60209081526040918290208251610120810184528154815260018201549281019290925260028101546001600160401b0381169383019390935263ffffffff600160401b8404811660608401526c01000000000000000000000000840481166080840152600160801b8404811660a0840152600160a01b84041660c0830152909160e083019060ff600160c01b909104166005811115611abe57611abe61380e565b6005811115611acf57611acf61380e565b81526020016003820154815250509050919050565b611b0c6040805160808101825260008082526020820181905291810182905290606082015290565b6000828152600d602090815260409182902082516080810184528154606081811b6001600160601b0319168352600160a01b82046001600160401b031694830194909452600160e01b900463ffffffff16938101939093526001810154909183019060ff166003811115611b8257611b8261380e565b6003811115611b9357611b9361380e565b90525092915050565b6000836001600160401b031611611c1b5760405162461bcd60e51b815260206004820152603060248201527f4465706f7369742064757374207468726573686f6c64206d757374206265206760448201527f726561746572207468616e207a65726f000000000000000000000000000000006064820152608401610f52565b6000826001600160401b031611611c9a5760405162461bcd60e51b815260206004820152603660248201527f4465706f736974207472656173757279206665652064697669736f72206d757360448201527f742062652067726561746572207468616e207a65726f000000000000000000006064820152608401610f52565b6000816001600160401b031611611d195760405162461bcd60e51b815260206004820152603560248201527f4465706f736974207472616e73616374696f6e206d617820666565206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610f52565b6004840180547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16600160a01b6001600160401b03868116918202929092179092556005860180548583166fffffffffffffffffffffffffffffffff199091168117600160401b938616938402179091556040805193845260208401919091528201527f1ced468902ca566e746a3c8c9516af81f8de9f1021c365083be9f2625ebfb7b59060600160405180910390a150505050565b856001600160401b0316856001600160401b031611611e7c5760405162461bcd60e51b815260206004820152605960248201527f57616c6c6574206372656174696f6e206d6178696d756d204254432062616c6160448201527f6e6365206d7573742062652067726561746572207468616e207468652063726560648201527f6174696f6e206d696e696d756d204254432062616c616e636500000000000000608482015260a401610f52565b6000846001600160401b031611611efb5760405162461bcd60e51b815260206004820152603c60248201527f57616c6c657420636c6f73757265206d696e696d756d204254432062616c616e60448201527f6365206d7573742062652067726561746572207468616e207a65726f000000006064820152608401610f52565b6000826001600160401b031611611f7a5760405162461bcd60e51b815260206004820152603560248201527f57616c6c6574206d6178696d756d20425443207472616e73666572206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610f52565b60008163ffffffff1611611ff65760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420636c6f73696e6720706572696f64206d75737420626520677260448201527f6561746572207468616e207a65726f00000000000000000000000000000000006064820152608401610f52565b868860190160006101000a81548163ffffffff021916908363ffffffff160217905550858860190160046101000a8154816001600160401b0302191690836001600160401b031602179055508488601901600c6101000a8154816001600160401b0302191690836001600160401b03160217905550838860190160146101000a8154816001600160401b0302191690836001600160401b031602179055508288601901601c6101000a81548163ffffffff021916908363ffffffff1602179055508188601a0160186101000a8154816001600160401b0302191690836001600160401b031602179055508088601b0160006101000a81548163ffffffff021916908363ffffffff1602179055507fc7d3a9af08692aeae771c329fddd95c7237a9f76fec996325f3959eeff07d4ac87878787878787604051612180979695949392919063ffffffff97881681526001600160401b03968716602082015294861660408601529285166060850152908516608084015290921660a0820152911660c082015260e00190565b60405180910390a15050505050505050565b6000896001600160401b031611612213576040805162461bcd60e51b81526020600482015260248101919091527f4d6f76696e672066756e6473207472616e73616374696f6e206d617820746f7460448201527f616c20666565206d7573742062652067726561746572207468616e207a65726f6064820152608401610f52565b6000886001600160401b0316116122925760405162461bcd60e51b815260206004820152603560248201527f4d6f76696e672066756e64732064757374207468726573686f6c64206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610f52565b60008763ffffffff161161230e5760405162461bcd60e51b815260206004820152602e60248201527f4d6f76696e672066756e64732074696d656f7574206d7573742062652067726560448201527f61746572207468616e207a65726f0000000000000000000000000000000000006064820152608401610f52565b60648511156123ab5760405162461bcd60e51b815260206004820152604d60248201527f4d6f76696e672066756e64732074696d656f7574206e6f74696669657220726560448201527f77617264206d756c7469706c696572206d75737420626520696e20746865207260648201527f616e6765205b302c203130305d00000000000000000000000000000000000000608482015260a401610f52565b6000846001600160401b0316116124505760405162461bcd60e51b815260206004820152604560248201527f4d6f7665642066756e6473207377656570207472616e73616374696f6e206d6160448201527f7820746f74616c20666565206d7573742062652067726561746572207468616e60648201527f207a65726f000000000000000000000000000000000000000000000000000000608482015260a401610f52565b60008363ffffffff16116124cc5760405162461bcd60e51b815260206004820152603360248201527f4d6f7665642066756e64732073776565702074696d656f7574206d757374206260448201527f652067726561746572207468616e207a65726f000000000000000000000000006064820152608401610f52565b60648111156125695760405162461bcd60e51b815260206004820152605260248201527f4d6f7665642066756e64732073776565702074696d656f7574206e6f7469666960448201527f657220726577617264206d756c7469706c696572206d75737420626520696e2060648201527f7468652072616e6765205b302c203130305d0000000000000000000000000000608482015260a401610f52565b888a60080160006101000a8154816001600160401b0302191690836001600160401b03160217905550878a60080160086101000a8154816001600160401b0302191690836001600160401b03160217905550868a60080160106101000a81548163ffffffff021916908363ffffffff160217905550858a60080160146101000a8154816001600160601b0302191690836001600160601b03160217905550848a60090181905550838a600a0160006101000a8154816001600160401b0302191690836001600160401b03160217905550828a600a0160086101000a81548163ffffffff021916908363ffffffff160217905550818a600a01600c6101000a8154816001600160601b0302191690836001600160601b03160217905550808a600b01819055507f5662a4f84a0d9b64b01c0f14b329ff73e09d4bc2e2684d90174e31615b40a4a289898989898989898960405161272d999897969594939291906001600160401b03998a168152978916602089015263ffffffff96871660408901526001600160601b03958616606089015260808801949094529190961660a08601529490921660c08401529290921660e08201526101008101919091526101200190565b60405180910390a150505050505050505050565b6000866001600160401b0316116127c05760405162461bcd60e51b815260206004820152603360248201527f526564656d7074696f6e2064757374207468726573686f6c64206d757374206260448201527f652067726561746572207468616e207a65726f000000000000000000000000006064820152608401610f52565b6000856001600160401b03161161283f5760405162461bcd60e51b815260206004820152603960248201527f526564656d7074696f6e207472656173757279206665652064697669736f722060448201527f6d7573742062652067726561746572207468616e207a65726f000000000000006064820152608401610f52565b6000846001600160401b0316116128be5760405162461bcd60e51b815260206004820152603860248201527f526564656d7074696f6e207472616e73616374696f6e206d617820666565206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610f52565b600083116129345760405162461bcd60e51b815260206004820152602c60248201527f526564656d7074696f6e2074696d656f7574206d75737420626520677265617460448201527f6572207468616e207a65726f00000000000000000000000000000000000000006064820152608401610f52565b60648111156129d15760405162461bcd60e51b815260206004820152604b60248201527f526564656d7074696f6e2074696d656f7574206e6f746966696572207265776160448201527f7264206d756c7469706c696572206d75737420626520696e207468652072616e60648201527f6765205b302c203130305d000000000000000000000000000000000000000000608482015260a401610f52565b600d870180546001600160401b038881166fffffffffffffffffffffffffffffffff199092168217600160401b898316908102919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b92891692830217909355600e8a01869055600f8a0180546001600160601b0319166001600160601b03871690811790915560108b018590556040805193845260208401949094529282015260608101859052608081019190915260a081018290527f944cd06e316cc3da4159300dd41ab23416c89a5136c41fa79d57fe8a34bcc10f9060c00160405180910390a150505050505050565b60008311612b3c5760405162461bcd60e51b815260206004820152603860248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610f52565b6064811115612bb35760405162461bcd60e51b815260206004820152603e60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d75737420626520696e207468652072616e6765205b302c203130305d00006064820152608401610f52565b60138501849055601485018390556015850180546001600160601b0319166001600160601b03841690811790915560168601829055604080518681526020810186905290810191909152606081018290527fd0d6d92441fbb139a023c9c62586dbd767824f37869c45da6443fc3aef64194f9060800160405180910390a15050505050565b6001600160601b031981166000908152601c83016020526040902060036002820154600160c01b900460ff166005811115612c7557612c7561380e565b14612ce85760405162461bcd60e51b815260206004820152602560248201527f45434453412077616c6c6574206d75737420626520696e20436c6f73696e672060448201527f73746174650000000000000000000000000000000000000000000000000000006064820152608401610f52565b601b8301546002820154612d0c9163ffffffff90811691600160801b900416613fae565b63ffffffff164211612d865760405162461bcd60e51b815260206004820152602260248201527f436c6f73696e6720706572696f6420686173206e6f7420656c6170736564207960448201527f65740000000000000000000000000000000000000000000000000000000000006064820152608401610f52565b610f688383612e09565b600080546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160601b031981166000818152601c840160205260408082206002810180547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff167804000000000000000000000000000000000000000000000000179055805491519093927f47b159947c3066cb253f60e8f046cfd747411788a545cb189679e3fa1467b28d91a3600283015481546040517f343bb9270000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163343bb92791612ee39160040190815260200190565b600060405180830381600087803b158015612efd57600080fd5b505af1158015611113573d6000803e3d6000fd5b600060208284031215612f2357600080fd5b5035919050565b80356001600160601b031981168114612f4257600080fd5b919050565b600060608284031215612f5957600080fd5b50919050565b60008060808385031215612f7257600080fd5b612f7b83612f2a565b9150612f8a8460208501612f47565b90509250929050565b80356001600160401b0381168114612f4257600080fd5b600080600060608486031215612fbf57600080fd5b612fc884612f93565b9250612fd660208501612f93565b9150612fe460408501612f93565b90509250925092565b600060808284031215612f5957600080fd5b60008060008060c0858703121561301557600080fd5b84356001600160401b038082111561302c57600080fd5b61303888838901612fed565b9550602087013591508082111561304e57600080fd5b5061305b87828801612f47565b93505061306b8660408701612f47565b915061307960a08601612f2a565b905092959194509250565b60008083601f84011261309657600080fd5b5081356001600160401b038111156130ad57600080fd5b6020830191508360208260051b85010111156130c857600080fd5b9250929050565b60008083601f8401126130e157600080fd5b5081356001600160401b038111156130f857600080fd5b6020830191508360208285010111156130c857600080fd5b60008060008060006060868803121561312857600080fd5b61313186612f2a565b945060208601356001600160401b038082111561314d57600080fd5b61315989838a01613084565b9096509450604088013591508082111561317257600080fd5b5061317f888289016130cf565b969995985093965092949392505050565b6000806000606084860312156131a557600080fd5b505081359360208301359350604090920135919050565b6000806000806000606086880312156131d457600080fd5b85356001600160401b03808211156131eb57600080fd5b6131f789838a016130cf565b9097509550602088013591508082111561321057600080fd5b5061321d88828901613084565b96999598509660400135949350505050565b803563ffffffff81168114612f4257600080fd5b6000806000806060858703121561325957600080fd5b843593506132696020860161322f565b925060408501356001600160401b0381111561328457600080fd5b61329087828801613084565b95989497509550505050565b6000808284036101008112156132b157600080fd5b83356001600160401b038111156132c757600080fd5b6132d386828701612fed565b93505060e0601f19820112156132e857600080fd5b506020830190509250929050565b80356001600160a01b0381168114612f4257600080fd5b80358015158114612f4257600080fd5b6000806040838503121561333057600080fd5b613339836132f6565b9150612f8a6020840161330d565b60008060008060a0858703121561335d57600080fd5b84356001600160401b0381111561337357600080fd5b61337f878288016130cf565b909550935050602085013591506130798660408701612f47565b6000806000806000606086880312156133b157600080fd5b85356001600160401b03808211156133c857600080fd5b6133d489838a016130cf565b909750955060208801359150808211156133ed57600080fd5b506133fa888289016130cf565b909450925061340d90506040870161330d565b90509295509295909350565b600080600080600080600060e0888a03121561343457600080fd5b61343d8861322f565b965061344b60208901612f93565b955061345960408901612f93565b945061346760608901612f93565b93506134756080890161322f565b925061348360a08901612f93565b915061349160c0890161322f565b905092959891949750929550565b600080600060a084860312156134b457600080fd5b83356001600160401b03808211156134cb57600080fd5b6134d787838801612fed565b945060208601359150808211156134ed57600080fd5b506134fa86828701612f47565b925050612fe48560408601612f47565b60008060006040848603121561351f57600080fd5b61352884612f2a565b925060208401356001600160401b0381111561354357600080fd5b61354f86828701613084565b9497909650939450505050565b60006060828403121561356e57600080fd5b6135788383612f47565b9392505050565b80356001600160601b0381168114612f4257600080fd5b60008060008060008060008060006101208a8c0312156135b557600080fd5b6135be8a612f93565b98506135cc60208b01612f93565b97506135da60408b0161322f565b96506135e860608b0161357f565b955060808a013594506135fd60a08b01612f93565b935061360b60c08b0161322f565b925061361960e08b0161357f565b91506101008a013590509295985092959850929598565b600080600080600080600060e0888a03121561364b57600080fd5b61365488612f2a565b96506136638960208a01612f47565b955060808801356001600160401b038082111561367f57600080fd5b61368b8b838c01613084565b909750955060a08a0135945060c08a01359150808211156136ab57600080fd5b506136b88a828b01613084565b989b979a50959850939692959293505050565b60008060008060008060c087890312156136e457600080fd5b6136ed87612f93565b95506136fb60208801612f93565b945061370960408801612f93565b93506060870135925061371e6080880161357f565b915060a087013590509295509295509295565b6000806000806080858703121561374757600080fd5b843593506020850135925061375e6040860161357f565b9396929550929360600135925050565b60006020828403121561378057600080fd5b61357882612f2a565b60006020828403121561379b57600080fd5b613578826132f6565b600080600080600060c086880312156137bc57600080fd5b6137c586612f2a565b94506137d48760208801612f47565b935060808601356001600160401b038111156137ef57600080fd5b6137fb888289016130cf565b909450925061340d905060a08701612f93565b634e487b7160e01b600052602160045260246000fd5b600681106138345761383461380e565b9052565b60006101208201905082518252602083015160208301526001600160401b03604084015116604083015263ffffffff60608401511660608301526080830151613889608084018263ffffffff169052565b5060a08301516138a160a084018263ffffffff169052565b5060c08301516138b960c084018263ffffffff169052565b5060e08301516138cc60e0840182613824565b5061010092830151919092015290565b81516001600160601b03191681526020808301516001600160401b03169082015260408083015163ffffffff169082015260608201516080820190600481106139275761392761380e565b8060608401525092915050565b8035825263ffffffff6139496020830161322f565b1660208301526001600160401b0361396360408301612f93565b1660408301525050565b8381526001600160601b03198316602082015260a081016139916040830184613934565b949350505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114612f4257600080fd5b6000808335601e198436030181126139e057600080fd5b83016020810192503590506001600160401b038111156139ff57600080fd5b8036038313156130c857600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60007fffffffff0000000000000000000000000000000000000000000000000000000080613a6484613999565b168452613a7460208401846139c9565b60806020870152613a89608087018284613a0e565b915050613a9960408501856139c9565b8683036040880152613aac838284613a0e565b9250505081613abd60608601613999565b166060860152809250505092915050565b6000613ada82836139c9565b60608552613aec606086018284613a0e565b91505060208301356020850152613b0660408401846139c9565b8583036040870152613b19838284613a0e565b9695505050505050565b85815260e060208201526000613b3c60e0830187613a37565b8281036040840152613b4e8187613ace565b915050613b5e6060830185613934565b6001600160601b0319831660c08301529695505050505050565b8183526000602080850194508260005b85811015613bb15763ffffffff613b9e8361322f565b1687529582019590820190600101613b88565b509495945050505050565b8681526001600160601b031986166020820152608060408201526000613be6608083018688613b78565b8281036060840152613bf9818587613a0e565b9998505050505050505050565b868152608060208201526000613c20608083018789613a0e565b8281036040840152613c33818688613b78565b915050826060830152979650505050505050565b85815284602082015263ffffffff84166040820152608060608201526000613c73608083018486613b78565b979650505050505050565b6000610120858352806020840152613c9881840186613a37565b91505063ffffffff613ca98461322f565b1660408301526001600160a01b03613cc3602085016132f6565b16606083015260408301357fffffffffffffffff00000000000000000000000000000000000000000000000081168114613cfc57600080fd5b7fffffffffffffffff000000000000000000000000000000000000000000000000166080830152613d2f60608401612f2a565b6001600160601b03191660a0830152613d4a60808401612f2a565b6001600160601b03191660c0830152613d6560a08401613999565b7fffffffff000000000000000000000000000000000000000000000000000000001660e0830152613d9860c084016132f6565b6001600160a01b03811661010084015250949350505050565b85815260c060208201526000613dcb60c083018688613a0e565b90508360408301528235606083015260208301356080830152604083013560ff8116808214613df957600080fd5b8060a085015250509695505050505050565b868152608060208201526000613e25608083018789613a0e565b8281036040840152613e38818688613a0e565b9150508215156060830152979650505050505050565b84815260c060208201526000613e6760c0830186613a37565b8281036040840152613e798186613ace565b915050613e896060830184613934565b95945050505050565b8481526001600160601b031984166020820152606060408201526000613b19606083018486613b78565b828152608081016135786020830184613934565b60006101008a835260206001600160601b0319808c1682860152613ef7604086018c613934565b8260a0860152613f0a8386018a8c613b78565b60c0860189905285810360e0870152868152879350820160005b87811015613f495782613f3686612f2a565b1682529383019390830190600101613f24565b509d9c50505050505050505050505050565b8681526001600160601b031986166020820152613f7b6040820186613934565b60e060a08201526000613f9260e083018587613a0e565b90506001600160401b03831660c0830152979650505050505050565b600063ffffffff808316818516808303821115613fdb57634e487b7160e01b600052601160045260246000fd5b0194935050505056fea26469706673582212202ab9234ed80d47fc2174255ba63cc4ddb20acb88fc7d1d1a338eb51d441bd57f64736f6c63430008090033",
|
|
2362
|
-
"deployedBytecode": "0x6080604052600436106102f25760003560e01c8063883d6a111161018f578063b29a604b116100e1578063d38bfff41161008a578063e53c0b5511610064578063e53c0b5514610de0578063e65e19d514610e19578063f18cf1b114610e4657600080fd5b8063d38bfff414610d74578063d6eccdf014610d94578063ded1d24a14610db457600080fd5b8063be05abe3116100bb578063be05abe314610c62578063c42b64d014610d09578063c8b5d2db14610d5457600080fd5b8063b29a604b14610c02578063b34b321614610c22578063b7d372a414610c4257600080fd5b8063a8fa0f4211610143578063b02c43d01161011d578063b02c43d014610a5f578063b2146cd614610ba2578063b216bd3514610be257600080fd5b8063a8fa0f42146109df578063a9de2f3a146109ff578063abaeed8f14610a3f57600080fd5b806392238f321161017457806392238f321461097f578063a145e2d51461099f578063a51e3d1a146109bf57600080fd5b8063883d6a111461093f57806391a9fdde1461095f57600080fd5b806350aea15a1161024857806361ccf97a116101fc5780636e70ce41116101d65780636e70ce411461084657806375b922d1146108d857806377145f211461091f57600080fd5b806361ccf97a1461078557806361d027b3146108155780636d02b43c1461083357600080fd5b80635aa6e6751161022d5780635aa6e6751461070d5780635c0b48121461074557806360d712fc1461076557600080fd5b806350aea15a146106cd578063575e4279146106ed57600080fd5b80632bb818c2116102aa57806333e957cb1161028457806333e957cb146105ae5780633dce98121461068d5780634fb1b4c6146106ad57600080fd5b80632bb818c2146105505780632f429b641461056e57806331a4889a1461058e57600080fd5b80630b6ba19d116102db5780630b6ba19d1461044157806317c96400146104fe57806324028c111461051e57600080fd5b806303d952f7146102f757806307f7d2231461041f575b600080fd5b34801561030357600080fd5b506103b4610312366004612f11565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260126020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b90046001600160401b039081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b6040516104169190600060a0820190506001600160a01b03835116825260208301516001600160401b038082166020850152806040860151166040850152806060860151166060850152505063ffffffff608084015116608083015292915050565b60405180910390f35b34801561042b57600080fd5b5061043f61043a366004612f5f565b610e73565b005b34801561044d57600080fd5b506103b461045c366004612f11565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260136020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b90046001600160401b039081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b34801561050a57600080fd5b5061043f610519366004612faa565b610efc565b34801561052a57600080fd5b50601b54600160a01b900463ffffffff1660405163ffffffff9091168152602001610416565b34801561055c57600080fd5b50600454604051908152602001610416565b34801561057a57600080fd5b5061043f610589366004612fff565b610f6d565b34801561059a57600080fd5b5061043f6105a9366004613110565b610ffa565b3480156105ba57600080fd5b506106496105c9366004612f11565b60408051608081018252600080825260208201819052918101829052606081019190915250600090815260186020908152604091829020825160808101845281546001600160a01b031681526001820154928101929092526002015463ffffffff81169282019290925264010000000090910460ff161515606082015290565b604051610416919081516001600160a01b031681526020808301519082015260408083015163ffffffff169082015260609182015115159181019190915260800190565b34801561069957600080fd5b5061043f6106a8366004613190565b61108c565b3480156106b957600080fd5b5061043f6106c83660046131bc565b61111c565b3480156106d957600080fd5b5061043f6106e8366004613243565b611177565b3480156106f957600080fd5b5061043f610708366004612f5f565b6111d0565b34801561071957600080fd5b5060005461072d906001600160a01b031681565b6040516001600160a01b039091168152602001610416565b34801561075157600080fd5b5061043f61076036600461329c565b611225565b34801561077157600080fd5b5061043f61078036600461331d565b61127a565b34801561079157600080fd5b50601a54601b54601c546040805163ffffffff80861682526001600160401b036401000000008704811660208401526c010000000000000000000000008704811693830193909352600160a01b860483166060830152600160e01b90950485166080820152600160c01b9093041660a08301529190911660c082015260e001610416565b34801561082157600080fd5b506005546001600160a01b031661072d565b61043f610841366004613347565b611333565b34801561085257600080fd5b50610891600e54600f546010546011546001600160401b0380851695600160401b8604821695600160801b900490911693926001600160601b03169190565b604080516001600160401b0397881681529587166020870152939095169284019290925260608301526001600160601b0316608082015260a081019190915260c001610416565b3480156108e457600080fd5b506014546015546016546017546040805194855260208501939093526001600160601b03909116918301919091526060820152608001610416565b34801561092b57600080fd5b5061043f61093a366004613399565b61138c565b34801561094b57600080fd5b5061043f61095a366004613419565b6113e7565b34801561096b57600080fd5b5061043f61097a36600461349f565b611452565b34801561098b57600080fd5b5061043f61099a36600461350a565b6114a9565b3480156109ab57600080fd5b5061043f6109ba36600461355c565b611500565b3480156109cb57600080fd5b5061043f6109da366004613596565b611586565b3480156109eb57600080fd5b5061043f6109fa366004613190565b6115f3565b348015610a0b57600080fd5b50600154600254600354604080516001600160a01b0394851681529284166020840152921691810191909152606001610416565b348015610a4b57600080fd5b5061043f610a5a366004613630565b611659565b348015610a6b57600080fd5b50610b2d610a7a366004612f11565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915250600090815260076020908152604091829020825160c08101845281546001600160a01b0380821683526001600160401b03600160a01b80840482169685019690965263ffffffff600160e01b938490048116978501979097526001949094015490811660608401529384049092166080820152910490911660a082015290565b6040516104169190600060c0820190506001600160a01b0380845116835260208401516001600160401b0380821660208601526040860151915063ffffffff80831660408701528360608801511660608701528160808801511660808701528060a08801511660a08701525050505092915050565b348015610bae57600080fd5b50610bd2610bbd366004612f11565b60009081526019602052604090205460ff1690565b6040519015158152602001610416565b348015610bee57600080fd5b5061043f610bfd3660046136cb565b6116f1565b348015610c0e57600080fd5b5061043f610c1d366004613731565b61175b565b348015610c2e57600080fd5b5061043f610c3d366004612fff565b6117c9565b348015610c4e57600080fd5b5061043f610c5d36600461349f565b611822565b348015610c6e57600080fd5b50600954600a54600b54600c54604080516001600160401b038087168252600160401b80880482166020840152600160801b880463ffffffff90811694840194909452600160a01b9097046001600160601b0390811660608401526080830196909652841660a08201529483041660c08501526c0100000000000000000000000090910490911660e083015261010082015261012001610416565b348015610d1557600080fd5b5060055460065460408051600160a01b9093046001600160401b0390811684528083166020850152600160401b90920490911690820152606001610416565b348015610d6057600080fd5b5061043f610d6f36600461376e565b611879565b348015610d8057600080fd5b5061043f610d8f366004613789565b611887565b348015610da057600080fd5b5061043f610daf3660046137a4565b611966565b348015610dc057600080fd5b50601b5460601b6040516001600160601b03199091168152602001610416565b348015610dec57600080fd5b50610bd2610dfb366004613789565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610e2557600080fd5b50610e39610e3436600461376e565b6119c1565b6040516104169190613838565b348015610e5257600080fd5b50610e66610e61366004612f11565b611ae4565b60405161041691906138dc565b6040517f260b6cde00000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063260b6cde90610ec8906001908690869060040161396d565b60006040518083038186803b158015610ee057600080fd5b505af4158015610ef4573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610f5b5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b610f686001848484611b9c565b505050565b6040517e92bac900000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906292bac990610fc4906001908890889088908890600401613b23565b60006040518083038186803b158015610fdc57600080fd5b505af4158015610ff0573d6000803e3d6000fd5b5050505050505050565b6040517fa76558b300000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a76558b3906110559060019089908990899089908990600401613bbc565b60006040518083038186803b15801561106d57600080fd5b505af4158015611081573d6000803e3d6000fd5b505050505050505050565b6040517fc87de7f400000000000000000000000000000000000000000000000000000000815260016004820152602481018390526044810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063c87de7f4906064015b60006040518083038186803b1580156110ff57600080fd5b505af4158015611113573d6000803e3d6000fd5b50505050505050565b6040517f89b43a8600000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__906389b43a86906110559060019089908990899089908990600401613c06565b6040517f899bef9d00000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063899bef9d90610fc4906001908890889088908890600401613c47565b6040517f99b0b84700000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__906399b0b84790610ec8906001908690869060040161396d565b6040517faea7fd0b00000000000000000000000000000000000000000000000000000000815273__$894ce12e79ca3e5683c1b49e363f37fa22$__9063aea7fd0b90610ec89060019086908690600401613c7e565b6000546001600160a01b031633146112d45760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f910160405180910390a25050565b6040517f3b5d9f2400000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__90633b5d9f2490610fc4906001908890889088908890600401613db1565b6040517f624526fe00000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__9063624526fe906110559060019089908990899089908990600401613e0b565b6000546001600160a01b031633146114415760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b611113600188888888888888611dcf565b6040517f2fcc8fb100000000000000000000000000000000000000000000000000000000815273__$24f7e155a6d011c1bf9032506ba9b1954c$__90632fcc8fb1906110e790600190879087908790600401613e4e565b6040517f07f96c4200000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906307f96c42906110e790600190879087908790600401613e92565b6040517fd079fbb100000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063d079fbb190611553906001908590600401613ebc565b60006040518083038186803b15801561156b57600080fd5b505af415801561157f573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146115e05760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b61108160018a8a8a8a8a8a8a8a8a612192565b6040517f4afbe4c90000000000000000000000000000000000000000000000000000000081526001600482015260248101849052604481018390526064810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__90634afbe4c9906084016110e7565b6040517fc8f7794300000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063c8f77943906116b8906001908b908b908b908b908b908b908b90600401613ed0565b60006040518083038186803b1580156116d057600080fd5b505af41580156116e4573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b0316331461174b5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b610ef46001878787878787612741565b6000546001600160a01b031633146117b55760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b6117c3600185858585612ac6565b50505050565b6040517fa164de6e00000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a164de6e90610fc4906001908890889088908890600401613b23565b6040517fb79a972500000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063b79a9725906110e790600190879087908790600401613e4e565b611884600182612c38565b50565b6000546001600160a01b031633146118e15760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b6001600160a01b03811661195d5760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610f52565b61188481612d90565b6040517f7333b36900000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__90637333b369906110559060019089908990899089908990600401613f5b565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101919091526001600160601b031982166000908152601d60209081526040918290208251610120810184528154815260018201549281019290925260028101546001600160401b0381169383019390935263ffffffff600160401b8404811660608401526c01000000000000000000000000840481166080840152600160801b8404811660a0840152600160a01b84041660c0830152909160e083019060ff600160c01b909104166005811115611abe57611abe61380e565b6005811115611acf57611acf61380e565b81526020016003820154815250509050919050565b611b0c6040805160808101825260008082526020820181905291810182905290606082015290565b6000828152600d602090815260409182902082516080810184528154606081811b6001600160601b0319168352600160a01b82046001600160401b031694830194909452600160e01b900463ffffffff16938101939093526001810154909183019060ff166003811115611b8257611b8261380e565b6003811115611b9357611b9361380e565b90525092915050565b6000836001600160401b031611611c1b5760405162461bcd60e51b815260206004820152603060248201527f4465706f7369742064757374207468726573686f6c64206d757374206265206760448201527f726561746572207468616e207a65726f000000000000000000000000000000006064820152608401610f52565b6000826001600160401b031611611c9a5760405162461bcd60e51b815260206004820152603660248201527f4465706f736974207472656173757279206665652064697669736f72206d757360448201527f742062652067726561746572207468616e207a65726f000000000000000000006064820152608401610f52565b6000816001600160401b031611611d195760405162461bcd60e51b815260206004820152603560248201527f4465706f736974207472616e73616374696f6e206d617820666565206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610f52565b6004840180547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16600160a01b6001600160401b03868116918202929092179092556005860180548583166fffffffffffffffffffffffffffffffff199091168117600160401b938616938402179091556040805193845260208401919091528201527f1ced468902ca566e746a3c8c9516af81f8de9f1021c365083be9f2625ebfb7b59060600160405180910390a150505050565b856001600160401b0316856001600160401b031611611e7c5760405162461bcd60e51b815260206004820152605960248201527f57616c6c6574206372656174696f6e206d6178696d756d204254432062616c6160448201527f6e6365206d7573742062652067726561746572207468616e207468652063726560648201527f6174696f6e206d696e696d756d204254432062616c616e636500000000000000608482015260a401610f52565b6000846001600160401b031611611efb5760405162461bcd60e51b815260206004820152603c60248201527f57616c6c657420636c6f73757265206d696e696d756d204254432062616c616e60448201527f6365206d7573742062652067726561746572207468616e207a65726f000000006064820152608401610f52565b6000826001600160401b031611611f7a5760405162461bcd60e51b815260206004820152603560248201527f57616c6c6574206d6178696d756d20425443207472616e73666572206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610f52565b60008163ffffffff1611611ff65760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420636c6f73696e6720706572696f64206d75737420626520677260448201527f6561746572207468616e207a65726f00000000000000000000000000000000006064820152608401610f52565b868860190160006101000a81548163ffffffff021916908363ffffffff160217905550858860190160046101000a8154816001600160401b0302191690836001600160401b031602179055508488601901600c6101000a8154816001600160401b0302191690836001600160401b03160217905550838860190160146101000a8154816001600160401b0302191690836001600160401b031602179055508288601901601c6101000a81548163ffffffff021916908363ffffffff1602179055508188601a0160186101000a8154816001600160401b0302191690836001600160401b031602179055508088601b0160006101000a81548163ffffffff021916908363ffffffff1602179055507fc7d3a9af08692aeae771c329fddd95c7237a9f76fec996325f3959eeff07d4ac87878787878787604051612180979695949392919063ffffffff97881681526001600160401b03968716602082015294861660408601529285166060850152908516608084015290921660a0820152911660c082015260e00190565b60405180910390a15050505050505050565b6000896001600160401b031611612213576040805162461bcd60e51b81526020600482015260248101919091527f4d6f76696e672066756e6473207472616e73616374696f6e206d617820746f7460448201527f616c20666565206d7573742062652067726561746572207468616e207a65726f6064820152608401610f52565b6000886001600160401b0316116122925760405162461bcd60e51b815260206004820152603560248201527f4d6f76696e672066756e64732064757374207468726573686f6c64206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610f52565b60008763ffffffff161161230e5760405162461bcd60e51b815260206004820152602e60248201527f4d6f76696e672066756e64732074696d656f7574206d7573742062652067726560448201527f61746572207468616e207a65726f0000000000000000000000000000000000006064820152608401610f52565b60648511156123ab5760405162461bcd60e51b815260206004820152604d60248201527f4d6f76696e672066756e64732074696d656f7574206e6f74696669657220726560448201527f77617264206d756c7469706c696572206d75737420626520696e20746865207260648201527f616e6765205b302c203130305d00000000000000000000000000000000000000608482015260a401610f52565b6000846001600160401b0316116124505760405162461bcd60e51b815260206004820152604560248201527f4d6f7665642066756e6473207377656570207472616e73616374696f6e206d6160448201527f7820746f74616c20666565206d7573742062652067726561746572207468616e60648201527f207a65726f000000000000000000000000000000000000000000000000000000608482015260a401610f52565b60008363ffffffff16116124cc5760405162461bcd60e51b815260206004820152603360248201527f4d6f7665642066756e64732073776565702074696d656f7574206d757374206260448201527f652067726561746572207468616e207a65726f000000000000000000000000006064820152608401610f52565b60648111156125695760405162461bcd60e51b815260206004820152605260248201527f4d6f7665642066756e64732073776565702074696d656f7574206e6f7469666960448201527f657220726577617264206d756c7469706c696572206d75737420626520696e2060648201527f7468652072616e6765205b302c203130305d0000000000000000000000000000608482015260a401610f52565b888a60080160006101000a8154816001600160401b0302191690836001600160401b03160217905550878a60080160086101000a8154816001600160401b0302191690836001600160401b03160217905550868a60080160106101000a81548163ffffffff021916908363ffffffff160217905550858a60080160146101000a8154816001600160601b0302191690836001600160601b03160217905550848a60090181905550838a600a0160006101000a8154816001600160401b0302191690836001600160401b03160217905550828a600a0160086101000a81548163ffffffff021916908363ffffffff160217905550818a600a01600c6101000a8154816001600160601b0302191690836001600160601b03160217905550808a600b01819055507f5662a4f84a0d9b64b01c0f14b329ff73e09d4bc2e2684d90174e31615b40a4a289898989898989898960405161272d999897969594939291906001600160401b03998a168152978916602089015263ffffffff96871660408901526001600160601b03958616606089015260808801949094529190961660a08601529490921660c08401529290921660e08201526101008101919091526101200190565b60405180910390a150505050505050505050565b6000866001600160401b0316116127c05760405162461bcd60e51b815260206004820152603360248201527f526564656d7074696f6e2064757374207468726573686f6c64206d757374206260448201527f652067726561746572207468616e207a65726f000000000000000000000000006064820152608401610f52565b6000856001600160401b03161161283f5760405162461bcd60e51b815260206004820152603960248201527f526564656d7074696f6e207472656173757279206665652064697669736f722060448201527f6d7573742062652067726561746572207468616e207a65726f000000000000006064820152608401610f52565b6000846001600160401b0316116128be5760405162461bcd60e51b815260206004820152603860248201527f526564656d7074696f6e207472616e73616374696f6e206d617820666565206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610f52565b600083116129345760405162461bcd60e51b815260206004820152602c60248201527f526564656d7074696f6e2074696d656f7574206d75737420626520677265617460448201527f6572207468616e207a65726f00000000000000000000000000000000000000006064820152608401610f52565b60648111156129d15760405162461bcd60e51b815260206004820152604b60248201527f526564656d7074696f6e2074696d656f7574206e6f746966696572207265776160448201527f7264206d756c7469706c696572206d75737420626520696e207468652072616e60648201527f6765205b302c203130305d000000000000000000000000000000000000000000608482015260a401610f52565b600d870180546001600160401b038881166fffffffffffffffffffffffffffffffff199092168217600160401b898316908102919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b92891692830217909355600e8a01869055600f8a0180546001600160601b0319166001600160601b03871690811790915560108b018590556040805193845260208401949094529282015260608101859052608081019190915260a081018290527f944cd06e316cc3da4159300dd41ab23416c89a5136c41fa79d57fe8a34bcc10f9060c00160405180910390a150505050505050565b60008311612b3c5760405162461bcd60e51b815260206004820152603860248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610f52565b6064811115612bb35760405162461bcd60e51b815260206004820152603e60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d75737420626520696e207468652072616e6765205b302c203130305d00006064820152608401610f52565b60138501849055601485018390556015850180546001600160601b0319166001600160601b03841690811790915560168601829055604080518681526020810186905290810191909152606081018290527fd0d6d92441fbb139a023c9c62586dbd767824f37869c45da6443fc3aef64194f9060800160405180910390a15050505050565b6001600160601b031981166000908152601c83016020526040902060036002820154600160c01b900460ff166005811115612c7557612c7561380e565b14612ce85760405162461bcd60e51b815260206004820152602560248201527f45434453412077616c6c6574206d75737420626520696e20436c6f73696e672060448201527f73746174650000000000000000000000000000000000000000000000000000006064820152608401610f52565b601b8301546002820154612d0c9163ffffffff90811691600160801b900416613fae565b63ffffffff164211612d865760405162461bcd60e51b815260206004820152602260248201527f436c6f73696e6720706572696f6420686173206e6f7420656c6170736564207960448201527f65740000000000000000000000000000000000000000000000000000000000006064820152608401610f52565b610f688383612e09565b600080546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160601b031981166000818152601c840160205260408082206002810180547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff167804000000000000000000000000000000000000000000000000179055805491519093927f47b159947c3066cb253f60e8f046cfd747411788a545cb189679e3fa1467b28d91a3600283015481546040517f343bb9270000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163343bb92791612ee39160040190815260200190565b600060405180830381600087803b158015612efd57600080fd5b505af1158015611113573d6000803e3d6000fd5b600060208284031215612f2357600080fd5b5035919050565b80356001600160601b031981168114612f4257600080fd5b919050565b600060608284031215612f5957600080fd5b50919050565b60008060808385031215612f7257600080fd5b612f7b83612f2a565b9150612f8a8460208501612f47565b90509250929050565b80356001600160401b0381168114612f4257600080fd5b600080600060608486031215612fbf57600080fd5b612fc884612f93565b9250612fd660208501612f93565b9150612fe460408501612f93565b90509250925092565b600060808284031215612f5957600080fd5b60008060008060c0858703121561301557600080fd5b84356001600160401b038082111561302c57600080fd5b61303888838901612fed565b9550602087013591508082111561304e57600080fd5b5061305b87828801612f47565b93505061306b8660408701612f47565b915061307960a08601612f2a565b905092959194509250565b60008083601f84011261309657600080fd5b5081356001600160401b038111156130ad57600080fd5b6020830191508360208260051b85010111156130c857600080fd5b9250929050565b60008083601f8401126130e157600080fd5b5081356001600160401b038111156130f857600080fd5b6020830191508360208285010111156130c857600080fd5b60008060008060006060868803121561312857600080fd5b61313186612f2a565b945060208601356001600160401b038082111561314d57600080fd5b61315989838a01613084565b9096509450604088013591508082111561317257600080fd5b5061317f888289016130cf565b969995985093965092949392505050565b6000806000606084860312156131a557600080fd5b505081359360208301359350604090920135919050565b6000806000806000606086880312156131d457600080fd5b85356001600160401b03808211156131eb57600080fd5b6131f789838a016130cf565b9097509550602088013591508082111561321057600080fd5b5061321d88828901613084565b96999598509660400135949350505050565b803563ffffffff81168114612f4257600080fd5b6000806000806060858703121561325957600080fd5b843593506132696020860161322f565b925060408501356001600160401b0381111561328457600080fd5b61329087828801613084565b95989497509550505050565b6000808284036101008112156132b157600080fd5b83356001600160401b038111156132c757600080fd5b6132d386828701612fed565b93505060e0601f19820112156132e857600080fd5b506020830190509250929050565b80356001600160a01b0381168114612f4257600080fd5b80358015158114612f4257600080fd5b6000806040838503121561333057600080fd5b613339836132f6565b9150612f8a6020840161330d565b60008060008060a0858703121561335d57600080fd5b84356001600160401b0381111561337357600080fd5b61337f878288016130cf565b909550935050602085013591506130798660408701612f47565b6000806000806000606086880312156133b157600080fd5b85356001600160401b03808211156133c857600080fd5b6133d489838a016130cf565b909750955060208801359150808211156133ed57600080fd5b506133fa888289016130cf565b909450925061340d90506040870161330d565b90509295509295909350565b600080600080600080600060e0888a03121561343457600080fd5b61343d8861322f565b965061344b60208901612f93565b955061345960408901612f93565b945061346760608901612f93565b93506134756080890161322f565b925061348360a08901612f93565b915061349160c0890161322f565b905092959891949750929550565b600080600060a084860312156134b457600080fd5b83356001600160401b03808211156134cb57600080fd5b6134d787838801612fed565b945060208601359150808211156134ed57600080fd5b506134fa86828701612f47565b925050612fe48560408601612f47565b60008060006040848603121561351f57600080fd5b61352884612f2a565b925060208401356001600160401b0381111561354357600080fd5b61354f86828701613084565b9497909650939450505050565b60006060828403121561356e57600080fd5b6135788383612f47565b9392505050565b80356001600160601b0381168114612f4257600080fd5b60008060008060008060008060006101208a8c0312156135b557600080fd5b6135be8a612f93565b98506135cc60208b01612f93565b97506135da60408b0161322f565b96506135e860608b0161357f565b955060808a013594506135fd60a08b01612f93565b935061360b60c08b0161322f565b925061361960e08b0161357f565b91506101008a013590509295985092959850929598565b600080600080600080600060e0888a03121561364b57600080fd5b61365488612f2a565b96506136638960208a01612f47565b955060808801356001600160401b038082111561367f57600080fd5b61368b8b838c01613084565b909750955060a08a0135945060c08a01359150808211156136ab57600080fd5b506136b88a828b01613084565b989b979a50959850939692959293505050565b60008060008060008060c087890312156136e457600080fd5b6136ed87612f93565b95506136fb60208801612f93565b945061370960408801612f93565b93506060870135925061371e6080880161357f565b915060a087013590509295509295509295565b6000806000806080858703121561374757600080fd5b843593506020850135925061375e6040860161357f565b9396929550929360600135925050565b60006020828403121561378057600080fd5b61357882612f2a565b60006020828403121561379b57600080fd5b613578826132f6565b600080600080600060c086880312156137bc57600080fd5b6137c586612f2a565b94506137d48760208801612f47565b935060808601356001600160401b038111156137ef57600080fd5b6137fb888289016130cf565b909450925061340d905060a08701612f93565b634e487b7160e01b600052602160045260246000fd5b600681106138345761383461380e565b9052565b60006101208201905082518252602083015160208301526001600160401b03604084015116604083015263ffffffff60608401511660608301526080830151613889608084018263ffffffff169052565b5060a08301516138a160a084018263ffffffff169052565b5060c08301516138b960c084018263ffffffff169052565b5060e08301516138cc60e0840182613824565b5061010092830151919092015290565b81516001600160601b03191681526020808301516001600160401b03169082015260408083015163ffffffff169082015260608201516080820190600481106139275761392761380e565b8060608401525092915050565b8035825263ffffffff6139496020830161322f565b1660208301526001600160401b0361396360408301612f93565b1660408301525050565b8381526001600160601b03198316602082015260a081016139916040830184613934565b949350505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114612f4257600080fd5b6000808335601e198436030181126139e057600080fd5b83016020810192503590506001600160401b038111156139ff57600080fd5b8036038313156130c857600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60007fffffffff0000000000000000000000000000000000000000000000000000000080613a6484613999565b168452613a7460208401846139c9565b60806020870152613a89608087018284613a0e565b915050613a9960408501856139c9565b8683036040880152613aac838284613a0e565b9250505081613abd60608601613999565b166060860152809250505092915050565b6000613ada82836139c9565b60608552613aec606086018284613a0e565b91505060208301356020850152613b0660408401846139c9565b8583036040870152613b19838284613a0e565b9695505050505050565b85815260e060208201526000613b3c60e0830187613a37565b8281036040840152613b4e8187613ace565b915050613b5e6060830185613934565b6001600160601b0319831660c08301529695505050505050565b8183526000602080850194508260005b85811015613bb15763ffffffff613b9e8361322f565b1687529582019590820190600101613b88565b509495945050505050565b8681526001600160601b031986166020820152608060408201526000613be6608083018688613b78565b8281036060840152613bf9818587613a0e565b9998505050505050505050565b868152608060208201526000613c20608083018789613a0e565b8281036040840152613c33818688613b78565b915050826060830152979650505050505050565b85815284602082015263ffffffff84166040820152608060608201526000613c73608083018486613b78565b979650505050505050565b6000610120858352806020840152613c9881840186613a37565b91505063ffffffff613ca98461322f565b1660408301526001600160a01b03613cc3602085016132f6565b16606083015260408301357fffffffffffffffff00000000000000000000000000000000000000000000000081168114613cfc57600080fd5b7fffffffffffffffff000000000000000000000000000000000000000000000000166080830152613d2f60608401612f2a565b6001600160601b03191660a0830152613d4a60808401612f2a565b6001600160601b03191660c0830152613d6560a08401613999565b7fffffffff000000000000000000000000000000000000000000000000000000001660e0830152613d9860c084016132f6565b6001600160a01b03811661010084015250949350505050565b85815260c060208201526000613dcb60c083018688613a0e565b90508360408301528235606083015260208301356080830152604083013560ff8116808214613df957600080fd5b8060a085015250509695505050505050565b868152608060208201526000613e25608083018789613a0e565b8281036040840152613e38818688613a0e565b9150508215156060830152979650505050505050565b84815260c060208201526000613e6760c0830186613a37565b8281036040840152613e798186613ace565b915050613e896060830184613934565b95945050505050565b8481526001600160601b031984166020820152606060408201526000613b19606083018486613b78565b828152608081016135786020830184613934565b60006101008a835260206001600160601b0319808c1682860152613ef7604086018c613934565b8260a0860152613f0a8386018a8c613b78565b60c0860189905285810360e0870152868152879350820160005b87811015613f495782613f3686612f2a565b1682529383019390830190600101613f24565b509d9c50505050505050505050505050565b8681526001600160601b031986166020820152613f7b6040820186613934565b60e060a08201526000613f9260e083018587613a0e565b90506001600160401b03831660c0830152979650505050505050565b600063ffffffff808316818516808303821115613fdb57634e487b7160e01b600052601160045260246000fd5b0194935050505056fea26469706673582212202ab9234ed80d47fc2174255ba63cc4ddb20acb88fc7d1d1a338eb51d441bd57f64736f6c63430008090033",
|
|
2361
|
+
"bytecode": "0x60806040523480156200001157600080fd5b5060405162004472380380620044728339810160408190526200003491620003e1565b6001600160a01b038516620000905760405162461bcd60e51b815260206004820152601b60248201527f42616e6b20616464726573732063616e6e6f74206265207a65726f000000000060448201526064015b60405180910390fd5b600180546001600160a01b0319166001600160a01b03878116919091179091558416620001005760405162461bcd60e51b815260206004820152601c60248201527f52656c617920616464726573732063616e6e6f74206265207a65726f00000000604482015260640162000087565b600280546001600160a01b0319166001600160a01b03868116919091179091558216620001855760405162461bcd60e51b815260206004820152602c60248201527f45434453412057616c6c6574205265676973747279206164647265737320636160448201526b6e6e6f74206265207a65726f60a01b606482015260840162000087565b600380546001600160a01b0319166001600160a01b03848116919091179091558316620001f55760405162461bcd60e51b815260206004820152601f60248201527f547265617375727920616464726573732063616e6e6f74206265207a65726f00604482015260640162000087565b6005805460048390556001600160a01b0385166001600160e01b031990911617613d0960a61b179055600680546001600160801b03191669271000000000000007d0179055600e80546001600160c01b031990811671271000000000000007d000000000000f4240179091556202a300600f556010805469021e19e0c9bab24000006001600160601b03199182168117909255606460118190557d021e19e0c9bab240000000093a800000000000004e200000000000002710600955600a819055600b805490941675021e19e0c9bab240000000093a80000000000000271017909355600c839055671bc16d674ec8000060145562093a806015556016805490911690911790556017557eeff1000000000002faf08000000002540be4000000000005f5e10000093a80601a55601b80546001600160c01b0316621dcd6560c91b179055601c80546234bc0063ffffffff19909116179055620003583362000363565b505050505062000448565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b80516001600160a01b0381168114620003dc57600080fd5b919050565b600080600080600060a08688031215620003fa57600080fd5b6200040586620003c4565b94506200041560208701620003c4565b93506200042560408701620003c4565b92506200043560608701620003c4565b9150608086015190509295509295909350565b61401a80620004586000396000f3fe6080604052600436106102f25760003560e01c8063883d6a111161018f578063b29a604b116100e1578063d38bfff41161008a578063e53c0b5511610064578063e53c0b5514610de0578063e65e19d514610e19578063f18cf1b114610e4657600080fd5b8063d38bfff414610d74578063d6eccdf014610d94578063ded1d24a14610db457600080fd5b8063be05abe3116100bb578063be05abe314610c62578063c42b64d014610d09578063c8b5d2db14610d5457600080fd5b8063b29a604b14610c02578063b34b321614610c22578063b7d372a414610c4257600080fd5b8063a8fa0f4211610143578063b02c43d01161011d578063b02c43d014610a5f578063b2146cd614610ba2578063b216bd3514610be257600080fd5b8063a8fa0f42146109df578063a9de2f3a146109ff578063abaeed8f14610a3f57600080fd5b806392238f321161017457806392238f321461097f578063a145e2d51461099f578063a51e3d1a146109bf57600080fd5b8063883d6a111461093f57806391a9fdde1461095f57600080fd5b806350aea15a1161024857806361ccf97a116101fc5780636e70ce41116101d65780636e70ce411461084657806375b922d1146108d857806377145f211461091f57600080fd5b806361ccf97a1461078557806361d027b3146108155780636d02b43c1461083357600080fd5b80635aa6e6751161022d5780635aa6e6751461070d5780635c0b48121461074557806360d712fc1461076557600080fd5b806350aea15a146106cd578063575e4279146106ed57600080fd5b80632bb818c2116102aa57806333e957cb1161028457806333e957cb146105ae5780633dce98121461068d5780634fb1b4c6146106ad57600080fd5b80632bb818c2146105505780632f429b641461056e57806331a4889a1461058e57600080fd5b80630b6ba19d116102db5780630b6ba19d1461044157806317c96400146104fe57806324028c111461051e57600080fd5b806303d952f7146102f757806307f7d2231461041f575b600080fd5b34801561030357600080fd5b506103b4610312366004612f11565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260126020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b90046001600160401b039081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b6040516104169190600060a0820190506001600160a01b03835116825260208301516001600160401b038082166020850152806040860151166040850152806060860151166060850152505063ffffffff608084015116608083015292915050565b60405180910390f35b34801561042b57600080fd5b5061043f61043a366004612f5f565b610e73565b005b34801561044d57600080fd5b506103b461045c366004612f11565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260136020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b90046001600160401b039081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b34801561050a57600080fd5b5061043f610519366004612faa565b610efc565b34801561052a57600080fd5b50601b54600160a01b900463ffffffff1660405163ffffffff9091168152602001610416565b34801561055c57600080fd5b50600454604051908152602001610416565b34801561057a57600080fd5b5061043f610589366004612fff565b610f6d565b34801561059a57600080fd5b5061043f6105a9366004613110565b610ffa565b3480156105ba57600080fd5b506106496105c9366004612f11565b60408051608081018252600080825260208201819052918101829052606081019190915250600090815260186020908152604091829020825160808101845281546001600160a01b031681526001820154928101929092526002015463ffffffff81169282019290925264010000000090910460ff161515606082015290565b604051610416919081516001600160a01b031681526020808301519082015260408083015163ffffffff169082015260609182015115159181019190915260800190565b34801561069957600080fd5b5061043f6106a8366004613190565b61108c565b3480156106b957600080fd5b5061043f6106c83660046131bc565b61111c565b3480156106d957600080fd5b5061043f6106e8366004613243565b611177565b3480156106f957600080fd5b5061043f610708366004612f5f565b6111d0565b34801561071957600080fd5b5060005461072d906001600160a01b031681565b6040516001600160a01b039091168152602001610416565b34801561075157600080fd5b5061043f61076036600461329c565b611225565b34801561077157600080fd5b5061043f61078036600461331d565b61127a565b34801561079157600080fd5b50601a54601b54601c546040805163ffffffff80861682526001600160401b036401000000008704811660208401526c010000000000000000000000008704811693830193909352600160a01b860483166060830152600160e01b90950485166080820152600160c01b9093041660a08301529190911660c082015260e001610416565b34801561082157600080fd5b506005546001600160a01b031661072d565b61043f610841366004613347565b611333565b34801561085257600080fd5b50610891600e54600f546010546011546001600160401b0380851695600160401b8604821695600160801b900490911693926001600160601b03169190565b604080516001600160401b0397881681529587166020870152939095169284019290925260608301526001600160601b0316608082015260a081019190915260c001610416565b3480156108e457600080fd5b506014546015546016546017546040805194855260208501939093526001600160601b03909116918301919091526060820152608001610416565b34801561092b57600080fd5b5061043f61093a366004613399565b61138c565b34801561094b57600080fd5b5061043f61095a366004613419565b6113e7565b34801561096b57600080fd5b5061043f61097a36600461349f565b611452565b34801561098b57600080fd5b5061043f61099a36600461350a565b6114a9565b3480156109ab57600080fd5b5061043f6109ba36600461355c565b611500565b3480156109cb57600080fd5b5061043f6109da366004613596565b611586565b3480156109eb57600080fd5b5061043f6109fa366004613190565b6115f3565b348015610a0b57600080fd5b50600154600254600354604080516001600160a01b0394851681529284166020840152921691810191909152606001610416565b348015610a4b57600080fd5b5061043f610a5a366004613630565b611659565b348015610a6b57600080fd5b50610b2d610a7a366004612f11565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915250600090815260076020908152604091829020825160c08101845281546001600160a01b0380821683526001600160401b03600160a01b80840482169685019690965263ffffffff600160e01b938490048116978501979097526001949094015490811660608401529384049092166080820152910490911660a082015290565b6040516104169190600060c0820190506001600160a01b0380845116835260208401516001600160401b0380821660208601526040860151915063ffffffff80831660408701528360608801511660608701528160808801511660808701528060a08801511660a08701525050505092915050565b348015610bae57600080fd5b50610bd2610bbd366004612f11565b60009081526019602052604090205460ff1690565b6040519015158152602001610416565b348015610bee57600080fd5b5061043f610bfd3660046136cb565b6116f1565b348015610c0e57600080fd5b5061043f610c1d366004613731565b61175b565b348015610c2e57600080fd5b5061043f610c3d366004612fff565b6117c9565b348015610c4e57600080fd5b5061043f610c5d36600461349f565b611822565b348015610c6e57600080fd5b50600954600a54600b54600c54604080516001600160401b038087168252600160401b80880482166020840152600160801b880463ffffffff90811694840194909452600160a01b9097046001600160601b0390811660608401526080830196909652841660a08201529483041660c08501526c0100000000000000000000000090910490911660e083015261010082015261012001610416565b348015610d1557600080fd5b5060055460065460408051600160a01b9093046001600160401b0390811684528083166020850152600160401b90920490911690820152606001610416565b348015610d6057600080fd5b5061043f610d6f36600461376e565b611879565b348015610d8057600080fd5b5061043f610d8f366004613789565b611887565b348015610da057600080fd5b5061043f610daf3660046137a4565b611966565b348015610dc057600080fd5b50601b5460601b6040516001600160601b03199091168152602001610416565b348015610dec57600080fd5b50610bd2610dfb366004613789565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610e2557600080fd5b50610e39610e3436600461376e565b6119c1565b6040516104169190613838565b348015610e5257600080fd5b50610e66610e61366004612f11565b611ae4565b60405161041691906138dc565b6040517f260b6cde00000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063260b6cde90610ec8906001908690869060040161396d565b60006040518083038186803b158015610ee057600080fd5b505af4158015610ef4573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610f5b5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b610f686001848484611b9c565b505050565b6040517e92bac900000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906292bac990610fc4906001908890889088908890600401613b23565b60006040518083038186803b158015610fdc57600080fd5b505af4158015610ff0573d6000803e3d6000fd5b5050505050505050565b6040517fa76558b300000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a76558b3906110559060019089908990899089908990600401613bbc565b60006040518083038186803b15801561106d57600080fd5b505af4158015611081573d6000803e3d6000fd5b505050505050505050565b6040517fc87de7f400000000000000000000000000000000000000000000000000000000815260016004820152602481018390526044810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063c87de7f4906064015b60006040518083038186803b1580156110ff57600080fd5b505af4158015611113573d6000803e3d6000fd5b50505050505050565b6040517f89b43a8600000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__906389b43a86906110559060019089908990899089908990600401613c06565b6040517f899bef9d00000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063899bef9d90610fc4906001908890889088908890600401613c47565b6040517f99b0b84700000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__906399b0b84790610ec8906001908690869060040161396d565b6040517faea7fd0b00000000000000000000000000000000000000000000000000000000815273__$894ce12e79ca3e5683c1b49e363f37fa22$__9063aea7fd0b90610ec89060019086908690600401613c7e565b6000546001600160a01b031633146112d45760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f910160405180910390a25050565b6040517f3b5d9f2400000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__90633b5d9f2490610fc4906001908890889088908890600401613db1565b6040517f624526fe00000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__9063624526fe906110559060019089908990899089908990600401613e0b565b6000546001600160a01b031633146114415760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b611113600188888888888888611dcf565b6040517f2fcc8fb100000000000000000000000000000000000000000000000000000000815273__$24f7e155a6d011c1bf9032506ba9b1954c$__90632fcc8fb1906110e790600190879087908790600401613e4e565b6040517f07f96c4200000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906307f96c42906110e790600190879087908790600401613e92565b6040517fd079fbb100000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063d079fbb190611553906001908590600401613ebc565b60006040518083038186803b15801561156b57600080fd5b505af415801561157f573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146115e05760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b61108160018a8a8a8a8a8a8a8a8a612192565b6040517f4afbe4c90000000000000000000000000000000000000000000000000000000081526001600482015260248101849052604481018390526064810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__90634afbe4c9906084016110e7565b6040517fc8f7794300000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063c8f77943906116b8906001908b908b908b908b908b908b908b90600401613ed0565b60006040518083038186803b1580156116d057600080fd5b505af41580156116e4573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b0316331461174b5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b610ef46001878787878787612741565b6000546001600160a01b031633146117b55760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b6117c3600185858585612ac6565b50505050565b6040517fa164de6e00000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a164de6e90610fc4906001908890889088908890600401613b23565b6040517fb79a972500000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063b79a9725906110e790600190879087908790600401613e4e565b611884600182612c38565b50565b6000546001600160a01b031633146118e15760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b6001600160a01b03811661195d5760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610f52565b61188481612d90565b6040517f7333b36900000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__90637333b369906110559060019089908990899089908990600401613f5b565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101919091526001600160601b031982166000908152601d60209081526040918290208251610120810184528154815260018201549281019290925260028101546001600160401b0381169383019390935263ffffffff600160401b8404811660608401526c01000000000000000000000000840481166080840152600160801b8404811660a0840152600160a01b84041660c0830152909160e083019060ff600160c01b909104166005811115611abe57611abe61380e565b6005811115611acf57611acf61380e565b81526020016003820154815250509050919050565b611b0c6040805160808101825260008082526020820181905291810182905290606082015290565b6000828152600d602090815260409182902082516080810184528154606081811b6001600160601b0319168352600160a01b82046001600160401b031694830194909452600160e01b900463ffffffff16938101939093526001810154909183019060ff166003811115611b8257611b8261380e565b6003811115611b9357611b9361380e565b90525092915050565b6000836001600160401b031611611c1b5760405162461bcd60e51b815260206004820152603060248201527f4465706f7369742064757374207468726573686f6c64206d757374206265206760448201527f726561746572207468616e207a65726f000000000000000000000000000000006064820152608401610f52565b6000826001600160401b031611611c9a5760405162461bcd60e51b815260206004820152603660248201527f4465706f736974207472656173757279206665652064697669736f72206d757360448201527f742062652067726561746572207468616e207a65726f000000000000000000006064820152608401610f52565b6000816001600160401b031611611d195760405162461bcd60e51b815260206004820152603560248201527f4465706f736974207472616e73616374696f6e206d617820666565206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610f52565b6004840180547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16600160a01b6001600160401b03868116918202929092179092556005860180548583166fffffffffffffffffffffffffffffffff199091168117600160401b938616938402179091556040805193845260208401919091528201527f1ced468902ca566e746a3c8c9516af81f8de9f1021c365083be9f2625ebfb7b59060600160405180910390a150505050565b856001600160401b0316856001600160401b031611611e7c5760405162461bcd60e51b815260206004820152605960248201527f57616c6c6574206372656174696f6e206d6178696d756d204254432062616c6160448201527f6e6365206d7573742062652067726561746572207468616e207468652063726560648201527f6174696f6e206d696e696d756d204254432062616c616e636500000000000000608482015260a401610f52565b6000846001600160401b031611611efb5760405162461bcd60e51b815260206004820152603c60248201527f57616c6c657420636c6f73757265206d696e696d756d204254432062616c616e60448201527f6365206d7573742062652067726561746572207468616e207a65726f000000006064820152608401610f52565b6000826001600160401b031611611f7a5760405162461bcd60e51b815260206004820152603560248201527f57616c6c6574206d6178696d756d20425443207472616e73666572206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610f52565b60008163ffffffff1611611ff65760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420636c6f73696e6720706572696f64206d75737420626520677260448201527f6561746572207468616e207a65726f00000000000000000000000000000000006064820152608401610f52565b868860190160006101000a81548163ffffffff021916908363ffffffff160217905550858860190160046101000a8154816001600160401b0302191690836001600160401b031602179055508488601901600c6101000a8154816001600160401b0302191690836001600160401b03160217905550838860190160146101000a8154816001600160401b0302191690836001600160401b031602179055508288601901601c6101000a81548163ffffffff021916908363ffffffff1602179055508188601a0160186101000a8154816001600160401b0302191690836001600160401b031602179055508088601b0160006101000a81548163ffffffff021916908363ffffffff1602179055507fc7d3a9af08692aeae771c329fddd95c7237a9f76fec996325f3959eeff07d4ac87878787878787604051612180979695949392919063ffffffff97881681526001600160401b03968716602082015294861660408601529285166060850152908516608084015290921660a0820152911660c082015260e00190565b60405180910390a15050505050505050565b6000896001600160401b031611612213576040805162461bcd60e51b81526020600482015260248101919091527f4d6f76696e672066756e6473207472616e73616374696f6e206d617820746f7460448201527f616c20666565206d7573742062652067726561746572207468616e207a65726f6064820152608401610f52565b6000886001600160401b0316116122925760405162461bcd60e51b815260206004820152603560248201527f4d6f76696e672066756e64732064757374207468726573686f6c64206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610f52565b60008763ffffffff161161230e5760405162461bcd60e51b815260206004820152602e60248201527f4d6f76696e672066756e64732074696d656f7574206d7573742062652067726560448201527f61746572207468616e207a65726f0000000000000000000000000000000000006064820152608401610f52565b60648511156123ab5760405162461bcd60e51b815260206004820152604d60248201527f4d6f76696e672066756e64732074696d656f7574206e6f74696669657220726560448201527f77617264206d756c7469706c696572206d75737420626520696e20746865207260648201527f616e6765205b302c203130305d00000000000000000000000000000000000000608482015260a401610f52565b6000846001600160401b0316116124505760405162461bcd60e51b815260206004820152604560248201527f4d6f7665642066756e6473207377656570207472616e73616374696f6e206d6160448201527f7820746f74616c20666565206d7573742062652067726561746572207468616e60648201527f207a65726f000000000000000000000000000000000000000000000000000000608482015260a401610f52565b60008363ffffffff16116124cc5760405162461bcd60e51b815260206004820152603360248201527f4d6f7665642066756e64732073776565702074696d656f7574206d757374206260448201527f652067726561746572207468616e207a65726f000000000000000000000000006064820152608401610f52565b60648111156125695760405162461bcd60e51b815260206004820152605260248201527f4d6f7665642066756e64732073776565702074696d656f7574206e6f7469666960448201527f657220726577617264206d756c7469706c696572206d75737420626520696e2060648201527f7468652072616e6765205b302c203130305d0000000000000000000000000000608482015260a401610f52565b888a60080160006101000a8154816001600160401b0302191690836001600160401b03160217905550878a60080160086101000a8154816001600160401b0302191690836001600160401b03160217905550868a60080160106101000a81548163ffffffff021916908363ffffffff160217905550858a60080160146101000a8154816001600160601b0302191690836001600160601b03160217905550848a60090181905550838a600a0160006101000a8154816001600160401b0302191690836001600160401b03160217905550828a600a0160086101000a81548163ffffffff021916908363ffffffff160217905550818a600a01600c6101000a8154816001600160601b0302191690836001600160601b03160217905550808a600b01819055507f5662a4f84a0d9b64b01c0f14b329ff73e09d4bc2e2684d90174e31615b40a4a289898989898989898960405161272d999897969594939291906001600160401b03998a168152978916602089015263ffffffff96871660408901526001600160601b03958616606089015260808801949094529190961660a08601529490921660c08401529290921660e08201526101008101919091526101200190565b60405180910390a150505050505050505050565b6000866001600160401b0316116127c05760405162461bcd60e51b815260206004820152603360248201527f526564656d7074696f6e2064757374207468726573686f6c64206d757374206260448201527f652067726561746572207468616e207a65726f000000000000000000000000006064820152608401610f52565b6000856001600160401b03161161283f5760405162461bcd60e51b815260206004820152603960248201527f526564656d7074696f6e207472656173757279206665652064697669736f722060448201527f6d7573742062652067726561746572207468616e207a65726f000000000000006064820152608401610f52565b6000846001600160401b0316116128be5760405162461bcd60e51b815260206004820152603860248201527f526564656d7074696f6e207472616e73616374696f6e206d617820666565206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610f52565b600083116129345760405162461bcd60e51b815260206004820152602c60248201527f526564656d7074696f6e2074696d656f7574206d75737420626520677265617460448201527f6572207468616e207a65726f00000000000000000000000000000000000000006064820152608401610f52565b60648111156129d15760405162461bcd60e51b815260206004820152604b60248201527f526564656d7074696f6e2074696d656f7574206e6f746966696572207265776160448201527f7264206d756c7469706c696572206d75737420626520696e207468652072616e60648201527f6765205b302c203130305d000000000000000000000000000000000000000000608482015260a401610f52565b600d870180546001600160401b038881166fffffffffffffffffffffffffffffffff199092168217600160401b898316908102919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b92891692830217909355600e8a01869055600f8a0180546001600160601b0319166001600160601b03871690811790915560108b018590556040805193845260208401949094529282015260608101859052608081019190915260a081018290527f944cd06e316cc3da4159300dd41ab23416c89a5136c41fa79d57fe8a34bcc10f9060c00160405180910390a150505050505050565b60008311612b3c5760405162461bcd60e51b815260206004820152603860248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610f52565b6064811115612bb35760405162461bcd60e51b815260206004820152603e60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d75737420626520696e207468652072616e6765205b302c203130305d00006064820152608401610f52565b60138501849055601485018390556015850180546001600160601b0319166001600160601b03841690811790915560168601829055604080518681526020810186905290810191909152606081018290527fd0d6d92441fbb139a023c9c62586dbd767824f37869c45da6443fc3aef64194f9060800160405180910390a15050505050565b6001600160601b031981166000908152601c83016020526040902060036002820154600160c01b900460ff166005811115612c7557612c7561380e565b14612ce85760405162461bcd60e51b815260206004820152602560248201527f45434453412077616c6c6574206d75737420626520696e20436c6f73696e672060448201527f73746174650000000000000000000000000000000000000000000000000000006064820152608401610f52565b601b8301546002820154612d0c9163ffffffff90811691600160801b900416613fae565b63ffffffff164211612d865760405162461bcd60e51b815260206004820152602260248201527f436c6f73696e6720706572696f6420686173206e6f7420656c6170736564207960448201527f65740000000000000000000000000000000000000000000000000000000000006064820152608401610f52565b610f688383612e09565b600080546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160601b031981166000818152601c840160205260408082206002810180547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff167804000000000000000000000000000000000000000000000000179055805491519093927f47b159947c3066cb253f60e8f046cfd747411788a545cb189679e3fa1467b28d91a3600283015481546040517f343bb9270000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163343bb92791612ee39160040190815260200190565b600060405180830381600087803b158015612efd57600080fd5b505af1158015611113573d6000803e3d6000fd5b600060208284031215612f2357600080fd5b5035919050565b80356001600160601b031981168114612f4257600080fd5b919050565b600060608284031215612f5957600080fd5b50919050565b60008060808385031215612f7257600080fd5b612f7b83612f2a565b9150612f8a8460208501612f47565b90509250929050565b80356001600160401b0381168114612f4257600080fd5b600080600060608486031215612fbf57600080fd5b612fc884612f93565b9250612fd660208501612f93565b9150612fe460408501612f93565b90509250925092565b600060808284031215612f5957600080fd5b60008060008060c0858703121561301557600080fd5b84356001600160401b038082111561302c57600080fd5b61303888838901612fed565b9550602087013591508082111561304e57600080fd5b5061305b87828801612f47565b93505061306b8660408701612f47565b915061307960a08601612f2a565b905092959194509250565b60008083601f84011261309657600080fd5b5081356001600160401b038111156130ad57600080fd5b6020830191508360208260051b85010111156130c857600080fd5b9250929050565b60008083601f8401126130e157600080fd5b5081356001600160401b038111156130f857600080fd5b6020830191508360208285010111156130c857600080fd5b60008060008060006060868803121561312857600080fd5b61313186612f2a565b945060208601356001600160401b038082111561314d57600080fd5b61315989838a01613084565b9096509450604088013591508082111561317257600080fd5b5061317f888289016130cf565b969995985093965092949392505050565b6000806000606084860312156131a557600080fd5b505081359360208301359350604090920135919050565b6000806000806000606086880312156131d457600080fd5b85356001600160401b03808211156131eb57600080fd5b6131f789838a016130cf565b9097509550602088013591508082111561321057600080fd5b5061321d88828901613084565b96999598509660400135949350505050565b803563ffffffff81168114612f4257600080fd5b6000806000806060858703121561325957600080fd5b843593506132696020860161322f565b925060408501356001600160401b0381111561328457600080fd5b61329087828801613084565b95989497509550505050565b6000808284036101008112156132b157600080fd5b83356001600160401b038111156132c757600080fd5b6132d386828701612fed565b93505060e0601f19820112156132e857600080fd5b506020830190509250929050565b80356001600160a01b0381168114612f4257600080fd5b80358015158114612f4257600080fd5b6000806040838503121561333057600080fd5b613339836132f6565b9150612f8a6020840161330d565b60008060008060a0858703121561335d57600080fd5b84356001600160401b0381111561337357600080fd5b61337f878288016130cf565b909550935050602085013591506130798660408701612f47565b6000806000806000606086880312156133b157600080fd5b85356001600160401b03808211156133c857600080fd5b6133d489838a016130cf565b909750955060208801359150808211156133ed57600080fd5b506133fa888289016130cf565b909450925061340d90506040870161330d565b90509295509295909350565b600080600080600080600060e0888a03121561343457600080fd5b61343d8861322f565b965061344b60208901612f93565b955061345960408901612f93565b945061346760608901612f93565b93506134756080890161322f565b925061348360a08901612f93565b915061349160c0890161322f565b905092959891949750929550565b600080600060a084860312156134b457600080fd5b83356001600160401b03808211156134cb57600080fd5b6134d787838801612fed565b945060208601359150808211156134ed57600080fd5b506134fa86828701612f47565b925050612fe48560408601612f47565b60008060006040848603121561351f57600080fd5b61352884612f2a565b925060208401356001600160401b0381111561354357600080fd5b61354f86828701613084565b9497909650939450505050565b60006060828403121561356e57600080fd5b6135788383612f47565b9392505050565b80356001600160601b0381168114612f4257600080fd5b60008060008060008060008060006101208a8c0312156135b557600080fd5b6135be8a612f93565b98506135cc60208b01612f93565b97506135da60408b0161322f565b96506135e860608b0161357f565b955060808a013594506135fd60a08b01612f93565b935061360b60c08b0161322f565b925061361960e08b0161357f565b91506101008a013590509295985092959850929598565b600080600080600080600060e0888a03121561364b57600080fd5b61365488612f2a565b96506136638960208a01612f47565b955060808801356001600160401b038082111561367f57600080fd5b61368b8b838c01613084565b909750955060a08a0135945060c08a01359150808211156136ab57600080fd5b506136b88a828b01613084565b989b979a50959850939692959293505050565b60008060008060008060c087890312156136e457600080fd5b6136ed87612f93565b95506136fb60208801612f93565b945061370960408801612f93565b93506060870135925061371e6080880161357f565b915060a087013590509295509295509295565b6000806000806080858703121561374757600080fd5b843593506020850135925061375e6040860161357f565b9396929550929360600135925050565b60006020828403121561378057600080fd5b61357882612f2a565b60006020828403121561379b57600080fd5b613578826132f6565b600080600080600060c086880312156137bc57600080fd5b6137c586612f2a565b94506137d48760208801612f47565b935060808601356001600160401b038111156137ef57600080fd5b6137fb888289016130cf565b909450925061340d905060a08701612f93565b634e487b7160e01b600052602160045260246000fd5b600681106138345761383461380e565b9052565b60006101208201905082518252602083015160208301526001600160401b03604084015116604083015263ffffffff60608401511660608301526080830151613889608084018263ffffffff169052565b5060a08301516138a160a084018263ffffffff169052565b5060c08301516138b960c084018263ffffffff169052565b5060e08301516138cc60e0840182613824565b5061010092830151919092015290565b81516001600160601b03191681526020808301516001600160401b03169082015260408083015163ffffffff169082015260608201516080820190600481106139275761392761380e565b8060608401525092915050565b8035825263ffffffff6139496020830161322f565b1660208301526001600160401b0361396360408301612f93565b1660408301525050565b8381526001600160601b03198316602082015260a081016139916040830184613934565b949350505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114612f4257600080fd5b6000808335601e198436030181126139e057600080fd5b83016020810192503590506001600160401b038111156139ff57600080fd5b8036038313156130c857600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60007fffffffff0000000000000000000000000000000000000000000000000000000080613a6484613999565b168452613a7460208401846139c9565b60806020870152613a89608087018284613a0e565b915050613a9960408501856139c9565b8683036040880152613aac838284613a0e565b9250505081613abd60608601613999565b166060860152809250505092915050565b6000613ada82836139c9565b60608552613aec606086018284613a0e565b91505060208301356020850152613b0660408401846139c9565b8583036040870152613b19838284613a0e565b9695505050505050565b85815260e060208201526000613b3c60e0830187613a37565b8281036040840152613b4e8187613ace565b915050613b5e6060830185613934565b6001600160601b0319831660c08301529695505050505050565b8183526000602080850194508260005b85811015613bb15763ffffffff613b9e8361322f565b1687529582019590820190600101613b88565b509495945050505050565b8681526001600160601b031986166020820152608060408201526000613be6608083018688613b78565b8281036060840152613bf9818587613a0e565b9998505050505050505050565b868152608060208201526000613c20608083018789613a0e565b8281036040840152613c33818688613b78565b915050826060830152979650505050505050565b85815284602082015263ffffffff84166040820152608060608201526000613c73608083018486613b78565b979650505050505050565b6000610120858352806020840152613c9881840186613a37565b91505063ffffffff613ca98461322f565b1660408301526001600160a01b03613cc3602085016132f6565b16606083015260408301357fffffffffffffffff00000000000000000000000000000000000000000000000081168114613cfc57600080fd5b7fffffffffffffffff000000000000000000000000000000000000000000000000166080830152613d2f60608401612f2a565b6001600160601b03191660a0830152613d4a60808401612f2a565b6001600160601b03191660c0830152613d6560a08401613999565b7fffffffff000000000000000000000000000000000000000000000000000000001660e0830152613d9860c084016132f6565b6001600160a01b03811661010084015250949350505050565b85815260c060208201526000613dcb60c083018688613a0e565b90508360408301528235606083015260208301356080830152604083013560ff8116808214613df957600080fd5b8060a085015250509695505050505050565b868152608060208201526000613e25608083018789613a0e565b8281036040840152613e38818688613a0e565b9150508215156060830152979650505050505050565b84815260c060208201526000613e6760c0830186613a37565b8281036040840152613e798186613ace565b915050613e896060830184613934565b95945050505050565b8481526001600160601b031984166020820152606060408201526000613b19606083018486613b78565b828152608081016135786020830184613934565b60006101008a835260206001600160601b0319808c1682860152613ef7604086018c613934565b8260a0860152613f0a8386018a8c613b78565b60c0860189905285810360e0870152868152879350820160005b87811015613f495782613f3686612f2a565b1682529383019390830190600101613f24565b509d9c50505050505050505050505050565b8681526001600160601b031986166020820152613f7b6040820186613934565b60e060a08201526000613f9260e083018587613a0e565b90506001600160401b03831660c0830152979650505050505050565b600063ffffffff808316818516808303821115613fdb57634e487b7160e01b600052601160045260246000fd5b0194935050505056fea26469706673582212204718a3a567654683c663ebcc8a84a054270c47accaa71f4b0256d3a72978536364736f6c63430008090033",
|
|
2362
|
+
"deployedBytecode": "0x6080604052600436106102f25760003560e01c8063883d6a111161018f578063b29a604b116100e1578063d38bfff41161008a578063e53c0b5511610064578063e53c0b5514610de0578063e65e19d514610e19578063f18cf1b114610e4657600080fd5b8063d38bfff414610d74578063d6eccdf014610d94578063ded1d24a14610db457600080fd5b8063be05abe3116100bb578063be05abe314610c62578063c42b64d014610d09578063c8b5d2db14610d5457600080fd5b8063b29a604b14610c02578063b34b321614610c22578063b7d372a414610c4257600080fd5b8063a8fa0f4211610143578063b02c43d01161011d578063b02c43d014610a5f578063b2146cd614610ba2578063b216bd3514610be257600080fd5b8063a8fa0f42146109df578063a9de2f3a146109ff578063abaeed8f14610a3f57600080fd5b806392238f321161017457806392238f321461097f578063a145e2d51461099f578063a51e3d1a146109bf57600080fd5b8063883d6a111461093f57806391a9fdde1461095f57600080fd5b806350aea15a1161024857806361ccf97a116101fc5780636e70ce41116101d65780636e70ce411461084657806375b922d1146108d857806377145f211461091f57600080fd5b806361ccf97a1461078557806361d027b3146108155780636d02b43c1461083357600080fd5b80635aa6e6751161022d5780635aa6e6751461070d5780635c0b48121461074557806360d712fc1461076557600080fd5b806350aea15a146106cd578063575e4279146106ed57600080fd5b80632bb818c2116102aa57806333e957cb1161028457806333e957cb146105ae5780633dce98121461068d5780634fb1b4c6146106ad57600080fd5b80632bb818c2146105505780632f429b641461056e57806331a4889a1461058e57600080fd5b80630b6ba19d116102db5780630b6ba19d1461044157806317c96400146104fe57806324028c111461051e57600080fd5b806303d952f7146102f757806307f7d2231461041f575b600080fd5b34801561030357600080fd5b506103b4610312366004612f11565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260126020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b90046001600160401b039081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b6040516104169190600060a0820190506001600160a01b03835116825260208301516001600160401b038082166020850152806040860151166040850152806060860151166060850152505063ffffffff608084015116608083015292915050565b60405180910390f35b34801561042b57600080fd5b5061043f61043a366004612f5f565b610e73565b005b34801561044d57600080fd5b506103b461045c366004612f11565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260136020908152604091829020825160a08101845281546001600160a01b0381168252600160a01b90046001600160401b039081169382019390935260019091015480831693820193909352600160401b83049091166060820152600160801b90910463ffffffff16608082015290565b34801561050a57600080fd5b5061043f610519366004612faa565b610efc565b34801561052a57600080fd5b50601b54600160a01b900463ffffffff1660405163ffffffff9091168152602001610416565b34801561055c57600080fd5b50600454604051908152602001610416565b34801561057a57600080fd5b5061043f610589366004612fff565b610f6d565b34801561059a57600080fd5b5061043f6105a9366004613110565b610ffa565b3480156105ba57600080fd5b506106496105c9366004612f11565b60408051608081018252600080825260208201819052918101829052606081019190915250600090815260186020908152604091829020825160808101845281546001600160a01b031681526001820154928101929092526002015463ffffffff81169282019290925264010000000090910460ff161515606082015290565b604051610416919081516001600160a01b031681526020808301519082015260408083015163ffffffff169082015260609182015115159181019190915260800190565b34801561069957600080fd5b5061043f6106a8366004613190565b61108c565b3480156106b957600080fd5b5061043f6106c83660046131bc565b61111c565b3480156106d957600080fd5b5061043f6106e8366004613243565b611177565b3480156106f957600080fd5b5061043f610708366004612f5f565b6111d0565b34801561071957600080fd5b5060005461072d906001600160a01b031681565b6040516001600160a01b039091168152602001610416565b34801561075157600080fd5b5061043f61076036600461329c565b611225565b34801561077157600080fd5b5061043f61078036600461331d565b61127a565b34801561079157600080fd5b50601a54601b54601c546040805163ffffffff80861682526001600160401b036401000000008704811660208401526c010000000000000000000000008704811693830193909352600160a01b860483166060830152600160e01b90950485166080820152600160c01b9093041660a08301529190911660c082015260e001610416565b34801561082157600080fd5b506005546001600160a01b031661072d565b61043f610841366004613347565b611333565b34801561085257600080fd5b50610891600e54600f546010546011546001600160401b0380851695600160401b8604821695600160801b900490911693926001600160601b03169190565b604080516001600160401b0397881681529587166020870152939095169284019290925260608301526001600160601b0316608082015260a081019190915260c001610416565b3480156108e457600080fd5b506014546015546016546017546040805194855260208501939093526001600160601b03909116918301919091526060820152608001610416565b34801561092b57600080fd5b5061043f61093a366004613399565b61138c565b34801561094b57600080fd5b5061043f61095a366004613419565b6113e7565b34801561096b57600080fd5b5061043f61097a36600461349f565b611452565b34801561098b57600080fd5b5061043f61099a36600461350a565b6114a9565b3480156109ab57600080fd5b5061043f6109ba36600461355c565b611500565b3480156109cb57600080fd5b5061043f6109da366004613596565b611586565b3480156109eb57600080fd5b5061043f6109fa366004613190565b6115f3565b348015610a0b57600080fd5b50600154600254600354604080516001600160a01b0394851681529284166020840152921691810191909152606001610416565b348015610a4b57600080fd5b5061043f610a5a366004613630565b611659565b348015610a6b57600080fd5b50610b2d610a7a366004612f11565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915250600090815260076020908152604091829020825160c08101845281546001600160a01b0380821683526001600160401b03600160a01b80840482169685019690965263ffffffff600160e01b938490048116978501979097526001949094015490811660608401529384049092166080820152910490911660a082015290565b6040516104169190600060c0820190506001600160a01b0380845116835260208401516001600160401b0380821660208601526040860151915063ffffffff80831660408701528360608801511660608701528160808801511660808701528060a08801511660a08701525050505092915050565b348015610bae57600080fd5b50610bd2610bbd366004612f11565b60009081526019602052604090205460ff1690565b6040519015158152602001610416565b348015610bee57600080fd5b5061043f610bfd3660046136cb565b6116f1565b348015610c0e57600080fd5b5061043f610c1d366004613731565b61175b565b348015610c2e57600080fd5b5061043f610c3d366004612fff565b6117c9565b348015610c4e57600080fd5b5061043f610c5d36600461349f565b611822565b348015610c6e57600080fd5b50600954600a54600b54600c54604080516001600160401b038087168252600160401b80880482166020840152600160801b880463ffffffff90811694840194909452600160a01b9097046001600160601b0390811660608401526080830196909652841660a08201529483041660c08501526c0100000000000000000000000090910490911660e083015261010082015261012001610416565b348015610d1557600080fd5b5060055460065460408051600160a01b9093046001600160401b0390811684528083166020850152600160401b90920490911690820152606001610416565b348015610d6057600080fd5b5061043f610d6f36600461376e565b611879565b348015610d8057600080fd5b5061043f610d8f366004613789565b611887565b348015610da057600080fd5b5061043f610daf3660046137a4565b611966565b348015610dc057600080fd5b50601b5460601b6040516001600160601b03199091168152602001610416565b348015610dec57600080fd5b50610bd2610dfb366004613789565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610e2557600080fd5b50610e39610e3436600461376e565b6119c1565b6040516104169190613838565b348015610e5257600080fd5b50610e66610e61366004612f11565b611ae4565b60405161041691906138dc565b6040517f260b6cde00000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063260b6cde90610ec8906001908690869060040161396d565b60006040518083038186803b158015610ee057600080fd5b505af4158015610ef4573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610f5b5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b610f686001848484611b9c565b505050565b6040517e92bac900000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906292bac990610fc4906001908890889088908890600401613b23565b60006040518083038186803b158015610fdc57600080fd5b505af4158015610ff0573d6000803e3d6000fd5b5050505050505050565b6040517fa76558b300000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a76558b3906110559060019089908990899089908990600401613bbc565b60006040518083038186803b15801561106d57600080fd5b505af4158015611081573d6000803e3d6000fd5b505050505050505050565b6040517fc87de7f400000000000000000000000000000000000000000000000000000000815260016004820152602481018390526044810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063c87de7f4906064015b60006040518083038186803b1580156110ff57600080fd5b505af4158015611113573d6000803e3d6000fd5b50505050505050565b6040517f89b43a8600000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__906389b43a86906110559060019089908990899089908990600401613c06565b6040517f899bef9d00000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063899bef9d90610fc4906001908890889088908890600401613c47565b6040517f99b0b84700000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__906399b0b84790610ec8906001908690869060040161396d565b6040517faea7fd0b00000000000000000000000000000000000000000000000000000000815273__$894ce12e79ca3e5683c1b49e363f37fa22$__9063aea7fd0b90610ec89060019086908690600401613c7e565b6000546001600160a01b031633146112d45760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f9065599c12c4294d9e2201638226d0d0beb95c228f468c4e7c2bdb8322b6066f910160405180910390a25050565b6040517f3b5d9f2400000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__90633b5d9f2490610fc4906001908890889088908890600401613db1565b6040517f624526fe00000000000000000000000000000000000000000000000000000000815273__$a542940934c03bae9a39609192cb25cc3c$__9063624526fe906110559060019089908990899089908990600401613e0b565b6000546001600160a01b031633146114415760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b611113600188888888888888611dcf565b6040517f2fcc8fb100000000000000000000000000000000000000000000000000000000815273__$24f7e155a6d011c1bf9032506ba9b1954c$__90632fcc8fb1906110e790600190879087908790600401613e4e565b6040517f07f96c4200000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__906307f96c42906110e790600190879087908790600401613e92565b6040517fd079fbb100000000000000000000000000000000000000000000000000000000815273__$0f118c52967a3847a37f0a2ef02ffcee04$__9063d079fbb190611553906001908590600401613ebc565b60006040518083038186803b15801561156b57600080fd5b505af415801561157f573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146115e05760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b61108160018a8a8a8a8a8a8a8a8a612192565b6040517f4afbe4c90000000000000000000000000000000000000000000000000000000081526001600482015260248101849052604481018390526064810182905273__$0f118c52967a3847a37f0a2ef02ffcee04$__90634afbe4c9906084016110e7565b6040517fc8f7794300000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063c8f77943906116b8906001908b908b908b908b908b908b908b90600401613ed0565b60006040518083038186803b1580156116d057600080fd5b505af41580156116e4573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b0316331461174b5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b610ef46001878787878787612741565b6000546001600160a01b031633146117b55760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b6117c3600185858585612ac6565b50505050565b6040517fa164de6e00000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__9063a164de6e90610fc4906001908890889088908890600401613b23565b6040517fb79a972500000000000000000000000000000000000000000000000000000000815273__$edce581bb06331cf4dae1387760565e5d1$__9063b79a9725906110e790600190879087908790600401613e4e565b611884600182612c38565b50565b6000546001600160a01b031633146118e15760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610f52565b6001600160a01b03811661195d5760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610f52565b61188481612d90565b6040517f7333b36900000000000000000000000000000000000000000000000000000000815273__$9935b6ea18e0c526c293569ddd26842c9b$__90637333b369906110559060019089908990899089908990600401613f5b565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101919091526001600160601b031982166000908152601d60209081526040918290208251610120810184528154815260018201549281019290925260028101546001600160401b0381169383019390935263ffffffff600160401b8404811660608401526c01000000000000000000000000840481166080840152600160801b8404811660a0840152600160a01b84041660c0830152909160e083019060ff600160c01b909104166005811115611abe57611abe61380e565b6005811115611acf57611acf61380e565b81526020016003820154815250509050919050565b611b0c6040805160808101825260008082526020820181905291810182905290606082015290565b6000828152600d602090815260409182902082516080810184528154606081811b6001600160601b0319168352600160a01b82046001600160401b031694830194909452600160e01b900463ffffffff16938101939093526001810154909183019060ff166003811115611b8257611b8261380e565b6003811115611b9357611b9361380e565b90525092915050565b6000836001600160401b031611611c1b5760405162461bcd60e51b815260206004820152603060248201527f4465706f7369742064757374207468726573686f6c64206d757374206265206760448201527f726561746572207468616e207a65726f000000000000000000000000000000006064820152608401610f52565b6000826001600160401b031611611c9a5760405162461bcd60e51b815260206004820152603660248201527f4465706f736974207472656173757279206665652064697669736f72206d757360448201527f742062652067726561746572207468616e207a65726f000000000000000000006064820152608401610f52565b6000816001600160401b031611611d195760405162461bcd60e51b815260206004820152603560248201527f4465706f736974207472616e73616374696f6e206d617820666565206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610f52565b6004840180547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16600160a01b6001600160401b03868116918202929092179092556005860180548583166fffffffffffffffffffffffffffffffff199091168117600160401b938616938402179091556040805193845260208401919091528201527f1ced468902ca566e746a3c8c9516af81f8de9f1021c365083be9f2625ebfb7b59060600160405180910390a150505050565b856001600160401b0316856001600160401b031611611e7c5760405162461bcd60e51b815260206004820152605960248201527f57616c6c6574206372656174696f6e206d6178696d756d204254432062616c6160448201527f6e6365206d7573742062652067726561746572207468616e207468652063726560648201527f6174696f6e206d696e696d756d204254432062616c616e636500000000000000608482015260a401610f52565b6000846001600160401b031611611efb5760405162461bcd60e51b815260206004820152603c60248201527f57616c6c657420636c6f73757265206d696e696d756d204254432062616c616e60448201527f6365206d7573742062652067726561746572207468616e207a65726f000000006064820152608401610f52565b6000826001600160401b031611611f7a5760405162461bcd60e51b815260206004820152603560248201527f57616c6c6574206d6178696d756d20425443207472616e73666572206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610f52565b60008163ffffffff1611611ff65760405162461bcd60e51b815260206004820152602f60248201527f57616c6c657420636c6f73696e6720706572696f64206d75737420626520677260448201527f6561746572207468616e207a65726f00000000000000000000000000000000006064820152608401610f52565b868860190160006101000a81548163ffffffff021916908363ffffffff160217905550858860190160046101000a8154816001600160401b0302191690836001600160401b031602179055508488601901600c6101000a8154816001600160401b0302191690836001600160401b03160217905550838860190160146101000a8154816001600160401b0302191690836001600160401b031602179055508288601901601c6101000a81548163ffffffff021916908363ffffffff1602179055508188601a0160186101000a8154816001600160401b0302191690836001600160401b031602179055508088601b0160006101000a81548163ffffffff021916908363ffffffff1602179055507fc7d3a9af08692aeae771c329fddd95c7237a9f76fec996325f3959eeff07d4ac87878787878787604051612180979695949392919063ffffffff97881681526001600160401b03968716602082015294861660408601529285166060850152908516608084015290921660a0820152911660c082015260e00190565b60405180910390a15050505050505050565b6000896001600160401b031611612213576040805162461bcd60e51b81526020600482015260248101919091527f4d6f76696e672066756e6473207472616e73616374696f6e206d617820746f7460448201527f616c20666565206d7573742062652067726561746572207468616e207a65726f6064820152608401610f52565b6000886001600160401b0316116122925760405162461bcd60e51b815260206004820152603560248201527f4d6f76696e672066756e64732064757374207468726573686f6c64206d75737460448201527f2062652067726561746572207468616e207a65726f00000000000000000000006064820152608401610f52565b60008763ffffffff161161230e5760405162461bcd60e51b815260206004820152602e60248201527f4d6f76696e672066756e64732074696d656f7574206d7573742062652067726560448201527f61746572207468616e207a65726f0000000000000000000000000000000000006064820152608401610f52565b60648511156123ab5760405162461bcd60e51b815260206004820152604d60248201527f4d6f76696e672066756e64732074696d656f7574206e6f74696669657220726560448201527f77617264206d756c7469706c696572206d75737420626520696e20746865207260648201527f616e6765205b302c203130305d00000000000000000000000000000000000000608482015260a401610f52565b6000846001600160401b0316116124505760405162461bcd60e51b815260206004820152604560248201527f4d6f7665642066756e6473207377656570207472616e73616374696f6e206d6160448201527f7820746f74616c20666565206d7573742062652067726561746572207468616e60648201527f207a65726f000000000000000000000000000000000000000000000000000000608482015260a401610f52565b60008363ffffffff16116124cc5760405162461bcd60e51b815260206004820152603360248201527f4d6f7665642066756e64732073776565702074696d656f7574206d757374206260448201527f652067726561746572207468616e207a65726f000000000000000000000000006064820152608401610f52565b60648111156125695760405162461bcd60e51b815260206004820152605260248201527f4d6f7665642066756e64732073776565702074696d656f7574206e6f7469666960448201527f657220726577617264206d756c7469706c696572206d75737420626520696e2060648201527f7468652072616e6765205b302c203130305d0000000000000000000000000000608482015260a401610f52565b888a60080160006101000a8154816001600160401b0302191690836001600160401b03160217905550878a60080160086101000a8154816001600160401b0302191690836001600160401b03160217905550868a60080160106101000a81548163ffffffff021916908363ffffffff160217905550858a60080160146101000a8154816001600160601b0302191690836001600160601b03160217905550848a60090181905550838a600a0160006101000a8154816001600160401b0302191690836001600160401b03160217905550828a600a0160086101000a81548163ffffffff021916908363ffffffff160217905550818a600a01600c6101000a8154816001600160601b0302191690836001600160601b03160217905550808a600b01819055507f5662a4f84a0d9b64b01c0f14b329ff73e09d4bc2e2684d90174e31615b40a4a289898989898989898960405161272d999897969594939291906001600160401b03998a168152978916602089015263ffffffff96871660408901526001600160601b03958616606089015260808801949094529190961660a08601529490921660c08401529290921660e08201526101008101919091526101200190565b60405180910390a150505050505050505050565b6000866001600160401b0316116127c05760405162461bcd60e51b815260206004820152603360248201527f526564656d7074696f6e2064757374207468726573686f6c64206d757374206260448201527f652067726561746572207468616e207a65726f000000000000000000000000006064820152608401610f52565b6000856001600160401b03161161283f5760405162461bcd60e51b815260206004820152603960248201527f526564656d7074696f6e207472656173757279206665652064697669736f722060448201527f6d7573742062652067726561746572207468616e207a65726f000000000000006064820152608401610f52565b6000846001600160401b0316116128be5760405162461bcd60e51b815260206004820152603860248201527f526564656d7074696f6e207472616e73616374696f6e206d617820666565206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610f52565b600083116129345760405162461bcd60e51b815260206004820152602c60248201527f526564656d7074696f6e2074696d656f7574206d75737420626520677265617460448201527f6572207468616e207a65726f00000000000000000000000000000000000000006064820152608401610f52565b60648111156129d15760405162461bcd60e51b815260206004820152604b60248201527f526564656d7074696f6e2074696d656f7574206e6f746966696572207265776160448201527f7264206d756c7469706c696572206d75737420626520696e207468652072616e60648201527f6765205b302c203130305d000000000000000000000000000000000000000000608482015260a401610f52565b600d870180546001600160401b038881166fffffffffffffffffffffffffffffffff199092168217600160401b898316908102919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b92891692830217909355600e8a01869055600f8a0180546001600160601b0319166001600160601b03871690811790915560108b018590556040805193845260208401949094529282015260608101859052608081019190915260a081018290527f944cd06e316cc3da4159300dd41ab23416c89a5136c41fa79d57fe8a34bcc10f9060c00160405180910390a150505050505050565b60008311612b3c5760405162461bcd60e51b815260206004820152603860248201527f4672617564206368616c6c656e6765206465666561742074696d656f7574206d60448201527f7573742062652067726561746572207468616e207a65726f00000000000000006064820152608401610f52565b6064811115612bb35760405162461bcd60e51b815260206004820152603e60248201527f4672617564206e6f74696669657220726577617264206d756c7469706c69657260448201527f206d75737420626520696e207468652072616e6765205b302c203130305d00006064820152608401610f52565b60138501849055601485018390556015850180546001600160601b0319166001600160601b03841690811790915560168601829055604080518681526020810186905290810191909152606081018290527fd0d6d92441fbb139a023c9c62586dbd767824f37869c45da6443fc3aef64194f9060800160405180910390a15050505050565b6001600160601b031981166000908152601c83016020526040902060036002820154600160c01b900460ff166005811115612c7557612c7561380e565b14612ce85760405162461bcd60e51b815260206004820152602560248201527f45434453412077616c6c6574206d75737420626520696e20436c6f73696e672060448201527f73746174650000000000000000000000000000000000000000000000000000006064820152608401610f52565b601b8301546002820154612d0c9163ffffffff90811691600160801b900416613fae565b63ffffffff164211612d865760405162461bcd60e51b815260206004820152602260248201527f436c6f73696e6720706572696f6420686173206e6f7420656c6170736564207960448201527f65740000000000000000000000000000000000000000000000000000000000006064820152608401610f52565b610f688383612e09565b600080546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160601b031981166000818152601c840160205260408082206002810180547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff167804000000000000000000000000000000000000000000000000179055805491519093927f47b159947c3066cb253f60e8f046cfd747411788a545cb189679e3fa1467b28d91a3600283015481546040517f343bb9270000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163343bb92791612ee39160040190815260200190565b600060405180830381600087803b158015612efd57600080fd5b505af1158015611113573d6000803e3d6000fd5b600060208284031215612f2357600080fd5b5035919050565b80356001600160601b031981168114612f4257600080fd5b919050565b600060608284031215612f5957600080fd5b50919050565b60008060808385031215612f7257600080fd5b612f7b83612f2a565b9150612f8a8460208501612f47565b90509250929050565b80356001600160401b0381168114612f4257600080fd5b600080600060608486031215612fbf57600080fd5b612fc884612f93565b9250612fd660208501612f93565b9150612fe460408501612f93565b90509250925092565b600060808284031215612f5957600080fd5b60008060008060c0858703121561301557600080fd5b84356001600160401b038082111561302c57600080fd5b61303888838901612fed565b9550602087013591508082111561304e57600080fd5b5061305b87828801612f47565b93505061306b8660408701612f47565b915061307960a08601612f2a565b905092959194509250565b60008083601f84011261309657600080fd5b5081356001600160401b038111156130ad57600080fd5b6020830191508360208260051b85010111156130c857600080fd5b9250929050565b60008083601f8401126130e157600080fd5b5081356001600160401b038111156130f857600080fd5b6020830191508360208285010111156130c857600080fd5b60008060008060006060868803121561312857600080fd5b61313186612f2a565b945060208601356001600160401b038082111561314d57600080fd5b61315989838a01613084565b9096509450604088013591508082111561317257600080fd5b5061317f888289016130cf565b969995985093965092949392505050565b6000806000606084860312156131a557600080fd5b505081359360208301359350604090920135919050565b6000806000806000606086880312156131d457600080fd5b85356001600160401b03808211156131eb57600080fd5b6131f789838a016130cf565b9097509550602088013591508082111561321057600080fd5b5061321d88828901613084565b96999598509660400135949350505050565b803563ffffffff81168114612f4257600080fd5b6000806000806060858703121561325957600080fd5b843593506132696020860161322f565b925060408501356001600160401b0381111561328457600080fd5b61329087828801613084565b95989497509550505050565b6000808284036101008112156132b157600080fd5b83356001600160401b038111156132c757600080fd5b6132d386828701612fed565b93505060e0601f19820112156132e857600080fd5b506020830190509250929050565b80356001600160a01b0381168114612f4257600080fd5b80358015158114612f4257600080fd5b6000806040838503121561333057600080fd5b613339836132f6565b9150612f8a6020840161330d565b60008060008060a0858703121561335d57600080fd5b84356001600160401b0381111561337357600080fd5b61337f878288016130cf565b909550935050602085013591506130798660408701612f47565b6000806000806000606086880312156133b157600080fd5b85356001600160401b03808211156133c857600080fd5b6133d489838a016130cf565b909750955060208801359150808211156133ed57600080fd5b506133fa888289016130cf565b909450925061340d90506040870161330d565b90509295509295909350565b600080600080600080600060e0888a03121561343457600080fd5b61343d8861322f565b965061344b60208901612f93565b955061345960408901612f93565b945061346760608901612f93565b93506134756080890161322f565b925061348360a08901612f93565b915061349160c0890161322f565b905092959891949750929550565b600080600060a084860312156134b457600080fd5b83356001600160401b03808211156134cb57600080fd5b6134d787838801612fed565b945060208601359150808211156134ed57600080fd5b506134fa86828701612f47565b925050612fe48560408601612f47565b60008060006040848603121561351f57600080fd5b61352884612f2a565b925060208401356001600160401b0381111561354357600080fd5b61354f86828701613084565b9497909650939450505050565b60006060828403121561356e57600080fd5b6135788383612f47565b9392505050565b80356001600160601b0381168114612f4257600080fd5b60008060008060008060008060006101208a8c0312156135b557600080fd5b6135be8a612f93565b98506135cc60208b01612f93565b97506135da60408b0161322f565b96506135e860608b0161357f565b955060808a013594506135fd60a08b01612f93565b935061360b60c08b0161322f565b925061361960e08b0161357f565b91506101008a013590509295985092959850929598565b600080600080600080600060e0888a03121561364b57600080fd5b61365488612f2a565b96506136638960208a01612f47565b955060808801356001600160401b038082111561367f57600080fd5b61368b8b838c01613084565b909750955060a08a0135945060c08a01359150808211156136ab57600080fd5b506136b88a828b01613084565b989b979a50959850939692959293505050565b60008060008060008060c087890312156136e457600080fd5b6136ed87612f93565b95506136fb60208801612f93565b945061370960408801612f93565b93506060870135925061371e6080880161357f565b915060a087013590509295509295509295565b6000806000806080858703121561374757600080fd5b843593506020850135925061375e6040860161357f565b9396929550929360600135925050565b60006020828403121561378057600080fd5b61357882612f2a565b60006020828403121561379b57600080fd5b613578826132f6565b600080600080600060c086880312156137bc57600080fd5b6137c586612f2a565b94506137d48760208801612f47565b935060808601356001600160401b038111156137ef57600080fd5b6137fb888289016130cf565b909450925061340d905060a08701612f93565b634e487b7160e01b600052602160045260246000fd5b600681106138345761383461380e565b9052565b60006101208201905082518252602083015160208301526001600160401b03604084015116604083015263ffffffff60608401511660608301526080830151613889608084018263ffffffff169052565b5060a08301516138a160a084018263ffffffff169052565b5060c08301516138b960c084018263ffffffff169052565b5060e08301516138cc60e0840182613824565b5061010092830151919092015290565b81516001600160601b03191681526020808301516001600160401b03169082015260408083015163ffffffff169082015260608201516080820190600481106139275761392761380e565b8060608401525092915050565b8035825263ffffffff6139496020830161322f565b1660208301526001600160401b0361396360408301612f93565b1660408301525050565b8381526001600160601b03198316602082015260a081016139916040830184613934565b949350505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114612f4257600080fd5b6000808335601e198436030181126139e057600080fd5b83016020810192503590506001600160401b038111156139ff57600080fd5b8036038313156130c857600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60007fffffffff0000000000000000000000000000000000000000000000000000000080613a6484613999565b168452613a7460208401846139c9565b60806020870152613a89608087018284613a0e565b915050613a9960408501856139c9565b8683036040880152613aac838284613a0e565b9250505081613abd60608601613999565b166060860152809250505092915050565b6000613ada82836139c9565b60608552613aec606086018284613a0e565b91505060208301356020850152613b0660408401846139c9565b8583036040870152613b19838284613a0e565b9695505050505050565b85815260e060208201526000613b3c60e0830187613a37565b8281036040840152613b4e8187613ace565b915050613b5e6060830185613934565b6001600160601b0319831660c08301529695505050505050565b8183526000602080850194508260005b85811015613bb15763ffffffff613b9e8361322f565b1687529582019590820190600101613b88565b509495945050505050565b8681526001600160601b031986166020820152608060408201526000613be6608083018688613b78565b8281036060840152613bf9818587613a0e565b9998505050505050505050565b868152608060208201526000613c20608083018789613a0e565b8281036040840152613c33818688613b78565b915050826060830152979650505050505050565b85815284602082015263ffffffff84166040820152608060608201526000613c73608083018486613b78565b979650505050505050565b6000610120858352806020840152613c9881840186613a37565b91505063ffffffff613ca98461322f565b1660408301526001600160a01b03613cc3602085016132f6565b16606083015260408301357fffffffffffffffff00000000000000000000000000000000000000000000000081168114613cfc57600080fd5b7fffffffffffffffff000000000000000000000000000000000000000000000000166080830152613d2f60608401612f2a565b6001600160601b03191660a0830152613d4a60808401612f2a565b6001600160601b03191660c0830152613d6560a08401613999565b7fffffffff000000000000000000000000000000000000000000000000000000001660e0830152613d9860c084016132f6565b6001600160a01b03811661010084015250949350505050565b85815260c060208201526000613dcb60c083018688613a0e565b90508360408301528235606083015260208301356080830152604083013560ff8116808214613df957600080fd5b8060a085015250509695505050505050565b868152608060208201526000613e25608083018789613a0e565b8281036040840152613e38818688613a0e565b9150508215156060830152979650505050505050565b84815260c060208201526000613e6760c0830186613a37565b8281036040840152613e798186613ace565b915050613e896060830184613934565b95945050505050565b8481526001600160601b031984166020820152606060408201526000613b19606083018486613b78565b828152608081016135786020830184613934565b60006101008a835260206001600160601b0319808c1682860152613ef7604086018c613934565b8260a0860152613f0a8386018a8c613b78565b60c0860189905285810360e0870152868152879350820160005b87811015613f495782613f3686612f2a565b1682529383019390830190600101613f24565b509d9c50505050505050505050505050565b8681526001600160601b031986166020820152613f7b6040820186613934565b60e060a08201526000613f9260e083018587613a0e565b90506001600160401b03831660c0830152979650505050505050565b600063ffffffff808316818516808303821115613fdb57634e487b7160e01b600052601160045260246000fd5b0194935050505056fea26469706673582212204718a3a567654683c663ebcc8a84a054270c47accaa71f4b0256d3a72978536364736f6c63430008090033",
|
|
2363
2363
|
"linkReferences": {
|
|
2364
2364
|
"contracts/bridge/Deposit.sol": {
|
|
2365
2365
|
"Deposit": [
|
|
@@ -213,8 +213,8 @@
|
|
|
213
213
|
"type": "event"
|
|
214
214
|
}
|
|
215
215
|
],
|
|
216
|
-
"bytecode": "
|
|
217
|
-
"deployedBytecode": "
|
|
216
|
+
"bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220449584315e8478164f31cff26d3348e0a7c5cae888ed1be61b6d414c256ad84764736f6c63430008090033",
|
|
217
|
+
"deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220449584315e8478164f31cff26d3348e0a7c5cae888ed1be61b6d414c256ad84764736f6c63430008090033",
|
|
218
218
|
"linkReferences": {},
|
|
219
219
|
"deployedLinkReferences": {}
|
|
220
220
|
}
|