0x608060405234801561001057600080fd5b50611cab806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80632006e601146100465780636146195414610069578063f1cc215814610073575b600080fd5b61005769ce40a55326d504c0000081565b60405190815260200160405180910390f35b61007161007f565b005b61005764e2c6ec8c0081565b600060405161008d906108e8565b604051809103906000f0801580156100a9573d6000803e3d6000fd5b506040516370a0823160e01b815273464c71f6c2f760dda6093dcb91c24c39e5d6e18c600482015290915060009073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48906370a0823190602401602060405180830381865afa158015610113573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061013791906108f5565b6040516317d5759960e31b815273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860048201523060248201526044810182905290915073464c71f6c2f760dda6093dcb91c24c39e5d6e18c9063beabacc890606401600060405180830381600087803b1580156101a757600080fd5b505af11580156101bb573d6000803e3d6000fd5b506101f5925073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489150737d2768de32b0b80b7a3454c06bdac94a69ddc7a9905083610545565b60405163e8eda9df60e01b815273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860048201526024810182905273464c71f6c2f760dda6093dcb91c24c39e5d6e18c604482015260006064820152737d2768de32b0b80b7a3454c06bdac94a69ddc7a99063e8eda9df90608401600060405180830381600087803b15801561027d57600080fd5b505af1158015610291573d6000803e3d6000fd5b50506040516317d5759960e31b8152733ed3b47dd13ec9a98b44e6204a523e766b225811600482015230602482015264e2c6ec8c00604482015273464c71f6c2f760dda6093dcb91c24c39e5d6e18c925063beabacc89150606401600060405180830381600087803b15801561030657600080fd5b505af115801561031a573d6000803e3d6000fd5b50506040516317d5759960e31b815273028171bca77440897b824ca71d1c56cac55b68a3600482015230602482015269ce40a55326d504c00000604482015273464c71f6c2f760dda6093dcb91c24c39e5d6e18c925063beabacc89150606401600060405180830381600087803b15801561039457600080fd5b505af11580156103a8573d6000803e3d6000fd5b5050604051631a4ca37b60e21b815273dac17f958d2ee523a2206206994597c13d831ec7600482015260001960248201526001600160a01b0385166044820152737d2768de32b0b80b7a3454c06bdac94a69ddc7a992506369328dec91506064016020604051808303816000875af1158015610428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044c91906108f5565b50604051631a4ca37b60e21b8152736b175474e89094c44da98b954eedeac495271d0f600482015260001960248201526001600160a01b0383166044820152737d2768de32b0b80b7a3454c06bdac94a69ddc7a9906369328dec906064016020604051808303816000875af11580156104c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ed91906108f5565b50816001600160a01b0316638119c0656040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561052957600080fd5b505af115801561053d573d6000803e3d6000fd5b505050505050565b8015806105bf5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015610599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bd91906108f5565b155b61062f5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084015b60405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610681908490610686565b505050565b60006106db826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166107589092919063ffffffff16565b80519091501561068157808060200190518101906106f9919061090e565b6106815760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610626565b6060610767848460008561076f565b949350505050565b6060824710156107d05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610626565b600080866001600160a01b031685876040516107ec919061095b565b60006040518083038185875af1925050503d8060008114610829576040519150601f19603f3d011682016040523d82523d6000602084013e61082e565b606091505b509150915061083f8783838761084a565b979650505050505050565b606083156108b95782516000036108b2576001600160a01b0385163b6108b25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610626565b5081610767565b61076783838151156108ce5781518083602001fd5b8060405162461bcd60e51b81526004016106269190610977565b6112cb806109ab83390190565b60006020828403121561090757600080fd5b5051919050565b60006020828403121561092057600080fd5b8151801515811461093057600080fd5b9392505050565b60005b8381101561095257818101518382015260200161093a565b50506000910152565b6000825161096d818460208701610937565b9190910192915050565b6020815260008251806020840152610996816040850160208701610937565b601f01601f1916919091016040019291505056fe608060405234801561001057600080fd5b506112ab806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063e144cca81161005b578063e144cca8146100fc578063eb1410e91461010f578063ee5373ea1461012a578063f827d4d91461013d57600080fd5b80633a02ab821461008d578063566a53ae146100c45780638119c065146100df57806394952b95146100e9575b600080fd5b6100a873e80a1c615f75aff7ed8f08c9f21f9d00982d666c81565b6040516001600160a01b03909116815260200160405180910390f35b6100a87311c76ad590abdffcd980afec9ad951b160f0279781565b6100e7610150565b005b6100e76100f7366004610fe9565b6104b8565b6100e761010a366004611019565b610691565b6100a873a519a7ce7b24333055781133b13532aeabfac81b81565b6100e7610138366004610fe9565b6107e7565b6100e761014b366004610fe9565b610915565b3373ee56e2b3d491590b5b31738cc34d5232f378a8d514610184576040516348f5c3ed60e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015273dac17f958d2ee523a2206206994597c13d831ec7906370a0823190602401602060405180830381865afa1580156101d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f7919061108e565b6000556040516370a0823160e01b8152306004820152736b175474e89094c44da98b954eedeac495271d0f906370a0823190602401602060405180830381865afa158015610249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026d919061108e565b6001556000546102a89073dac17f958d2ee523a2206206994597c13d831ec7907311c76ad590abdffcd980afec9ad951b160f0279790610aeb565b6001546102e090736b175474e89094c44da98b954eedeac495271d0f907311c76ad590abdffcd980afec9ad951b160f0279790610aeb565b7311c76ad590abdffcd980afec9ad951b160f027976001600160a01b031663de9f091660005473dac17f958d2ee523a2206206994597c13d831ec773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb483073e80a1c615f75aff7ed8f08c9f21f9d00982d666c61037873ee9f2375b4bdf6387aa8265dd4fb8f16512a1d4673986b5e1e1755e3c2440e960477f25201b0a8bbd4610c38565b6040518763ffffffff1660e01b8152600401610399969594939291906110f7565b600060405180830381600087803b1580156103b357600080fd5b505af11580156103c7573d6000803e3d6000fd5b505050507311c76ad590abdffcd980afec9ad951b160f027976001600160a01b031663de9f0916600154736b175474e89094c44da98b954eedeac495271d0f73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb483073e80a1c615f75aff7ed8f08c9f21f9d00982d666c61046373773616e4d11a78f511299002da57a0a94577f1f473986b5e1e1755e3c2440e960477f25201b0a8bbd4610c38565b6040518763ffffffff1660e01b8152600401610484969594939291906110f7565b600060405180830381600087803b15801561049e57600080fd5b505af11580156104b2573d6000803e3d6000fd5b50505050565b3373a519a7ce7b24333055781133b13532aeabfac81b148015906104f057503373ee56e2b3d491590b5b31738cc34d5232f378a8d514155b1561050e576040516348f5c3ed60e01b815260040160405180910390fd5b806001600160a01b031663a47721e360005473dac17f958d2ee523a2206206994597c13d831ec773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb483073e80a1c615f75aff7ed8f08c9f21f9d00982d666c61059273ee9f2375b4bdf6387aa8265dd4fb8f16512a1d4673986b5e1e1755e3c2440e960477f25201b0a8bbd4610c38565b6040518763ffffffff1660e01b81526004016105b3969594939291906110f7565b600060405180830381600087803b1580156105cd57600080fd5b505af11580156105e1573d6000803e3d6000fd5b50506040516370a0823160e01b815230600482015261068e925073464c71f6c2f760dda6093dcb91c24c39e5d6e18c915073dac17f958d2ee523a2206206994597c13d831ec7906370a0823190602401602060405180830381865afa15801561064e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610672919061108e565b73dac17f958d2ee523a2206206994597c13d831ec79190610d57565b50565b3373a519a7ce7b24333055781133b13532aeabfac81b148015906106c957503373ee56e2b3d491590b5b31738cc34d5232f378a8d514155b156106e7576040516348f5c3ed60e01b815260040160405180910390fd5b60005b818110156107e2576107d273464c71f6c2f760dda6093dcb91c24c39e5d6e18c84848481811061071c5761071c611145565b90506020020160208101906107319190610fe9565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079b919061108e565b8585858181106107ad576107ad611145565b90506020020160208101906107c29190610fe9565b6001600160a01b03169190610d57565b6107db8161115b565b90506106ea565b505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561082e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610852919061108e565b905061087c6001600160a01b038316737d2768de32b0b80b7a3454c06bdac94a69ddc7a983610aeb565b60405163e8eda9df60e01b81526001600160a01b03831660048201526024810182905273464c71f6c2f760dda6093dcb91c24c39e5d6e18c604482015260006064820152737d2768de32b0b80b7a3454c06bdac94a69ddc7a99063e8eda9df90608401600060405180830381600087803b1580156108f957600080fd5b505af115801561090d573d6000803e3d6000fd5b505050505050565b3373a519a7ce7b24333055781133b13532aeabfac81b1480159061094d57503373ee56e2b3d491590b5b31738cc34d5232f378a8d514155b1561096b576040516348f5c3ed60e01b815260040160405180910390fd5b806001600160a01b031663a47721e3600154736b175474e89094c44da98b954eedeac495271d0f73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb483073e80a1c615f75aff7ed8f08c9f21f9d00982d666c6109ef73773616e4d11a78f511299002da57a0a94577f1f473986b5e1e1755e3c2440e960477f25201b0a8bbd4610c38565b6040518763ffffffff1660e01b8152600401610a10969594939291906110f7565b600060405180830381600087803b158015610a2a57600080fd5b505af1158015610a3e573d6000803e3d6000fd5b50506040516370a0823160e01b815230600482015261068e925073464c71f6c2f760dda6093dcb91c24c39e5d6e18c9150736b175474e89094c44da98b954eedeac495271d0f906370a0823190602401602060405180830381865afa158015610aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acf919061108e565b736b175474e89094c44da98b954eedeac495271d0f9190610d57565b801580610b655750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015610b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b63919061108e565b155b610bd55760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60648201526084015b60405180910390fd5b6040516001600160a01b0383166024820152604481018290526107e290849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610d87565b604080516002808252606082810190935282916000918160200160208202803683370190505090508481600081518110610c7457610c74611145565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110610ca857610ca8611145565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183526000939192909183019080368337019050509050600181600181518110610cf857610cf8611145565b911515602092830291909101820152604051610d18918491849101611182565b6040516020818303038152906040529250606483604051602001610d3d929190611208565b604051602081830303815290604052935050505092915050565b6040516001600160a01b0383166024820152604481018290526107e290849063a9059cbb60e01b90606401610c01565b6000610ddc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610e599092919063ffffffff16565b8051909150156107e25780806020019051810190610dfa9190611224565b6107e25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610bcc565b6060610e688484600085610e70565b949350505050565b606082471015610ed15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610bcc565b600080866001600160a01b03168587604051610eed9190611246565b60006040518083038185875af1925050503d8060008114610f2a576040519150601f19603f3d011682016040523d82523d6000602084013e610f2f565b606091505b5091509150610f4087838387610f4b565b979650505050505050565b60608315610fba578251600003610fb3576001600160a01b0385163b610fb35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bcc565b5081610e68565b610e688383815115610fcf5781518083602001fd5b8060405162461bcd60e51b8152600401610bcc9190611262565b600060208284031215610ffb57600080fd5b81356001600160a01b038116811461101257600080fd5b9392505050565b6000806020838503121561102c57600080fd5b823567ffffffffffffffff8082111561104457600080fd5b818501915085601f83011261105857600080fd5b81358181111561106757600080fd5b8660208260051b850101111561107c57600080fd5b60209290920196919550909350505050565b6000602082840312156110a057600080fd5b5051919050565b60005b838110156110c25781810151838201526020016110aa565b50506000910152565b600081518084526110e38160208601602086016110a7565b601f01601f19169290920160200192915050565b8681526001600160a01b038681166020830152858116604083015284811660608301528316608082015260c060a08201819052600090611139908301846110cb565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161117b57634e487b7160e01b600052601160045260246000fd5b5060010190565b604080825283519082018190526000906020906060840190828701845b828110156111c45781516001600160a01b03168452928401929084019060010161119f565b5050508381038285015284518082528583019183019060005b818110156111fb5783511515835292840192918401916001016111dd565b5090979650505050505050565b60ff83168152604060208201526000610e6860408301846110cb565b60006020828403121561123657600080fd5b8151801515811461101257600080fd5b600082516112588184602087016110a7565b9190910192915050565b60208152600061101260208301846110cb56fea2646970667358221220bc9355b23f37c6044448e94a7e049827b02aa8028ec5a7104e0c221811ecde3164736f6c63430008130033a2646970667358221220782123f4aeed043f3a76c32351ead21bdee2258596d8fe042b774d8c0c2ba6b764736f6c63430008130033