0x608060405234801561001057600080fd5b506040516112ac3803806112ac83398101604081905261002f91610099565b6100383361005d565b600080546001600160a01b0319166001600160a01b03929092169190911790556100c9565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b6000602082840312156100ab57600080fd5b81516001600160a01b03811681146100c257600080fd5b9392505050565b6111d4806100d86000396000f3fe6080604052600436106100f35760003560e01c8063b6549f751161008a578063d30008c311610059578063d30008c314610349578063f04e283e14610369578063f2fde38b1461037c578063fee81cf41461038f57600080fd5b8063b6549f75146102a4578063b6a5d7de146102b9578063b9181611146102d9578063cda25cf01461031c57600080fd5b8063715018a6116100c6578063715018a61461014a5780638da5cb5b1461015257806398956069146101ac578063ab92efcc146101cc57600080fd5b806325692962146100f85780634f41492a1461010257806354710ef81461012257806354d1f13d14610142575b600080fd5b6101006103d0565b005b34801561010e57600080fd5b5061010061011d366004610f81565b610420565b34801561012e57600080fd5b5061010061013d366004610fa3565b6104bc565b61010061070d565b610100610749565b34801561015e57600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927545b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101b857600080fd5b506101006101c7366004611002565b61075d565b3480156101d857600080fd5b506102506101e73660046110ae565b6001602081815260009485526040808620825293855283852090529083529120805491810154600282015460038301546004840154600585015460069095015473ffffffffffffffffffffffffffffffffffffffff968716969485169593949293919092169187565b6040805173ffffffffffffffffffffffffffffffffffffffff988916815296881660208801528601949094526060850192909252909316608083015260a082019290925260c081019190915260e0016101a3565b3480156102b057600080fd5b50610100610a43565b3480156102c557600080fd5b506101006102d4366004610f81565b610ad2565b3480156102e557600080fd5b506101826102f4366004610f81565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561032857600080fd5b506000546101829073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035557600080fd5b506101006103643660046110ae565b610ba7565b610100610377366004610f81565b610d64565b61010061038a366004610f81565b610da4565b34801561039b57600080fd5b506103c26103aa366004610f81565b63389a75e1600c908152600091909152602090205490565b6040519081526020016101a3565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610428610dcb565b73ffffffffffffffffffffffffffffffffffffffff8116610475576040517fa2f98bc000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff868116600090815260026020526040902054161561054e5773ffffffffffffffffffffffffffffffffffffffff868116600090815260026020526040902054163314610549576040517fa7202ef600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61059d565b3373ffffffffffffffffffffffffffffffffffffffff87161461059d576040517fa7202ef600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160e08101825273ffffffffffffffffffffffffffffffffffffffff80891680835288821660208085018281528587018b81526000606088018181528c881660808a0181815260a08b018e815260c08c018e815299855260018089528d86209986529888528c852092855291909652918a9020985189549089167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216178a55935195890180549689169685169690961790955590516002880155925160038701559051600486018054919095169116179092559051600583015551600690910155517fd3f505973293e83a9a1d2ef697e7231a63d6ca30cb4d81d1e40fed7ba6b72352906106fd9088908890889088908890889073ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152604085019390935293166060830152608082019290925260a081019190915260c00190565b60405180910390a1505050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b610751610dcb565b61075b6000610e01565b565b73ffffffffffffffffffffffffffffffffffffffff808c16600090815260016020908152604080832089851684528252808320938b16835292905220600281015460038201546107ad9082611120565b82600501546107bc9190611139565b6107c69190611150565b8710156107ff576040517faa7751c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428160060154101561083d576040517f212ee34000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806003015481600201546108519190611120565b85111561088a576040517fce518e5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610896868d3088610e67565b6000546108bb90879073ffffffffffffffffffffffffffffffffffffffff1687610ec4565b6000546040517f46e4480d000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c905273ffffffffffffffffffffffffffffffffffffffff8b811660448301528a81166064830152608482018a905288811660a483015260c4820188905260ff871660e483015261010482018690526101248201859052909116906346e4480d9061014401600060405180830381600087803b15801561096e57600080fd5b505af1158015610982573d6000803e3d6000fd5b50505050610991888d89610f13565b73ffffffffffffffffffffffffffffffffffffffff808d1660009081526001602090815260408083208a851684528252808320938c16835292905290812060030180548792906109e290849061118b565b9091555050604080518c815273ffffffffffffffffffffffffffffffffffffffff8b1660208201527fc2d98e54975bdbc02531f53389b2e9c591eafcb383243f05c883017260340ad8910160405180910390a1505050505050505050505050565b3360008181526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000008116909155825173ffffffffffffffffffffffffffffffffffffffff90911680825291810193909352917fd7426110292f20fe59e73ccf52124e0f5440a756507c91c7b0a6c50e1eb1a23a91015b60405180910390a150565b73ffffffffffffffffffffffffffffffffffffffff8116610b1f576040517fc3a29bad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526002602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558251908152908101929092527f30468de898bda644e26bab66e5a2241a3aa6aaf527257f5ca54e0f65204ba14a9101610ac7565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600260205260409020541615610c395773ffffffffffffffffffffffffffffffffffffffff838116600090815260026020526040902054163314610c34576040517fa7202ef600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c88565b3373ffffffffffffffffffffffffffffffffffffffff841614610c88576040517fa7202ef600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff838116600081815260016020818152604080842088871680865290835281852096881680865296835281852080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116825594810180548616905560028101869055600381018690556004810180549095169094556005840185905560069093019390935582519384528301528101919091527f8a5de2720528dbd2e4fe17889175d99555344219a0e2ef60298dc68801f57c989060600160405180910390a1505050565b610d6c610dcb565b63389a75e1600c52806000526020600c208054421115610d9457636f5e88186000526004601cfd5b60009055610da181610e01565b50565b610dac610dcb565b8060601b610dc257637448fbae6000526004601cfd5b610da181610e01565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754331461075b576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c52602060006064601c6000895af13d156001600051141716610eb657637939f4246000526004601cfd5b600060605260405250505050565b81601452806034526f095ea7b300000000000000000000000060005260206000604460106000875af13d156001600051141716610f0957633e3f8f736000526004601cfd5b6000603452505050565b81601452806034526fa9059cbb00000000000000000000000060005260206000604460106000875af13d156001600051141716610f09576390b8ec186000526004601cfd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610f7c57600080fd5b919050565b600060208284031215610f9357600080fd5b610f9c82610f58565b9392505050565b60008060008060008060c08789031215610fbc57600080fd5b610fc587610f58565b9550610fd360208801610f58565b945060408701359350610fe860608801610f58565b92506080870135915060a087013590509295509295509295565b60008060008060008060008060008060006101608c8e03121561102457600080fd5b61102d8c610f58565b9a5060208c0135995060408c0135985061104960608d01610f58565b975061105760808d01610f58565b965060a08c0135955061106c60c08d01610f58565b945060e08c013593506101008c013560ff8116811461108a57600080fd5b809350506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000606084860312156110c357600080fd5b6110cc84610f58565b92506110da60208501610f58565b91506110e860408501610f58565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115611133576111336110f1565b92915050565b8082028115828204841417611133576111336110f1565b600082611186577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820180821115611133576111336110f156fea2646970667358221220d8a6f05acd41534b0992ebd157a141fb478c41ef78596686d00f1e14241ed6bb64736f6c63430008170033000000000000000000000000d82e10b9a4107939e55fcca9b53a9ede6cf2fc46