0x608060405234801561001057600080fd5b50611696806100206000396000f3fe6080604052600436106100a05760003560e01c8063715018a611610064578063715018a6146101895780638da5cb5b1461019e578063bb10c829146101bc578063cf503460146101f7578063d9caed1214610217578063f2fde38b1461023757600080fd5b80632b7ac3f3146100ac57806344e8ad9a146100e9578063485cc955146101195780634f25737d1461013b5780635437988d1461016957600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506097546100cc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100f557600080fd5b506101096101043660046112c9565b610257565b60405190151581526020016100e0565b34801561012557600080fd5b5061013961013436600461134b565b610338565b005b34801561014757600080fd5b5061015b61015636600461137e565b61047c565b6040519081526020016100e0565b34801561017557600080fd5b506101396101843660046113cb565b6104d4565b34801561019557600080fd5b506101396105d4565b3480156101aa57600080fd5b506033546001600160a01b03166100cc565b3480156101c857600080fd5b506101096101d73660046113fc565b805160208183018101805160988252928201919093012091525460ff1681565b34801561020357600080fd5b506101396102123660046114ad565b6105e8565b34801561022357600080fd5b5061013961023236600461151e565b6107e0565b34801561024357600080fd5b506101396102523660046113cb565b610935565b60008181036102685750600061032d565b6000610277898989898961047c565b905060006102d2826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b905060006103168287878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109ae92505050565b6097546001600160a01b0391821691161493505050505b979650505050505050565b600054610100900460ff16158080156103585750600054600160ff909116105b806103725750303b158015610372575060005460ff166001145b6103da5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156103fd576000805461ff0019166101001790555b6104056109d2565b61040d610a01565b61041683610935565b609780546001600160a01b0319166001600160a01b0384161790558015610477576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60408051466020808301919091526001600160a01b0397881682840152959096166060870152608086019390935260a085019190915260c0808501919091528151808503909101815260e09093019052815191012090565b6104dc610a30565b6001600160a01b0381166105245760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016103d1565b6097546001600160a01b03908116908216036105825760405162461bcd60e51b815260206004820152601760248201527f566572696669657220616c72656164792065786973747300000000000000000060448201526064016103d1565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fece0bf81fd8f6889c8c3a1f3b057df878a9e1a0501fd4d62c77822fe3570d28f90600090a35050565b6105dc610a30565b6105e66000610a8a565b565b60026065540361063a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103d1565b60026065558461067f5760405162461bcd60e51b815260206004820152601060248201526f4e6f7468696e6720746f20636c61696d60801b60448201526064016103d1565b8342106106c65760405162461bcd60e51b815260206004820152601560248201527414da59db985d1d5c99481a185cc8195e1c1a5c9959605a1b60448201526064016103d1565b609882826040516106d892919061155a565b9081526040519081900360200190205460ff16156107385760405162461bcd60e51b815260206004820152601760248201527f5369676e617475726520686173206265656e207573656400000000000000000060448201526064016103d1565b61074786338787878787610257565b6107875760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b60448201526064016103d1565b61079386863033610adc565b6040518581526001600160a01b0387169033907ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926839060200160405180910390a35050600160655550505050565b6107e8610a30565b60026065540361083a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103d1565b60026065556001600160a01b0382166108875760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016103d1565b600081116108c85760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b60448201526064016103d1565b6108d483823085610adc565b6001600160a01b038216336001600160a01b0316846001600160a01b03167fa4195c37c2947bbe89165f03e320b6903116f0b10d8cfdb522330f7ce6f9fa248460405161092391815260200190565b60405180910390a45050600160655550565b61093d610a30565b6001600160a01b0381166109a25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103d1565b6109ab81610a8a565b50565b60008060006109bd8585610bab565b915091506109ca81610bf0565b509392505050565b600054610100900460ff166109f95760405162461bcd60e51b81526004016103d19061156a565b6105e6610da6565b600054610100900460ff16610a285760405162461bcd60e51b81526004016103d19061156a565b6105e6610dd6565b6033546001600160a01b031633146105e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103d1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b306001600160a01b03821603610b54576001600160a01b038416610b3f57823414610b3a5760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b60448201526064016103d1565b610ba5565b610b3a6001600160a01b038516338386610e04565b6001600160a01b038416610b6c57610b3a8184610e6f565b306001600160a01b03831603610b9057610b3a6001600160a01b0385168285610f09565b610ba56001600160a01b038516338386610e04565b50505050565b6000808251604103610be15760208301516040840151606085015160001a610bd587828585610f39565b94509450505050610be9565b506000905060025b9250929050565b6000816004811115610c0457610c046115b5565b03610c0c5750565b6001816004811115610c2057610c206115b5565b03610c6d5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103d1565b6002816004811115610c8157610c816115b5565b03610cce5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103d1565b6003816004811115610ce257610ce26115b5565b03610d3a5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103d1565b6004816004811115610d4e57610d4e6115b5565b036109ab5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016103d1565b600054610100900460ff16610dcd5760405162461bcd60e51b81526004016103d19061156a565b6105e633610a8a565b600054610100900460ff16610dfd5760405162461bcd60e51b81526004016103d19061156a565b6001606555565b6040516001600160a01b0380851660248301528316604482015260648101829052610ba59085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611026565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610ebc576040519150601f19603f3d011682016040523d82523d6000602084013e610ec1565b606091505b50509050806104775760405162461bcd60e51b81526020600482015260146024820152734661696c207472616e73666572206e617469766560601b60448201526064016103d1565b6040516001600160a01b03831660248201526044810182905261047790849063a9059cbb60e01b90606401610e38565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610f70575060009050600361101d565b8460ff16601b14158015610f8857508460ff16601c14155b15610f99575060009050600461101d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610fed573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166110165760006001925092505061101d565b9150600090505b94509492505050565b600061107b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110f89092919063ffffffff16565b805190915015610477578080602001905181019061109991906115cb565b6104775760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103d1565b60606111078484600085611111565b90505b9392505050565b6060824710156111725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103d1565b6001600160a01b0385163b6111c95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103d1565b600080866001600160a01b031685876040516111e59190611611565b60006040518083038185875af1925050503d8060008114611222576040519150601f19603f3d011682016040523d82523d6000602084013e611227565b606091505b509150915061032d8282866060831561124157508161110a565b8251156112515782518084602001fd5b8160405162461bcd60e51b81526004016103d1919061162d565b80356001600160a01b038116811461128257600080fd5b919050565b60008083601f84011261129957600080fd5b50813567ffffffffffffffff8111156112b157600080fd5b602083019150836020828501011115610be957600080fd5b600080600080600080600060c0888a0312156112e457600080fd5b6112ed8861126b565b96506112fb6020890161126b565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff81111561132c57600080fd5b6113388a828b01611287565b989b979a50959850939692959293505050565b6000806040838503121561135e57600080fd5b6113678361126b565b91506113756020840161126b565b90509250929050565b600080600080600060a0868803121561139657600080fd5b61139f8661126b565b94506113ad6020870161126b565b94979496505050506040830135926060810135926080909101359150565b6000602082840312156113dd57600080fd5b61110a8261126b565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561140e57600080fd5b813567ffffffffffffffff8082111561142657600080fd5b818401915084601f83011261143a57600080fd5b81358181111561144c5761144c6113e6565b604051601f8201601f19908116603f01168101908382118183101715611474576114746113e6565b8160405282815287602084870101111561148d57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060008060008060a087890312156114c657600080fd5b6114cf8761126b565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff81111561150057600080fd5b61150c89828a01611287565b979a9699509497509295939492505050565b60008060006060848603121561153357600080fd5b61153c8461126b565b925061154a6020850161126b565b9150604084013590509250925092565b8183823760009101908152919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156115dd57600080fd5b8151801515811461110a57600080fd5b60005b838110156116085781810151838201526020016115f0565b50506000910152565b600082516116238184602087016115ed565b9190910192915050565b602081526000825180602084015261164c8160408501602087016115ed565b601f01601f1916919091016040019291505056fea26469706673582212207d2a0e7d8b4962eae631fccbbeb0986d2c821f2d120579c1b6eedff8aabf20b164736f6c63430008100033