@zero-tech/zkevm-contracts
Version:
Core contracts for the Polygon Hermez zkEVM
1,153 lines • 92.6 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "PolygonZkEVMEtrogPrevious",
"sourceName": "contracts/v2/previousVersions/PolygonZkEVMEtrogPrevious.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract IPolygonZkEVMGlobalExitRootV2",
"name": "_globalExitRootManager",
"type": "address"
},
{
"internalType": "contract IERC20Upgradeable",
"name": "_pol",
"type": "address"
},
{
"internalType": "contract IPolygonZkEVMBridgeV2",
"name": "_bridgeAddress",
"type": "address"
},
{
"internalType": "contract PolygonRollupManager",
"name": "_rollupManager",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "BatchAlreadyVerified",
"type": "error"
},
{
"inputs": [],
"name": "BatchNotSequencedOrNotSequenceEnd",
"type": "error"
},
{
"inputs": [],
"name": "ExceedMaxVerifyBatches",
"type": "error"
},
{
"inputs": [],
"name": "FinalNumBatchBelowLastVerifiedBatch",
"type": "error"
},
{
"inputs": [],
"name": "FinalNumBatchDoesNotMatchPendingState",
"type": "error"
},
{
"inputs": [],
"name": "FinalPendingStateNumInvalid",
"type": "error"
},
{
"inputs": [],
"name": "ForceBatchNotAllowed",
"type": "error"
},
{
"inputs": [],
"name": "ForceBatchTimeoutNotExpired",
"type": "error"
},
{
"inputs": [],
"name": "ForceBatchesAlreadyActive",
"type": "error"
},
{
"inputs": [],
"name": "ForceBatchesDecentralized",
"type": "error"
},
{
"inputs": [],
"name": "ForceBatchesNotAllowedOnEmergencyState",
"type": "error"
},
{
"inputs": [],
"name": "ForceBatchesOverflow",
"type": "error"
},
{
"inputs": [],
"name": "ForcedDataDoesNotMatch",
"type": "error"
},
{
"inputs": [],
"name": "GasTokenNetworkMustBeZeroOnEther",
"type": "error"
},
{
"inputs": [],
"name": "GlobalExitRootNotExist",
"type": "error"
},
{
"inputs": [],
"name": "HaltTimeoutNotExpired",
"type": "error"
},
{
"inputs": [],
"name": "HaltTimeoutNotExpiredAfterEmergencyState",
"type": "error"
},
{
"inputs": [],
"name": "HugeTokenMetadataNotSupported",
"type": "error"
},
{
"inputs": [],
"name": "InitNumBatchAboveLastVerifiedBatch",
"type": "error"
},
{
"inputs": [],
"name": "InitNumBatchDoesNotMatchPendingState",
"type": "error"
},
{
"inputs": [],
"name": "InitSequencedBatchDoesNotMatch",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitializeTransaction",
"type": "error"
},
{
"inputs": [],
"name": "InvalidProof",
"type": "error"
},
{
"inputs": [],
"name": "InvalidRangeBatchTimeTarget",
"type": "error"
},
{
"inputs": [],
"name": "InvalidRangeForceBatchTimeout",
"type": "error"
},
{
"inputs": [],
"name": "InvalidRangeMultiplierBatchFee",
"type": "error"
},
{
"inputs": [],
"name": "MaxTimestampSequenceInvalid",
"type": "error"
},
{
"inputs": [],
"name": "NewAccInputHashDoesNotExist",
"type": "error"
},
{
"inputs": [],
"name": "NewPendingStateTimeoutMustBeLower",
"type": "error"
},
{
"inputs": [],
"name": "NewStateRootNotInsidePrime",
"type": "error"
},
{
"inputs": [],
"name": "NewTrustedAggregatorTimeoutMustBeLower",
"type": "error"
},
{
"inputs": [],
"name": "NotEnoughMaticAmount",
"type": "error"
},
{
"inputs": [],
"name": "NotEnoughPOLAmount",
"type": "error"
},
{
"inputs": [],
"name": "OldAccInputHashDoesNotExist",
"type": "error"
},
{
"inputs": [],
"name": "OldStateRootDoesNotExist",
"type": "error"
},
{
"inputs": [],
"name": "OnlyAdmin",
"type": "error"
},
{
"inputs": [],
"name": "OnlyPendingAdmin",
"type": "error"
},
{
"inputs": [],
"name": "OnlyRollupManager",
"type": "error"
},
{
"inputs": [],
"name": "OnlyTrustedAggregator",
"type": "error"
},
{
"inputs": [],
"name": "OnlyTrustedSequencer",
"type": "error"
},
{
"inputs": [],
"name": "PendingStateDoesNotExist",
"type": "error"
},
{
"inputs": [],
"name": "PendingStateInvalid",
"type": "error"
},
{
"inputs": [],
"name": "PendingStateNotConsolidable",
"type": "error"
},
{
"inputs": [],
"name": "PendingStateTimeoutExceedHaltAggregationTimeout",
"type": "error"
},
{
"inputs": [],
"name": "SequenceZeroBatches",
"type": "error"
},
{
"inputs": [],
"name": "SequencedTimestampBelowForcedTimestamp",
"type": "error"
},
{
"inputs": [],
"name": "SequencedTimestampInvalid",
"type": "error"
},
{
"inputs": [],
"name": "StoredRootMustBeDifferentThanNewRoot",
"type": "error"
},
{
"inputs": [],
"name": "TransactionsLengthAboveMax",
"type": "error"
},
{
"inputs": [],
"name": "TrustedAggregatorTimeoutExceedHaltAggregationTimeout",
"type": "error"
},
{
"inputs": [],
"name": "TrustedAggregatorTimeoutNotExpired",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "newAdmin",
"type": "address"
}
],
"name": "AcceptAdminRole",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint64",
"name": "forceBatchNum",
"type": "uint64"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "lastGlobalExitRoot",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "address",
"name": "sequencer",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes",
"name": "transactions",
"type": "bytes"
}
],
"name": "ForceBatch",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes",
"name": "transactions",
"type": "bytes"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "lastGlobalExitRoot",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "address",
"name": "sequencer",
"type": "address"
}
],
"name": "InitialSequenceBatches",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint64",
"name": "numBatch",
"type": "uint64"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "l1InfoRoot",
"type": "bytes32"
}
],
"name": "SequenceBatches",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint64",
"name": "numBatch",
"type": "uint64"
}
],
"name": "SequenceForceBatches",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "newForceBatchAddress",
"type": "address"
}
],
"name": "SetForceBatchAddress",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "newforceBatchTimeout",
"type": "uint64"
}
],
"name": "SetForceBatchTimeout",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "newTrustedSequencer",
"type": "address"
}
],
"name": "SetTrustedSequencer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "newTrustedSequencerURL",
"type": "string"
}
],
"name": "SetTrustedSequencerURL",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "newPendingAdmin",
"type": "address"
}
],
"name": "TransferAdminRole",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint64",
"name": "numBatch",
"type": "uint64"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "stateRoot",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "aggregator",
"type": "address"
}
],
"name": "VerifyBatches",
"type": "event"
},
{
"inputs": [],
"name": "GLOBAL_EXIT_ROOT_MANAGER_L2",
"outputs": [
{
"internalType": "contract IBasePolygonZkEVMGlobalExitRoot",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "INITIALIZE_TX_BRIDGE_LIST_LEN_LEN",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "INITIALIZE_TX_BRIDGE_PARAMS",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "INITIALIZE_TX_BRIDGE_PARAMS_AFTER_BRIDGE_ADDRESS",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "INITIALIZE_TX_BRIDGE_PARAMS_AFTER_BRIDGE_ADDRESS_EMPTY_METADATA",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "INITIALIZE_TX_CONSTANT_BYTES",
"outputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "INITIALIZE_TX_CONSTANT_BYTES_EMPTY_METADATA",
"outputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "INITIALIZE_TX_DATA_LEN_EMPTY_METADATA",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "INITIALIZE_TX_EFFECTIVE_PERCENTAGE",
"outputs": [
{
"internalType": "bytes1",
"name": "",
"type": "bytes1"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "SIGNATURE_INITIALIZE_TX_R",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "SIGNATURE_INITIALIZE_TX_S",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "SIGNATURE_INITIALIZE_TX_V",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "acceptAdminRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "admin",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "bridgeAddress",
"outputs": [
{
"internalType": "contract IPolygonZkEVMBridgeV2",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "calculatePolPerForceBatch",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "transactions",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "polAmount",
"type": "uint256"
}
],
"name": "forceBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "forceBatchAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "forceBatchTimeout",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"name": "forcedBatches",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "gasTokenAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "gasTokenNetwork",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "networkID",
"type": "uint32"
},
{
"internalType": "address",
"name": "_gasTokenAddress",
"type": "address"
},
{
"internalType": "uint32",
"name": "_gasTokenNetwork",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_gasTokenMetadata",
"type": "bytes"
}
],
"name": "generateInitializeTransaction",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "globalExitRootManager",
"outputs": [
{
"internalType": "contract IPolygonZkEVMGlobalExitRootV2",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_admin",
"type": "address"
},
{
"internalType": "address",
"name": "sequencer",
"type": "address"
},
{
"internalType": "uint32",
"name": "networkID",
"type": "uint32"
},
{
"internalType": "address",
"name": "_gasTokenAddress",
"type": "address"
},
{
"internalType": "string",
"name": "sequencerURL",
"type": "string"
},
{
"internalType": "string",
"name": "_networkName",
"type": "string"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "lastAccInputHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "lastForceBatch",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "lastForceBatchSequenced",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "networkName",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint64",
"name": "lastVerifiedBatch",
"type": "uint64"
},
{
"internalType": "bytes32",
"name": "newStateRoot",
"type": "bytes32"
},
{
"internalType": "address",
"name": "aggregator",
"type": "address"
}
],
"name": "onVerifyBatches",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "pendingAdmin",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pol",
"outputs": [
{
"internalType": "contract IERC20Upgradeable",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "rollupManager",
"outputs": [
{
"internalType": "contract PolygonRollupManager",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes",
"name": "transactions",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "forcedGlobalExitRoot",
"type": "bytes32"
},
{
"internalType": "uint64",
"name": "forcedTimestamp",
"type": "uint64"
},
{
"internalType": "bytes32",
"name": "forcedBlockHashL1",
"type": "bytes32"
}
],
"internalType": "struct PolygonRollupBaseEtrogPrevious.BatchData[]",
"name": "batches",
"type": "tuple[]"
},
{
"internalType": "address",
"name": "l2Coinbase",
"type": "address"
}
],
"name": "sequenceBatches",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes",
"name": "transactions",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "forcedGlobalExitRoot",
"type": "bytes32"
},
{
"internalType": "uint64",
"name": "forcedTimestamp",
"type": "uint64"
},
{
"internalType": "bytes32",
"name": "forcedBlockHashL1",
"type": "bytes32"
}
],
"internalType": "struct PolygonRollupBaseEtrogPrevious.BatchData[]",
"name": "batches",
"type": "tuple[]"
}
],
"name": "sequenceForceBatches",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newForceBatchAddress",
"type": "address"
}
],
"name": "setForceBatchAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint64",
"name": "newforceBatchTimeout",
"type": "uint64"
}
],
"name": "setForceBatchTimeout",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newTrustedSequencer",
"type": "address"
}
],
"name": "setTrustedSequencer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "newTrustedSequencerURL",
"type": "string"
}
],
"name": "setTrustedSequencerURL",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newPendingAdmin",
"type": "address"
}
],
"name": "transferAdminRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "trustedSequencer",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "trustedSequencerURL",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x6101006040523480156200001257600080fd5b506040516200432938038062004329833981016040819052620000359162000071565b6001600160a01b0393841660a052918316608052821660c0521660e052620000d9565b6001600160a01b03811681146200006e57600080fd5b50565b600080600080608085870312156200008857600080fd5b8451620000958162000058565b6020860151909450620000a88162000058565b6040860151909350620000bb8162000058565b6060860151909250620000ce8162000058565b939692955090935050565b60805160a05160c05160e051614167620001c2600039600081816104f00152818161095e01528181610acb01528181610d16015281816112fc015281816117a001528181611bf701528181611ced015281816123760152818161243e01528181612d6201528181612ddb01528181612dfd0152612f1501526000818161064a01528181610f0f01528181610fe901528181611ebe01528181611fc6015261289c0152600081816107060152818161117001528181612589015261291e0152600081816107380152818161080a01528181611c400152818161255d0152612eab01526141676000f3fe608060405234801561001057600080fd5b50600436106102dd5760003560e01c80637a5460c511610186578063c7fffd4b116100e3578063e46761c411610097578063ecef3f9911610071578063ecef3f9914610781578063f35dda4714610794578063f851a4401461079c57600080fd5b8063e46761c414610733578063e7a7ed021461075a578063eaeb077b1461076e57600080fd5b8063cfa8ed47116100c8578063cfa8ed47146106e1578063d02103ca14610701578063d7bc90ff1461072857600080fd5b8063c7fffd4b146106c6578063c89e42df146106ce57600080fd5b8063a3c573eb1161013a578063ada8f9191161011f578063ada8f9191461067f578063b0afe15414610692578063c754c7ed1461069e57600080fd5b8063a3c573eb14610645578063a652f26c1461066c57600080fd5b806391cafe321161016b57806391cafe32146106045780639e001877146106175780639f26f8401461063257600080fd5b80637a5460c5146105c05780638c3d7301146105fc57600080fd5b806340b5de6c1161023f578063542028d5116101f35780636e05d2cd116101cd5780636e05d2cd146105915780636ff512cc1461059a57806371257022146105ad57600080fd5b8063542028d514610561578063676870d2146105695780636b8616ce1461057157600080fd5b806349b7b8021161022457806349b7b802146104eb5780634e4877061461051257806352bdeb6d1461052557600080fd5b806340b5de6c1461045a57806345605267146104b257600080fd5b8063267822471161029657806332c2d1531161027b57806332c2d153146103e85780633c351e10146103fd5780633cbc795b1461041d57600080fd5b806326782247146103835780632c111c06146103c857600080fd5b806305835f37116102c757806305835f3714610318578063107bf28c1461036157806311e892d41461036957600080fd5b8062d0295d146102e257806303508963146102fd575b600080fd5b6102ea6107c2565b6040519081526020015b60405180910390f35b610305602081565b60405161ffff90911681526020016102f4565b6103546040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516102f49190613412565b6103546108ce565b61037160f981565b60405160ff90911681526020016102f4565b6001546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f4565b6008546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b6103fb6103f6366004613467565b61095c565b005b6009546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104459074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102f4565b6104817fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff0000000000000000000000000000000000000000000000000000000000000090911681526020016102f4565b6007546104d29068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f4565b6103a37f000000000000000000000000000000000000000000000000000000000000000081565b6103fb6105203660046134a9565b610a2b565b6103546040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610354610c3d565b610305601f81565b6102ea61057f3660046134a9565b60066020526000908152604090205481565b6102ea60055481565b6103fb6105a83660046134c6565b610c4a565b6103fb6105bb36600461360f565b610d14565b6103546040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b6103fb611538565b6103fb6106123660046134c6565b61160b565b6103a373a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b6103fb610640366004613708565b611724565b6103a37f000000000000000000000000000000000000000000000000000000000000000081565b61035461067a36600461374a565b611dbd565b6103fb61068d3660046134c6565b6121a2565b6102ea6405ca1ab1e081565b6007546104d290700100000000000000000000000000000000900467ffffffffffffffff1681565b61037160e481565b6103fb6106dc3660046137bf565b61226c565b6002546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b6103a37f000000000000000000000000000000000000000000000000000000000000000081565b6102ea635ca1ab1e81565b6103a37f000000000000000000000000000000000000000000000000000000000000000081565b6007546104d29067ffffffffffffffff1681565b6103fb61077c3660046137f4565b6122ff565b6103fb61078f36600461386c565b6127d1565b610371601b81565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610851573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087591906138b8565b6007549091506000906108a09067ffffffffffffffff68010000000000000000820481169116613900565b67ffffffffffffffff169050806000036108bd5760009250505090565b6108c78183613928565b9250505090565b600480546108db90613963565b80601f016020809104026020016040519081016040528092919081815260200182805461090790613963565b80156109545780601f1061092957610100808354040283529160200191610954565b820191906000526020600020905b81548152906001019060200180831161093757829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109cb576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a1e91815260200190565b60405180910390a3505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a82576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610ac9576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5891906139b6565b610bb95760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610bb9576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b600380546108db90613963565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610ca1576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610d83576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615808015610da35750600054600160ff909116105b80610dbd5750303b158015610dbd575060005460ff166001145b610e4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610eac57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606073ffffffffffffffffffffffffffffffffffffffff851615611111576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab90602401600060405180830381865afa158015610f56573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f9c91908101906139d8565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015291925060009182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa158015611031573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110559190613a4f565b915091508163ffffffff166000146110cd576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff84161717905561110e565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505b60095460009061115990889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685611dbd565b9050600081805190602001209050600042905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fd91906138b8565b90506000808483858f611211600143613a89565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303816000875af115801561135a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137e9190613aa2565b508c600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600390816114109190613b05565b50600461141d8982613b05565b508c600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e6040516114be93929190613c1f565b60405180910390a1505050505050801561152f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611589576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314611662576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff166116b1576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c32565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611762575073ffffffffffffffffffffffffffffffffffffffff81163314155b15611799576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182d9190613aa2565b6118379190613c5e565b67ffffffffffffffff161115611879576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160008190036118b5576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156118f1576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff8082169161191991849168010000000000000000900416613c7f565b1115611951576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff169060005b83811015611bf157600087878381811061198e5761198e613c92565b90506020028101906119a09190613cc1565b6119a990613cff565b9050836119b581613d88565b825180516020918201208185015160408087015160608801519151959a50929550600094611a22948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8916600090815260069093529120549091508114611aab576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8616600090815260066020526040812055611ad0600188613a89565b8403611b3f5742600760109054906101000a900467ffffffffffffffff168460400151611afd9190613c5e565b67ffffffffffffffff161115611b3f576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611be990613daf565b915050611972565b50611c677f000000000000000000000000000000000000000000000000000000000000000084611c1f6107c2565b611c299190613de7565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190612fea565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e7300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611d39908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303816000875af1158015611d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7c9190613aa2565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a490600090a250505050505050565b6060600085858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa600087604051602401611df196959493929190613dfe565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff7000000000000000000000000000000000000000000000000000000001790528351909150606090600003611f425760f9601f8351611e869190613e61565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e487604051602001611f2c9796959493929190613e7c565b6040516020818303038152906040529050612046565b815161ffff1015611f7f576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9611f8e602083613e61565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525085886040516020016120339796959493929190613f5f565b6040516020818303038152906040529150505b805160208083019190912060408051600080825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa1580156120a7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661211f576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516000906121659084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001614042565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146121f9576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c32565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146122c3576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60036122cf8282613b05565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c329190613412565b60085473ffffffffffffffffffffffffffffffffffffffff16801580159061233d575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612374576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240391906139b6565b1561243a576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cb91906138b8565b905082811115612507576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388841115612543576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61258573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846130c3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261691906138b8565b6007805491925067ffffffffffffffff90911690600061263583613d88565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050858560405161266c92919061409e565b6040519081900390208142612682600143613a89565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff166000908152600690935291205532330361277a57600754604080518381523360208201526060818301819052600090820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a26127c9565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931906127c090849033908b908b906140ae565b60405180910390a25b505050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314612822576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600081900361285e576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e881111561289a576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561290257600080fd5b505af1158015612916573d6000803e3d6000fd5b5050505060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ab91906138b8565b60075460055491925042916801000000000000000090910467ffffffffffffffff16908160005b86811015612cd45760008a8a838181106129ee576129ee613c92565b9050602002810190612a009190613cc1565b612a0990613cff565b8051805160209091012060408201519192509067ffffffffffffffff1615612bee5785612a3581613d88565b965050600081836020015184604001518560600151604051602001612a989493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a16600090815260069093529120549091508114612b21576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908d901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc01604051602081830303815290604052805190602001209550600660008867ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206000905550612cbf565b8151516201d4c01015612c2d576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020810187905290810182905260608082018a905260c089901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528b901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201526000609c82015260bc016040516020818303038152906040528051906020012094505b50508080612ccc90613daf565b9150506129d2565b5060075467ffffffffffffffff9081169084161115612d1f576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558567ffffffffffffffff84811690831614612dd5576000612d458386613900565b9050612d5b67ffffffffffffffff821683613a89565b9150612d947f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611c1f6107c2565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b612ed3337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8a91906138b8565b612e949190613de7565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169291906130c3565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff88166004820152602481018490526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303816000875af1158015612f73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f979190613aa2565b90508067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76688604051612fd591815260200190565b60405180910390a25050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526130be9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613127565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526131219085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161303c565b50505050565b6000613189826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166132339092919063ffffffff16565b8051909150156130be57808060200190518101906131a791906139b6565b6130be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e45565b606061219a8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613267919061411f565b60006040518083038185875af1925050503d80600081146132a4576040519150601f19603f3d011682016040523d82523d6000602084013e6132a9565b606091505b50915091506132ba878383876132c5565b979650505050505050565b6060831561335b5782516000036133545773ffffffffffffffffffffffffffffffffffffffff85163b613354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e45565b508161219a565b61219a83838151156133705781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e459190613412565b60005b838110156133bf5781810151838201526020016133a7565b50506000910152565b600081518084526133e08160208601602086016133a4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061342560208301846133c8565b9392505050565b67ffffffffffffffff8116811461344257600080fd5b50565b73ffffffffffffffffffffffffffffffffffffffff8116811461344257600080fd5b60008060006060848603121561347c57600080fd5b83356134878161342c565b925060208401359150604084013561349e81613445565b809150509250925092565b6000602082840312156134bb57600080fd5b81356134258161342c565b6000602082840312156134d857600080fd5b813561342581613445565b63ffffffff8116811461344257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561356b5761356b6134f5565b604052919050565b600067ffffffffffffffff82111561358d5761358d6134f5565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126135ca57600080fd5b81356135dd6135d882613573565b613524565b8181528460208386010111156135f257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561362857600080fd5b863561363381613445565b9550602087013561364381613445565b94506040870135613653816134e3565b9350606087013561366381613445565b9250608087013567ffffffffffffffff8082111561368057600080fd5b61368c8a838b016135b9565b935060a08901359150808211156136a257600080fd5b506136af89828a016135b9565b9150509295509295509295565b60008083601f8401126136ce57600080fd5b50813567ffffffffffffffff8111156136e657600080fd5b6020830191508360208260051b850101111561370157600080fd5b9250929050565b6000806020838503121561371b57600080fd5b823567ffffffffffffffff81111561373257600080fd5b61373e858286016136bc565b90969095509350505050565b6000806000806080858703121561376057600080fd5b843561376b816134e3565b9350602085013561377b81613445565b9250604085013561378b816134e3565b9150606085013567ffffffffffffffff8111156137a757600080fd5b6137b3878288016135b9565b91505092959194509250565b6000602082840312156137d157600080fd5b813567ffffffffffffffff8111156137e857600080fd5b61219a848285016135b9565b60008060006040848603121561380957600080fd5b833567ffffffffffffffff8082111561382157600080fd5b818601915086601f83011261383557600080fd5b81358181111561384457600080fd5b87602082850101111561385657600080fd5b6020928301989097509590910135949350505050565b60008060006040848603121561388157600080fd5b833567ffffffffffffffff81111561389857600080fd5b6138a4868287016136bc565b909450925050602084013561349e81613445565b6000602082840312156138ca57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff828116828216039080821115613921576139216138d1565b5092915050565b60008261395e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181811c9082168061397757607f821691505b6020821081036139b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156139c857600080fd5b8151801515811461342557600080fd5b6000602082840312156139ea57600080fd5b815167ffffffffffffffff811115613a0157600080fd5b8201601f81018413613a1257600080fd5b8051613a206135d882613573565b818152856020838501011115613a3557600080fd5b613a468260208301602086016133a4565b95945050505050565b60008060408385031215613a6257600080fd5b8251613a6d816134e3565b6020840151909250613a7e81613445565b809150509250929050565b81810381811115613a9c57613a9c6138d1565b92915050565b600060208284031215613ab457600080fd5b81516134258161342c565b601f8211156130be57600081815260208120601f850160051c81016020861015613ae65750805b601f850160051c820191505b818110156127c957828155600101613af2565b815167ffffffffffffffff811115613b1f57613b1f6134f5565b613b3381613b2d8454613963565b84613abf565b602080601f831160018114613b865760008415613b505750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556127c9565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613bd357888601518255948401946001909101908401613bb4565b5085821015613c0f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b606081526000613c3260608301866133c8565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff818116838216019080821115613921576139216138d1565b80820180821115613a9c57613a9c6138d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613cf557600080fd5b9190910192915050565b600060808236031215613d1157600080fd5b6040516080810167ffffffffffffffff8282108183111715613d3557613d356134f5565b816040528435915080821115613d4a57600080fd5b50613d57368286016135b9565b825250602083013560208201526040830135613d728161342c565b6040820152606092830135928101929092525090565b600067ffffffffffffffff808316818103613da557613da56138d1565b6001019392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613de057613de06138d1565b5060010190565b8082028115828204841417613a9c57613a9c6138d1565b600063ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a0830152613e5560c08301846133c8565b98975050505050505050565b61ffff818116838216019080821115613921576139216138d1565b60007fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751613ee5816003860160208c016133a4565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613f28816017840160208b016133a4565b808201915050818660f81b16601782015284519150613f4e8260188301602088016133a4565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b16815260007fffff000000000000000000000000000000000000000000000000000000000000808960f01b1660018401528751613fc8816003860160208c016133a4565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b166003820152865161400b816017840160208b016133a4565b808201915050818660f01b166017820152845191506140318260198301602088016133a4565b016019019998505050505050505050565b60008651614054818460208b016133a4565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b8183823760009101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152816060820152818360808301376000818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b60008251613cf58184602087016133a456fea2646970667358221220b83cf462f5e2deeda86880802b5e0767265a7d1b8968b2dc290f0400eb63fa2364736f6c63430008140033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102dd5760003560e01c80637a5460c511610186578063c7fffd4b116100e3578063e46761c411610097578063ecef3f9911610071578063ecef3f9914610781578063f35dda4714610794578063f851a4401461079c57600080fd5b8063e46761c414610733578063e7a7ed021461075a578063eaeb077b1461076e57600080fd5b8063cfa8ed47116100c8578063cfa8ed47146106e1578063d02103ca14610701578063d7bc90ff1461072857600080fd5b8063c7fffd4b146106c6578063c89e42df146106ce57600080fd5b8063a3c573eb1161013a578063ada8f9191161011f578063ada8f9191461067f578063b0afe15414610692578063c754c7ed1461069e57600080fd5b8063a3c573eb14610645578063a652f26c1461066c57600080fd5b806391cafe321161016b57806391cafe32146106045780639e001877146106175780639f26f8401461063257600080fd5b80637a5460c5146105c05780638c3d7301146105fc57600080fd5b806340b5de6c1161023f578063542028d5116101f35780636e05d2cd116101cd5780636e05d2cd146105915780636ff512cc1461059a57806371257022146105ad57600080fd5b8063542028d514610561578063676870d2146105695780636b8616ce1461057157600080fd5b806349b7b8021161022457806349b7b802146104eb5780634e4877061461051257806352bdeb6d1461052557600080fd5b806340b5de6c1461045a57806345605267146104b257600080fd5b8063267822471161029657806332c2d1531161027b57806332c2d153146103e85780633c351e10146103fd5780633cbc795b1461041d57600080fd5b806326782247146103835780632c111c06146103c857600080fd5b806305835f37116102c757806305835f3714610318578063107bf28c1461036157806311e892d41461036957600080fd5b8062d0295d146102e257806303508963146102fd575b600080fd5b6102ea6107c2565b6040519081526020015b60405180910390f35b610305602081565b60405161ffff90911681526020016102f4565b6103546040518060400160405280600881526020017f80808401c9c3809400000000000000000000000000000000000000000000000081525081565b6040516102f49190613412565b6103546108ce565b61037160f981565b60405160ff90911681526020016102f4565b6001546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102f4565b6008546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b6103fb6103f6366004613467565b61095c565b005b6009546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b6009546104459074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102f4565b6104817fff0000000000000000000000000000000000000000000000000000000000000081565b6040517fff0000000000000000000000000000000000000000000000000000000000000090911681526020016102f4565b6007546104d29068010000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016102f4565b6103a37f000000000000000000000000000000000000000000000000000000000000000081565b6103fb6105203660046134a9565b610a2b565b6103546040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525081565b610354610c3d565b610305601f81565b6102ea61057f3660046134a9565b60066020526000908152604090205481565b6102ea60055481565b6103fb6105a83660046134c6565b610c4a565b6103fb6105bb36600461360f565b610d14565b6103546040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525081565b6103fb611538565b6103fb6106123660046134c6565b61160b565b6103a373a40d5f56745a118d0906a34e69aec8c0db1cb8fa81565b6103fb610640366004613708565b611724565b6103a37f000000000000000000000000000000000000000000000000000000000000000081565b61035461067a36600461374a565b611dbd565b6103fb61068d3660046134c6565b6121a2565b6102ea6405ca1ab1e081565b6007546104d290700100000000000000000000000000000000900467ffffffffffffffff1681565b61037160e481565b6103fb6106dc3660046137bf565b61226c565b6002546103a39073ffffffffffffffffffffffffffffffffffffffff1681565b6103a37f000000000000000000000000000000000000000000000000000000000000000081565b6102ea635ca1ab1e81565b6103a37f000000000000000000000000000000000000000000000000000000000000000081565b6007546104d29067ffffffffffffffff1681565b6103fb61077c3660046137f4565b6122ff565b6103fb61078f36600461386c565b6127d1565b610371601b81565b6000546103a39062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600090819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610851573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087591906138b8565b6007549091506000906108a09067ffffffffffffffff68010000000000000000820481169116613900565b67ffffffffffffffff169050806000036108bd5760009250505090565b6108c78183613928565b9250505090565b600480546108db90613963565b80601f016020809104026020016040519081016040528092919081815260200182805461090790613963565b80156109545780601f1061092957610100808354040283529160200191610954565b820191906000526020600020905b81548152906001019060200180831161093757829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146109cb576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168367ffffffffffffffff167f9c72852172521097ba7e1482e6b44b351323df0155f97f4ea18fcec28e1f596684604051610a1e91815260200190565b60405180910390a3505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610a82576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8067ffffffffffffffff82161115610ac9576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5891906139b6565b610bb95760075467ffffffffffffffff700100000000000000000000000000000000909104811690821610610bb9576040517ff5e37f2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1670010000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040519081527fa7eb6cb8a613eb4e8bddc1ac3d61ec6cf10898760f0b187bcca794c6ca6fa40b906020015b60405180910390a150565b600380546108db90613963565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314610ca1576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff54144f9611984021529f814a1cb6a41e22c58351510a0d9f7e822618abb9cc090602001610c32565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610d83576040517fb9b3a2c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1615808015610da35750600054600160ff909116105b80610dbd5750303b158015610dbd575060005460ff166001145b610e4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610eac57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b606073ffffffffffffffffffffffffffffffffffffffff851615611111576040517fc00f14ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c00f14ab90602401600060405180830381865afa158015610f56573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f9c91908101906139d8565b6040517f318aee3d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015291925060009182917f00000000000000000000000000000000000000000000000000000000000000009091169063318aee3d906024016040805180830381865afa158015611031573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110559190613a4f565b915091508163ffffffff166000146110cd576009805463ffffffff841674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff84161717905561110e565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89161790555b50505b60095460009061115990889073ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900463ffffffff1685611dbd565b9050600081805190602001209050600042905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fd91906138b8565b90506000808483858f611211600143613a89565b60408051602081019790975286019490945260608086019390935260c09190911b7fffffffffffffffff000000000000000000000000000000000000000000000000166080850152901b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016608883015240609c82015260bc01604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815290829052805160209091012060058190557f9a908e73000000000000000000000000000000000000000000000000000000008252600160048301526024820181905291507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303816000875af115801561135a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137e9190613aa2565b508c600060026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600390816114109190613b05565b50600461141d8982613b05565b508c600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062069780600760106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f060116213bcbf54ca19fd649dc84b59ab2bbd200ab199770e4d923e222a28e7f85838e6040516114be93929190613c1f565b60405180910390a1505050505050801561152f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611589576040517fd1ec4b2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600080547fffffffffffffffffffff0000000000000000000000000000000000000000ffff1673ffffffffffffffffffffffffffffffffffffffff9092166201000081029290921790556040519081527f056dc487bbf0795d0bbb1b4f0af523a855503cff740bfb4d5475f7a90c091e8e9060200160405180910390a1565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163314611662576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff166116b1576040517fc89374d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f5fbd7dd171301c4a1611a84aac4ba86d119478560557755f7927595b082634fb90602001610c32565b60085473ffffffffffffffffffffffffffffffffffffffff168015801590611762575073ffffffffffffffffffffffffffffffffffffffff81163314155b15611799576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4262093a807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166330c27dde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611809573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182d9190613aa2565b6118379190613c5e565b67ffffffffffffffff161115611879576040517f3d49ed4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160008190036118b5576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e88111156118f1576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075467ffffffffffffffff8082169161191991849168010000000000000000900416613c7f565b1115611951576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546005546801000000000000000090910467ffffffffffffffff169060005b83811015611bf157600087878381811061198e5761198e613c92565b90506020028101906119a09190613cc1565b6119a990613cff565b9050836119b581613d88565b825180516020918201208185015160408087015160608801519151959a50929550600094611a22948794929101938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8916600090815260069093529120549091508114611aab576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8616600090815260066020526040812055611ad0600188613a89565b8403611b3f5742600760109054906101000a900467ffffffffffffffff168460400151611afd9190613c5e565b67ffffffffffffffff161115611b3f576040517fc44a082100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018b90529285018790528481019390935260c01b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808401523390911b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc016040516020818303038152906040528051906020012094505050508080611be990613daf565b915050611972565b50611c677f000000000000000000000000000000000000000000000000000000000000000084611c1f6107c2565b611c299190613de7565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169190612fea565b60058190556007805467ffffffffffffffff841668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790556040517f9a908e7300000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690639a908e7390611d39908790869060040167ffffffffffffffff929092168252602082015260400190565b6020604051808303816000875af1158015611d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7c9190613aa2565b60405190915067ffffffffffffffff8216907f648a61dd2438f072f5a1960939abd30f37aea80d2e94c9792ad142d3e0a490a490600090a250505050505050565b6060600085858573a40d5f56745a118d0906a34e69aec8c0db1cb8fa600087604051602401611df196959493929190613dfe565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff811bff7000000000000000000000000000000000000000000000000000000001790528351909150606090600003611f425760f9601f8351611e869190613e61565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b800000000000000000000000000000000000000000000000000000000000081525060e487604051602001611f2c9796959493929190613e7c565b6040516020818303038152906040529050612046565b815161ffff1015611f7f576040517f248b8f8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160f9611f8e602083613e61565b6040518060400160405280600881526020017f80808401c9c380940000000000000000000000000000000000000000000000008152507f00000000000000000000000000000000000000000000000000000000000000006040518060400160405280600281526020017f80b900000000000000000000000000000000000000000000000000000000000081525085886040516020016120339796959493929190613f5f565b6040516020818303038152906040529150505b805160208083019190912060408051600080825293810180835292909252601b908201526405ca1ab1e06060820152635ca1ab1e608082015260019060a0016020604051602081039080840390855afa1580156120a7573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661211f576040517fcd16196600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516000906121659084906405ca1ab1e090635ca1ab1e90601b907fff0000000000000000000000000000000000000000000000000000000000000090602001614042565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529450505050505b949350505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146121f9576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa5b56b7906fd0a20e3f35120dd8343db1e12e037a6c90111c7e42885e82a1ce690602001610c32565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633146122c3576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60036122cf8282613b05565b507f6b8f723a4c7a5335cafae8a598a0aa0301be1387c037dccc085b62add6448b2081604051610c329190613412565b60085473ffffffffffffffffffffffffffffffffffffffff16801580159061233d575073ffffffffffffffffffffffffffffffffffffffff81163314155b15612374576040517f24eff8c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166315064c966040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240391906139b6565b1561243a576040517f39258d1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663604691696040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cb91906138b8565b905082811115612507576040517f2354600f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611388841115612543576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61258573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163330846130c3565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633ed691ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261691906138b8565b6007805491925067ffffffffffffffff90911690600061263583613d88565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050858560405161266c92919061409e565b6040519081900390208142612682600143613a89565b60408051602081019590955284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166060830152406068820152608801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012060075467ffffffffffffffff166000908152600690935291205532330361277a57600754604080518381523360208201526060818301819052600090820152905167ffffffffffffffff909216917ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc9319181900360800190a26127c9565b60075460405167ffffffffffffffff909116907ff94bb37db835f1ab585ee00041849a09b12cd081d77fa15ca070757619cbc931906127c090849033908b908b906140ae565b60405180910390a25b505050505050565b60025473ffffffffffffffffffffffffffffffffffffffff163314612822576040517f11e7be1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600081900361285e576040517fcb591a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e881111561289a576040517fb59f753a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166379e2cf976040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561290257600080fd5b505af1158015612916573d6000803e3d6000fd5b5050505060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ca1e1656040518163ffffffff1660e01b8152600401602060405180830381865afa158015612987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ab91906138b8565b60075460055491925042916801000000000000000090910467ffffffffffffffff16908160005b86811015612cd45760008a8a838181106129ee576129ee613c92565b9050602002810190612a009190613cc1565b612a0990613cff565b8051805160209091012060408201519192509067ffffffffffffffff1615612bee5785612a3581613d88565b965050600081836020015184604001518560600151604051602001612a989493929190938452602084019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166040830152604882015260680190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012067ffffffffffffffff8a16600090815260069093529120549091508114612b21576040517fce3d755e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208381015160408086015160608088015183519586018c90529285018790528481019390935260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166080840152908d901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166088830152609c82015260bc01604051602081830303815290604052805190602001209550600660008867ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000206000905550612cbf565b8151516201d4c01015612c2d576040517fa29a6c7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020810187905290810182905260608082018a905260c089901b7fffffffffffffffff0000000000000000000000000000000000000000000000001660808301528b901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660888201526000609c82015260bc016040516020818303038152906040528051906020012094505b50508080612ccc90613daf565b9150506129d2565b5060075467ffffffffffffffff9081169084161115612d1f576040517fc630a00d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058290558567ffffffffffffffff84811690831614612dd5576000612d458386613900565b9050612d5b67ffffffffffffffff821683613a89565b9150612d947f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611c1f6107c2565b50600780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000067ffffffffffffffff8716021790555b612ed3337f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663477fa2706040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8a91906138b8565b612e949190613de7565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169291906130c3565b6040517f9a908e7300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff88166004820152602481018490526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639a908e73906044016020604051808303816000875af1158015612f73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f979190613aa2565b90508067ffffffffffffffff167f3e54d0825ed78523037d00a81759237eb436ce774bd546993ee67a1b67b6e76688604051612fd591815260200190565b60405180910390a25050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526130be9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613127565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526131219085907f23b872dd000000000000000000000000000000000000000000000000000000009060840161303c565b50505050565b6000613189826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166132339092919063ffffffff16565b8051909150156130be57808060200190518101906131a791906139b6565b6130be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e45565b606061219a8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051613267919061411f565b60006040518083038185875af1925050503d80600081146132a4576040519150601f19603f3d011682016040523d82523d6000602084013e6132a9565b606091505b50915091506132ba878383876132c5565b979650505050505050565b6060831561335b5782516000036133545773ffffffffffffffffffffffffffffffffffffffff85163b613354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e45565b508161219a565b61219a83838151156133705781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e459190613412565b60005b838110156133bf5781810151838201526020016133a7565b50506000910152565b600081518084526133e08160208601602086016133a4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061342560208301846133c8565b9392505050565b67ffffffffffffffff8116811461344257600080fd5b50565b73ffffffffffffffffffffffffffffffffffffffff8116811461344257600080fd5b60008060006060848603121561347c57600080fd5b83356134878161342c565b925060208401359150604084013561349e81613445565b809150509250925092565b6000602082840312156134bb57600080fd5b81356134258161342c565b6000602082840312156134d857600080fd5b813561342581613445565b63ffffffff8116811461344257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561356b5761356b6134f5565b604052919050565b600067ffffffffffffffff82111561358d5761358d6134f5565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126135ca57600080fd5b81356135dd6135d882613573565b613524565b8181528460208386010111156135f257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561362857600080fd5b863561363381613445565b9550602087013561364381613445565b94506040870135613653816134e3565b9350606087013561366381613445565b9250608087013567ffffffffffffffff8082111561368057600080fd5b61368c8a838b016135b9565b935060a08901359150808211156136a257600080fd5b506136af89828a016135b9565b9150509295509295509295565b60008083601f8401126136ce57600080fd5b50813567ffffffffffffffff8111156136e657600080fd5b6020830191508360208260051b850101111561370157600080fd5b9250929050565b6000806020838503121561371b57600080fd5b823567ffffffffffffffff81111561373257600080fd5b61373e858286016136bc565b90969095509350505050565b6000806000806080858703121561376057600080fd5b843561376b816134e3565b9350602085013561377b81613445565b9250604085013561378b816134e3565b9150606085013567ffffffffffffffff8111156137a757600080fd5b6137b3878288016135b9565b91505092959194509250565b6000602082840312156137d157600080fd5b813567ffffffffffffffff8111156137e857600080fd5b61219a848285016135b9565b60008060006040848603121561380957600080fd5b833567ffffffffffffffff8082111561382157600080fd5b818601915086601f83011261383557600080fd5b81358181111561384457600080fd5b87602082850101111561385657600080fd5b6020928301989097509590910135949350505050565b60008060006040848603121561388157600080fd5b833567ffffffffffffffff81111561389857600080fd5b6138a4868287016136bc565b909450925050602084013561349e81613445565b6000602082840312156138ca57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff828116828216039080821115613921576139216138d1565b5092915050565b60008261395e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600181811c9082168061397757607f821691505b6020821081036139b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156139c857600080fd5b8151801515811461342557600080fd5b6000602082840312156139ea57600080fd5b815167ffffffffffffffff811115613a0157600080fd5b8201601f81018413613a1257600080fd5b8051613a206135d882613573565b818152856020838501011115613a3557600080fd5b613a468260208301602086016133a4565b95945050505050565b60008060408385031215613a6257600080fd5b8251613a6d816134e3565b6020840151909250613a7e81613445565b809150509250929050565b81810381811115613a9c57613a9c6138d1565b92915050565b600060208284031215613ab457600080fd5b81516134258161342c565b601f8211156130be57600081815260208120601f850160051c81016020861015613ae65750805b601f850160051c820191505b818110156127c957828155600101613af2565b815167ffffffffffffffff811115613b1f57613b1f6134f5565b613b3381613b2d8454613963565b84613abf565b602080601f831160018114613b865760008415613b505750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556127c9565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613bd357888601518255948401946001909101908401613bb4565b5085821015613c0f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b606081526000613c3260608301866133c8565b905083602083015273ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b67ffffffffffffffff818116838216019080821115613921576139216138d1565b80820180821115613a9c57613a9c6138d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112613cf557600080fd5b9190910192915050565b600060808236031215613d1157600080fd5b6040516080810167ffffffffffffffff8282108183111715613d3557613d356134f5565b816040528435915080821115613d4a57600080fd5b50613d57368286016135b9565b825250602083013560208201526040830135613d728161342c565b6040820152606092830135928101929092525090565b600067ffffffffffffffff808316818103613da557613da56138d1565b6001019392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613de057613de06138d1565b5060010190565b8082028115828204841417613a9c57613a9c6138d1565b600063ffffffff808916835273ffffffffffffffffffffffffffffffffffffffff8089166020850152818816604085015280871660608501528086166080850152505060c060a0830152613e5560c08301846133c8565b98975050505050505050565b61ffff818116838216019080821115613921576139216138d1565b60007fff00000000000000000000000000000000000000000000000000000000000000808a60f81b1683527fffff0000000000000000000000000000000000000000000000000000000000008960f01b1660018401528751613ee5816003860160208c016133a4565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1660038201528651613f28816017840160208b016133a4565b808201915050818660f81b16601782015284519150613f4e8260188301602088016133a4565b016018019998505050505050505050565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b16815260007fffff000000000000000000000000000000000000000000000000000000000000808960f01b1660018401528751613fc8816003860160208c016133a4565b80840190507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b166003820152865161400b816017840160208b016133a4565b808201915050818660f01b166017820152845191506140318260198301602088016133a4565b016019019998505050505050505050565b60008651614054818460208b016133a4565b9190910194855250602084019290925260f81b7fff000000000000000000000000000000000000000000000000000000000000009081166040840152166041820152604201919050565b8183823760009101908152919050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152816060820152818360808301376000818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b60008251613cf58184602087016133a456fea2646970667358221220b83cf462f5e2deeda86880802b5e0767265a7d1b8968b2dc290f0400eb63fa2364736f6c63430008140033",
"linkReferences": {},
"deployedLinkReferences": {}
}