@le7el/rewards_engine
Version:
Smart contracts that distribute reward tokens according to conditional oracle or a merkle root
468 lines • 52.8 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "OneTimeOffchainTickets",
"sourceName": "contracts/condition_oracles/OneTimeOffchainTickets.sol",
"abi": [
{
"inputs": [
{
"internalType": "bytes4",
"name": "_claimInterface",
"type": "bytes4"
},
{
"internalType": "address",
"name": "_rewardToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "_rewardTokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_defaultConsumer",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": false,
"internalType": "bytes",
"name": "claim",
"type": "bytes"
}
],
"name": "ConsumedClaim",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "consumer",
"type": "address"
}
],
"name": "ConsumerAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "consumer",
"type": "address"
}
],
"name": "ConsumerRemoved",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newValidator",
"type": "address"
}
],
"name": "NewValidator",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bytes4",
"name": "claimInterface",
"type": "bytes4"
},
{
"indexed": true,
"internalType": "address",
"name": "rewardToken",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "rewardTokenId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "integrityHash",
"type": "bytes32"
}
],
"name": "SettingsChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "ticket",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "uint32",
"name": "nonce",
"type": "uint32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "totalClaimedAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "UsedTicket",
"type": "event"
},
{
"inputs": [],
"name": "DOMAIN_SEPARATOR",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "_claimInterface",
"type": "bytes4"
},
{
"internalType": "address",
"name": "_rewardToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "_rewardTokenId",
"type": "uint256"
}
],
"name": "adminChangeSettings",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newValidator",
"type": "address"
}
],
"name": "adminChangeValidator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_consumer",
"type": "address"
},
{
"internalType": "bool",
"name": "_allow",
"type": "bool"
}
],
"name": "adminSwitchConsumer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "canConsumeClaims",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_account",
"type": "address"
}
],
"name": "claimedAmount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_account",
"type": "address"
},
{
"internalType": "bytes",
"name": "_claim",
"type": "bytes"
}
],
"name": "consumeClaim",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getDomainSeparator",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_account",
"type": "address"
},
{
"internalType": "bytes",
"name": "_claim",
"type": "bytes"
}
],
"name": "hasClaim",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "integrityHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_user",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_claimedAmount",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "_nonce",
"type": "uint32"
},
{
"internalType": "bytes",
"name": "_callData",
"type": "bytes"
}
],
"name": "isAllowed",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_account",
"type": "address"
}
],
"name": "nextNonce",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "validator",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60a06040523480156200001157600080fd5b5060405162002f3538038062002f358339818101604052810190620000379190620007c3565b620000576200004b6200028360201b60201c565b6200028b60201b60201c565b6200006a8484846200034f60201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146200013b576001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f28b26e7a3d20aedbc5f8f2ebf7da671c0491723a2b78f47a097b0e46dee0714260405160405180910390a25b60004690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f3e97999068f7f0252b643dd96edf0b77d85465e7eb04deae4ddca28e2aed38b87f0984d5efd47d99151ae1be065a709e56c602102f24c1abc4008eb3f815a8d2178330604051602001620001bb95949392919062000872565b6040516020818303038152906040528051906020012060808181525050620001e86200054160201b60201c565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167f5dc8fe6c03695c172a921c8f8fa2fddfb0aa130603797700d865d07baf129eef33604051620002709190620008cf565b60405180910390a2505050505062000aa0565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b63ffffffff60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480620003e757506340c10f1960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8062000437575063731133e960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806200046f57506200046e838373ffffffffffffffffffffffffffffffffffffffff166200056a60201b62000d421790919060201c565b5b620004b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a89062000973565b60405180910390fd5b6000828285604051602001620004ca9392919062000a2f565b6040516020818303038152906040528051906020012090508060018190555080828473ffffffffffffffffffffffffffffffffffffffff167f5157785fd6fe43b0ec091c749d339b04dbcfb552938b8c019a63f1af607893ec8760405162000533919062000a83565b60405180910390a450505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006200057d83620005a060201b60201c565b8015620005985750620005978383620005fe60201b60201c565b5b905092915050565b6000620005d4827f01ffc9a700000000000000000000000000000000000000000000000000000000620005fe60201b60201c565b8015620005f75750620005f58263ffffffff60e01b620005fe60201b60201c565b155b9050919050565b6000806301ffc9a760e01b836040516024016200061c919062000a83565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806000602060008551602087018a617530fa92503d91506000519050828015620006a8575060208210155b8015620006b55750600081115b94505050505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b620006fd81620006c6565b81146200070957600080fd5b50565b6000815190506200071d81620006f2565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007508262000723565b9050919050565b620007628162000743565b81146200076e57600080fd5b50565b600081519050620007828162000757565b92915050565b6000819050919050565b6200079d8162000788565b8114620007a957600080fd5b50565b600081519050620007bd8162000792565b92915050565b60008060008060808587031215620007e057620007df620006c1565b5b6000620007f0878288016200070c565b9450506020620008038782880162000771565b93505060406200081687828801620007ac565b9250506060620008298782880162000771565b91505092959194509250565b6000819050919050565b6200084a8162000835565b82525050565b6200085b8162000788565b82525050565b6200086c8162000743565b82525050565b600060a0820190506200088960008301886200083f565b6200089860208301876200083f565b620008a760408301866200083f565b620008b6606083018562000850565b620008c5608083018462000861565b9695505050505050565b6000602082019050620008e6600083018462000861565b92915050565b600082825260208201905092915050565b7f436f6e646974696f6e616c4469737472696275746f723a20496e76616c69642060008201527f696e746572666163650000000000000000000000000000000000000000000000602082015250565b60006200095b602983620008ec565b91506200096882620008fd565b604082019050919050565b600060208201905081810360008301526200098e816200094c565b9050919050565b60008160601b9050919050565b6000620009af8262000995565b9050919050565b6000620009c382620009a2565b9050919050565b620009df620009d98262000743565b620009b6565b82525050565b6000819050919050565b62000a04620009fe8262000788565b620009e5565b82525050565b6000819050919050565b62000a2962000a2382620006c6565b62000a0a565b82525050565b600062000a3d8286620009ca565b60148201915062000a4f8285620009ef565b60208201915062000a61828462000a14565b600482019150819050949350505050565b62000a7d81620006c6565b82525050565b600060208201905062000a9a600083018462000a72565b92915050565b60805161246b62000aca600039600081816103eb015281816104990152610c9b015261246b6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063a088dd6111610097578063d71a85cd11610066578063d71a85cd146102af578063e00f9613146102cb578063ed24911d146102fb578063f2fde38b1461031957610100565b8063a088dd6114610229578063c9bf6daa14610247578063cb7f014114610263578063d120469e1461027f57610100565b80636afdb9b4116100d35780636afdb9b4146101a1578063715018a6146101d1578063834943e8146101db5780638da5cb5b1461020b57610100565b806304e86903146101055780630cd55abf146101355780633644e515146101655780633a5381b514610183575b600080fd5b61011f600480360381019061011a91906114b3565b610335565b60405161012c91906114f9565b60405180910390f35b61014f600480360381019061014a91906114b3565b610381565b60405161015c9190611533565b60405180910390f35b61016d6103e9565b60405161017a9190611567565b60405180910390f35b61018b61040d565b6040516101989190611591565b60405180910390f35b6101bb60048036038101906101b691906114b3565b610433565b6040516101c891906115c7565b60405180910390f35b6101d9610453565b005b6101f560048036038101906101f09190611780565b610467565b6040516102029190611852565b60405180910390f35b6102136104f0565b6040516102209190611591565b60405180910390f35b610231610519565b60405161023e9190611567565b60405180910390f35b610261600480360381019061025c91906114b3565b61051f565b005b61027d60048036038101906102789190611899565b6105b9565b005b61029960048036038101906102949190611939565b610707565b6040516102a691906114f9565b60405180910390f35b6102c960048036038101906102c491906119c5565b610b30565b005b6102e560048036038101906102e09190611939565b610b48565b6040516102f291906115c7565b60405180910390f35b610303610c97565b6040516103109190611567565b60405180910390f35b610333600480360381019061032e91906114b3565b610cbf565b005b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60006001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900463ffffffff166103e29190611a47565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915054906101000a900460ff1681565b61045b610d67565b6104656000610de5565b565b60006104e5600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1663834943e860e01b7f0000000000000000000000000000000000000000000000000000000000000000898989896040516020016104d0959493929190611a7f565b60405160208183030381529060405285610ea9565b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60015481565b610527610d67565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f5dc8fe6c03695c172a921c8f8fa2fddfb0aa130603797700d865d07baf129eef336040516105ae9190611591565b60405180910390a250565b6105c1610d67565b8015610667576001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f28b26e7a3d20aedbc5f8f2ebf7da671c0491723a2b78f47a097b0e46dee0714260405160405180910390a2610703565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fe3f5ed5f263f1f01764a96edfc7d025f511ec5f7d180e8816908b78bcf74f09860405160405180910390a25b5050565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078c90611b2f565b60405180910390fd5b60006107a18484610fa9565b9050806000015173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080c90611b9b565b60405180910390fd5b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900463ffffffff1663ffffffff16816060015163ffffffff16116108b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b090611c07565b60405180910390fd5b6000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600082602001511180156109175750808260400151145b610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90611c73565b60405180910390fd5b61095f82611089565b61099e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099590611cdf565b60405180910390fd5b60008260a001518051906020012090508260600151600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548163ffffffff021916908363ffffffff1602179055506000836020015183610a259190611cff565b905080600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508773ffffffffffffffffffffffffffffffffffffffff167fd99dccc570c01ecb4da5de9a05d71a0bca8c76d6f18502d46f9c7f11219eba8d8888604051610ab6929190611d71565b60405180910390a2836060015163ffffffff16828973ffffffffffffffffffffffffffffffffffffffff167fe391d62f8cdfcafcbc439b2ad825f65c039c0ca1cc9325ff495d10258f28c620848860200151604051610b16929190611d95565b60405180910390a483602001519450505050509392505050565b610b38610d67565b610b438383836110fa565b505050565b600080610b558484610fa9565b9050806000015173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610b98576000915050610c90565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900463ffffffff1663ffffffff16816060015163ffffffff1611610c0b576000915050610c90565b610c1481611089565b610c22576000915050610c90565b60008160200151118015610c7b5750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548160400151145b15610c8a576001915050610c90565b60009150505b9392505050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b610cc7610d67565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90611e30565b60405180910390fd5b610d3f81610de5565b50565b6000610d4d836112db565b8015610d5f5750610d5e8383611328565b5b905092915050565b610d6f6113e7565b73ffffffffffffffffffffffffffffffffffffffff16610d8d6104f0565b73ffffffffffffffffffffffffffffffffffffffff1614610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90611e9c565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060008084806020019051810190610ec39190611f21565b8093508194508295505050506000868051906020012090506000600182604051602001610ef09190611fec565b6040516020818303038152906040528051906020012086868660405160008152602001604052604051610f269493929190612021565b6020604051602081039080840390855afa158015610f48573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1603610f94578895505050505050610fa1565b600060e01b955050505050505b949350505050565b610fb16113ef565b6000808484810190610fc3919061207b565b91509150600154821461100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290612123565b60405180910390fd5b6000806000806000858060200190518101906110279190612245565b945094509450945094506040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018363ffffffff1681526020018281526020018781525097505050505050505092915050565b600063834943e860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166110d383600001518460200151856040015186606001518760800151610467565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b63ffffffff60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061119157506340c10f1960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806111e0575063731133e960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611210575061120f838373ffffffffffffffffffffffffffffffffffffffff16610d4290919063ffffffff16565b5b61124f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112469061234e565b60405180910390fd5b6000828285604051602001611266939291906123f8565b6040516020818303038152906040528051906020012090508060018190555080828473ffffffffffffffffffffffffffffffffffffffff167f5157785fd6fe43b0ec091c749d339b04dbcfb552938b8c019a63f1af607893ec876040516112cd9190611852565b60405180910390a450505050565b6000611307827f01ffc9a700000000000000000000000000000000000000000000000000000000611328565b8015611321575061131f8263ffffffff60e01b611328565b155b9050919050565b6000806301ffc9a760e01b836040516024016113449190611852565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806000602060008551602087018a617530fa92503d915060005190508280156113cf575060208210155b80156113db5750600081115b94505050505092915050565b600033905090565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600063ffffffff16815260200160608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061148082611455565b9050919050565b61149081611475565b811461149b57600080fd5b50565b6000813590506114ad81611487565b92915050565b6000602082840312156114c9576114c861144b565b5b60006114d78482850161149e565b91505092915050565b6000819050919050565b6114f3816114e0565b82525050565b600060208201905061150e60008301846114ea565b92915050565b600063ffffffff82169050919050565b61152d81611514565b82525050565b60006020820190506115486000830184611524565b92915050565b6000819050919050565b6115618161154e565b82525050565b600060208201905061157c6000830184611558565b92915050565b61158b81611475565b82525050565b60006020820190506115a66000830184611582565b92915050565b60008115159050919050565b6115c1816115ac565b82525050565b60006020820190506115dc60008301846115b8565b92915050565b6115eb816114e0565b81146115f657600080fd5b50565b600081359050611608816115e2565b92915050565b61161781611514565b811461162257600080fd5b50565b6000813590506116348161160e565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61168d82611644565b810181811067ffffffffffffffff821117156116ac576116ab611655565b5b80604052505050565b60006116bf611441565b90506116cb8282611684565b919050565b600067ffffffffffffffff8211156116eb576116ea611655565b5b6116f482611644565b9050602081019050919050565b82818337600083830152505050565b600061172361171e846116d0565b6116b5565b90508281526020810184848401111561173f5761173e61163f565b5b61174a848285611701565b509392505050565b600082601f8301126117675761176661163a565b5b8135611777848260208601611710565b91505092915050565b600080600080600060a0868803121561179c5761179b61144b565b5b60006117aa8882890161149e565b95505060206117bb888289016115f9565b94505060406117cc888289016115f9565b93505060606117dd88828901611625565b925050608086013567ffffffffffffffff8111156117fe576117fd611450565b5b61180a88828901611752565b9150509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61184c81611817565b82525050565b60006020820190506118676000830184611843565b92915050565b611876816115ac565b811461188157600080fd5b50565b6000813590506118938161186d565b92915050565b600080604083850312156118b0576118af61144b565b5b60006118be8582860161149e565b92505060206118cf85828601611884565b9150509250929050565b600080fd5b600080fd5b60008083601f8401126118f9576118f861163a565b5b8235905067ffffffffffffffff811115611916576119156118d9565b5b602083019150836001820283011115611932576119316118de565b5b9250929050565b6000806000604084860312156119525761195161144b565b5b60006119608682870161149e565b935050602084013567ffffffffffffffff81111561198157611980611450565b5b61198d868287016118e3565b92509250509250925092565b6119a281611817565b81146119ad57600080fd5b50565b6000813590506119bf81611999565b92915050565b6000806000606084860312156119de576119dd61144b565b5b60006119ec868287016119b0565b93505060206119fd8682870161149e565b9250506040611a0e868287016115f9565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a5282611514565b9150611a5d83611514565b9250828201905063ffffffff811115611a7957611a78611a18565b5b92915050565b600060a082019050611a946000830188611558565b611aa16020830187611582565b611aae60408301866114ea565b611abb60608301856114ea565b611ac86080830184611524565b9695505050505050565b600082825260208201905092915050565b7f6e6f74206120636f6e73756d6572000000000000000000000000000000000000600082015250565b6000611b19600e83611ad2565b9150611b2482611ae3565b602082019050919050565b60006020820190508181036000830152611b4881611b0c565b9050919050565b7f696e76616c6964206163636f756e740000000000000000000000000000000000600082015250565b6000611b85600f83611ad2565b9150611b9082611b4f565b602082019050919050565b60006020820190508181036000830152611bb481611b78565b9050919050565b7f65787069726564207469636b6574000000000000000000000000000000000000600082015250565b6000611bf1600e83611ad2565b9150611bfc82611bbb565b602082019050919050565b60006020820190508181036000830152611c2081611be4565b9050919050565b7f696e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000611c5d600e83611ad2565b9150611c6882611c27565b602082019050919050565b60006020820190508181036000830152611c8c81611c50565b9050919050565b7f696e76616c6964207469636b6574000000000000000000000000000000000000600082015250565b6000611cc9600e83611ad2565b9150611cd482611c93565b602082019050919050565b60006020820190508181036000830152611cf881611cbc565b9050919050565b6000611d0a826114e0565b9150611d15836114e0565b9250828201905080821115611d2d57611d2c611a18565b5b92915050565b600082825260208201905092915050565b6000611d508385611d33565b9350611d5d838584611701565b611d6683611644565b840190509392505050565b60006020820190508181036000830152611d8c818486611d44565b90509392505050565b6000604082019050611daa60008301856114ea565b611db760208301846114ea565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611e1a602683611ad2565b9150611e2582611dbe565b604082019050919050565b60006020820190508181036000830152611e4981611e0d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611e86602083611ad2565b9150611e9182611e50565b602082019050919050565b60006020820190508181036000830152611eb581611e79565b9050919050565b600060ff82169050919050565b611ed281611ebc565b8114611edd57600080fd5b50565b600081519050611eef81611ec9565b92915050565b611efe8161154e565b8114611f0957600080fd5b50565b600081519050611f1b81611ef5565b92915050565b600080600060608486031215611f3a57611f3961144b565b5b6000611f4886828701611ee0565b9350506020611f5986828701611f0c565b9250506040611f6a86828701611f0c565b9150509250925092565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000611fb5601c83611f74565b9150611fc082611f7f565b601c82019050919050565b6000819050919050565b611fe6611fe18261154e565b611fcb565b82525050565b6000611ff782611fa8565b91506120038284611fd5565b60208201915081905092915050565b61201b81611ebc565b82525050565b60006080820190506120366000830187611558565b6120436020830186612012565b6120506040830185611558565b61205d6060830184611558565b95945050505050565b60008135905061207581611ef5565b92915050565b600080604083850312156120925761209161144b565b5b60006120a085828601612066565b925050602083013567ffffffffffffffff8111156120c1576120c0611450565b5b6120cd85828601611752565b9150509250929050565b7f696e76616c696420636c61696d00000000000000000000000000000000000000600082015250565b600061210d600d83611ad2565b9150612118826120d7565b602082019050919050565b6000602082019050818103600083015261213c81612100565b9050919050565b600061214e82611455565b9050919050565b61215e81612143565b811461216957600080fd5b50565b60008151905061217b81612155565b92915050565b600081519050612190816115e2565b92915050565b6000815190506121a58161160e565b92915050565b60005b838110156121c95780820151818401526020810190506121ae565b60008484015250505050565b60006121e86121e3846116d0565b6116b5565b9050828152602081018484840111156122045761220361163f565b5b61220f8482856121ab565b509392505050565b600082601f83011261222c5761222b61163a565b5b815161223c8482602086016121d5565b91505092915050565b600080600080600060a086880312156122615761226061144b565b5b600061226f8882890161216c565b955050602061228088828901612181565b945050604061229188828901612181565b93505060606122a288828901612196565b925050608086015167ffffffffffffffff8111156122c3576122c2611450565b5b6122cf88828901612217565b9150509295509295909350565b7f436f6e646974696f6e616c4469737472696275746f723a20496e76616c69642060008201527f696e746572666163650000000000000000000000000000000000000000000000602082015250565b6000612338602983611ad2565b9150612343826122dc565b604082019050919050565b600060208201905081810360008301526123678161232b565b9050919050565b60008160601b9050919050565b60006123868261236e565b9050919050565b60006123988261237b565b9050919050565b6123b06123ab82611475565b61238d565b82525050565b6000819050919050565b6123d16123cc826114e0565b6123b6565b82525050565b6000819050919050565b6123f26123ed82611817565b6123d7565b82525050565b6000612404828661239f565b60148201915061241482856123c0565b60208201915061242482846123e1565b60048201915081905094935050505056fea2646970667358221220f9f0ccf99e05bc5b0da290cc30e6090642a7661e804d3052c9f8a3ce4b072d2264736f6c63430008110033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c8063a088dd6111610097578063d71a85cd11610066578063d71a85cd146102af578063e00f9613146102cb578063ed24911d146102fb578063f2fde38b1461031957610100565b8063a088dd6114610229578063c9bf6daa14610247578063cb7f014114610263578063d120469e1461027f57610100565b80636afdb9b4116100d35780636afdb9b4146101a1578063715018a6146101d1578063834943e8146101db5780638da5cb5b1461020b57610100565b806304e86903146101055780630cd55abf146101355780633644e515146101655780633a5381b514610183575b600080fd5b61011f600480360381019061011a91906114b3565b610335565b60405161012c91906114f9565b60405180910390f35b61014f600480360381019061014a91906114b3565b610381565b60405161015c9190611533565b60405180910390f35b61016d6103e9565b60405161017a9190611567565b60405180910390f35b61018b61040d565b6040516101989190611591565b60405180910390f35b6101bb60048036038101906101b691906114b3565b610433565b6040516101c891906115c7565b60405180910390f35b6101d9610453565b005b6101f560048036038101906101f09190611780565b610467565b6040516102029190611852565b60405180910390f35b6102136104f0565b6040516102209190611591565b60405180910390f35b610231610519565b60405161023e9190611567565b60405180910390f35b610261600480360381019061025c91906114b3565b61051f565b005b61027d60048036038101906102789190611899565b6105b9565b005b61029960048036038101906102949190611939565b610707565b6040516102a691906114f9565b60405180910390f35b6102c960048036038101906102c491906119c5565b610b30565b005b6102e560048036038101906102e09190611939565b610b48565b6040516102f291906115c7565b60405180910390f35b610303610c97565b6040516103109190611567565b60405180910390f35b610333600480360381019061032e91906114b3565b610cbf565b005b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60006001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900463ffffffff166103e29190611a47565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915054906101000a900460ff1681565b61045b610d67565b6104656000610de5565b565b60006104e5600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1663834943e860e01b7f0000000000000000000000000000000000000000000000000000000000000000898989896040516020016104d0959493929190611a7f565b60405160208183030381529060405285610ea9565b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60015481565b610527610d67565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f5dc8fe6c03695c172a921c8f8fa2fddfb0aa130603797700d865d07baf129eef336040516105ae9190611591565b60405180910390a250565b6105c1610d67565b8015610667576001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f28b26e7a3d20aedbc5f8f2ebf7da671c0491723a2b78f47a097b0e46dee0714260405160405180910390a2610703565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fe3f5ed5f263f1f01764a96edfc7d025f511ec5f7d180e8816908b78bcf74f09860405160405180910390a25b5050565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078c90611b2f565b60405180910390fd5b60006107a18484610fa9565b9050806000015173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080c90611b9b565b60405180910390fd5b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900463ffffffff1663ffffffff16816060015163ffffffff16116108b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b090611c07565b60405180910390fd5b6000600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600082602001511180156109175750808260400151145b610956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094d90611c73565b60405180910390fd5b61095f82611089565b61099e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099590611cdf565b60405180910390fd5b60008260a001518051906020012090508260600151600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548163ffffffff021916908363ffffffff1602179055506000836020015183610a259190611cff565b905080600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508773ffffffffffffffffffffffffffffffffffffffff167fd99dccc570c01ecb4da5de9a05d71a0bca8c76d6f18502d46f9c7f11219eba8d8888604051610ab6929190611d71565b60405180910390a2836060015163ffffffff16828973ffffffffffffffffffffffffffffffffffffffff167fe391d62f8cdfcafcbc439b2ad825f65c039c0ca1cc9325ff495d10258f28c620848860200151604051610b16929190611d95565b60405180910390a483602001519450505050509392505050565b610b38610d67565b610b438383836110fa565b505050565b600080610b558484610fa9565b9050806000015173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610b98576000915050610c90565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900463ffffffff1663ffffffff16816060015163ffffffff1611610c0b576000915050610c90565b610c1481611089565b610c22576000915050610c90565b60008160200151118015610c7b5750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548160400151145b15610c8a576001915050610c90565b60009150505b9392505050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b610cc7610d67565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2d90611e30565b60405180910390fd5b610d3f81610de5565b50565b6000610d4d836112db565b8015610d5f5750610d5e8383611328565b5b905092915050565b610d6f6113e7565b73ffffffffffffffffffffffffffffffffffffffff16610d8d6104f0565b73ffffffffffffffffffffffffffffffffffffffff1614610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90611e9c565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060008084806020019051810190610ec39190611f21565b8093508194508295505050506000868051906020012090506000600182604051602001610ef09190611fec565b6040516020818303038152906040528051906020012086868660405160008152602001604052604051610f269493929190612021565b6020604051602081039080840390855afa158015610f48573d6000803e3d6000fd5b5050506020604051035190508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1603610f94578895505050505050610fa1565b600060e01b955050505050505b949350505050565b610fb16113ef565b6000808484810190610fc3919061207b565b91509150600154821461100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290612123565b60405180910390fd5b6000806000806000858060200190518101906110279190612245565b945094509450945094506040518060c001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018363ffffffff1681526020018281526020018781525097505050505050505092915050565b600063834943e860e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166110d383600001518460200151856040015186606001518760800151610467565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b63ffffffff60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061119157506340c10f1960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806111e0575063731133e960e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611210575061120f838373ffffffffffffffffffffffffffffffffffffffff16610d4290919063ffffffff16565b5b61124f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112469061234e565b60405180910390fd5b6000828285604051602001611266939291906123f8565b6040516020818303038152906040528051906020012090508060018190555080828473ffffffffffffffffffffffffffffffffffffffff167f5157785fd6fe43b0ec091c749d339b04dbcfb552938b8c019a63f1af607893ec876040516112cd9190611852565b60405180910390a450505050565b6000611307827f01ffc9a700000000000000000000000000000000000000000000000000000000611328565b8015611321575061131f8263ffffffff60e01b611328565b155b9050919050565b6000806301ffc9a760e01b836040516024016113449190611852565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090506000806000602060008551602087018a617530fa92503d915060005190508280156113cf575060208210155b80156113db5750600081115b94505050505092915050565b600033905090565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600063ffffffff16815260200160608152602001606081525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061148082611455565b9050919050565b61149081611475565b811461149b57600080fd5b50565b6000813590506114ad81611487565b92915050565b6000602082840312156114c9576114c861144b565b5b60006114d78482850161149e565b91505092915050565b6000819050919050565b6114f3816114e0565b82525050565b600060208201905061150e60008301846114ea565b92915050565b600063ffffffff82169050919050565b61152d81611514565b82525050565b60006020820190506115486000830184611524565b92915050565b6000819050919050565b6115618161154e565b82525050565b600060208201905061157c6000830184611558565b92915050565b61158b81611475565b82525050565b60006020820190506115a66000830184611582565b92915050565b60008115159050919050565b6115c1816115ac565b82525050565b60006020820190506115dc60008301846115b8565b92915050565b6115eb816114e0565b81146115f657600080fd5b50565b600081359050611608816115e2565b92915050565b61161781611514565b811461162257600080fd5b50565b6000813590506116348161160e565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61168d82611644565b810181811067ffffffffffffffff821117156116ac576116ab611655565b5b80604052505050565b60006116bf611441565b90506116cb8282611684565b919050565b600067ffffffffffffffff8211156116eb576116ea611655565b5b6116f482611644565b9050602081019050919050565b82818337600083830152505050565b600061172361171e846116d0565b6116b5565b90508281526020810184848401111561173f5761173e61163f565b5b61174a848285611701565b509392505050565b600082601f8301126117675761176661163a565b5b8135611777848260208601611710565b91505092915050565b600080600080600060a0868803121561179c5761179b61144b565b5b60006117aa8882890161149e565b95505060206117bb888289016115f9565b94505060406117cc888289016115f9565b93505060606117dd88828901611625565b925050608086013567ffffffffffffffff8111156117fe576117fd611450565b5b61180a88828901611752565b9150509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61184c81611817565b82525050565b60006020820190506118676000830184611843565b92915050565b611876816115ac565b811461188157600080fd5b50565b6000813590506118938161186d565b92915050565b600080604083850312156118b0576118af61144b565b5b60006118be8582860161149e565b92505060206118cf85828601611884565b9150509250929050565b600080fd5b600080fd5b60008083601f8401126118f9576118f861163a565b5b8235905067ffffffffffffffff811115611916576119156118d9565b5b602083019150836001820283011115611932576119316118de565b5b9250929050565b6000806000604084860312156119525761195161144b565b5b60006119608682870161149e565b935050602084013567ffffffffffffffff81111561198157611980611450565b5b61198d868287016118e3565b92509250509250925092565b6119a281611817565b81146119ad57600080fd5b50565b6000813590506119bf81611999565b92915050565b6000806000606084860312156119de576119dd61144b565b5b60006119ec868287016119b0565b93505060206119fd8682870161149e565b9250506040611a0e868287016115f9565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a5282611514565b9150611a5d83611514565b9250828201905063ffffffff811115611a7957611a78611a18565b5b92915050565b600060a082019050611a946000830188611558565b611aa16020830187611582565b611aae60408301866114ea565b611abb60608301856114ea565b611ac86080830184611524565b9695505050505050565b600082825260208201905092915050565b7f6e6f74206120636f6e73756d6572000000000000000000000000000000000000600082015250565b6000611b19600e83611ad2565b9150611b2482611ae3565b602082019050919050565b60006020820190508181036000830152611b4881611b0c565b9050919050565b7f696e76616c6964206163636f756e740000000000000000000000000000000000600082015250565b6000611b85600f83611ad2565b9150611b9082611b4f565b602082019050919050565b60006020820190508181036000830152611bb481611b78565b9050919050565b7f65787069726564207469636b6574000000000000000000000000000000000000600082015250565b6000611bf1600e83611ad2565b9150611bfc82611bbb565b602082019050919050565b60006020820190508181036000830152611c2081611be4565b9050919050565b7f696e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000611c5d600e83611ad2565b9150611c6882611c27565b602082019050919050565b60006020820190508181036000830152611c8c81611c50565b9050919050565b7f696e76616c6964207469636b6574000000000000000000000000000000000000600082015250565b6000611cc9600e83611ad2565b9150611cd482611c93565b602082019050919050565b60006020820190508181036000830152611cf881611cbc565b9050919050565b6000611d0a826114e0565b9150611d15836114e0565b9250828201905080821115611d2d57611d2c611a18565b5b92915050565b600082825260208201905092915050565b6000611d508385611d33565b9350611d5d838584611701565b611d6683611644565b840190509392505050565b60006020820190508181036000830152611d8c818486611d44565b90509392505050565b6000604082019050611daa60008301856114ea565b611db760208301846114ea565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611e1a602683611ad2565b9150611e2582611dbe565b604082019050919050565b60006020820190508181036000830152611e4981611e0d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611e86602083611ad2565b9150611e9182611e50565b602082019050919050565b60006020820190508181036000830152611eb581611e79565b9050919050565b600060ff82169050919050565b611ed281611ebc565b8114611edd57600080fd5b50565b600081519050611eef81611ec9565b92915050565b611efe8161154e565b8114611f0957600080fd5b50565b600081519050611