60a06040523060805234801561001457600080fd5b5060805161297b61004c6000396000818161091e0152818161095e01528181610c9701528181610cd70152610d6a015261297b6000f3fe60806040526004361061025a5760003560e01c80637fb074cf11610144578063c8f33c91116100b6578063e6a1d27d1161007a578063e6a1d27d146106fa578063e9fad8ee14610711578063ebe2b12b14610726578063f01f20df1461073d578063f2cca7a114610754578063f2fde38b1461077557600080fd5b8063c8f33c9114610677578063cc1a378f1461068e578063cd3daf9d146106ae578063cf756fdf146106c3578063df136d65146106e357600080fd5b80638a90e48f116101085780638a90e48f146105aa5780638b876347146105cb5780638da5cb5b146105f9578063a694fc3a14610617578063ab1cb94914610637578063c3f0d3271461065757600080fd5b80637fb074cf1461052157806380faa57d14610541578063844c3d71146105565780638456cb59146105755780638980f11f1461058a57600080fd5b80633fc6df6e116101dd5780636f49712b116101a15780636f49712b1461043e57806370a082311461046f57806370d5ae05146104a6578063715018a6146104c7578063778f8cb0146104dc5780637b0a47ee1461050a57600080fd5b80633fc6df6e146103995780633fdb8cbd146103d15780634f1ef286146103f257806352d1902d146104055780635c975abb1461041a57600080fd5b80631c1f78eb116102245780631c1f78eb146103185780633659cfe61461032d578063386a95251461034d5780633c6b16ab146103645780633f4ba83a1461038457600080fd5b806218a1161461025f5780628cc262146102815780630700037d146102b457806308b95617146102e257806318160ddd14610302575b600080fd5b34801561026b57600080fd5b5061027f61027a36600461248d565b610795565b005b34801561028d57600080fd5b506102a161029c3660046124bd565b61082d565b6040519081526020015b60405180910390f35b3480156102c057600080fd5b506102a16102cf3660046124bd565b6101396020526000908152604090205481565b3480156102ee57600080fd5b5061027f6102fd3660046124bd565b6108ad565b34801561030e57600080fd5b5061013a546102a1565b34801561032457600080fd5b506102a16108fa565b34801561033957600080fd5b5061027f6103483660046124bd565b610913565b34801561035957600080fd5b506102a16101335481565b34801561037057600080fd5b5061027f61037f36600461248d565b6109f3565b34801561039057600080fd5b5061027f610c58565b3480156103a557600080fd5b506065546103b9906001600160a01b031681565b6040516001600160a01b0390911681526020016102ab565b3480156103dd57600080fd5b5061012e546103b9906001600160a01b031681565b61027f6104003660046124ee565b610c8c565b34801561041157600080fd5b506102a1610d5d565b34801561042657600080fd5b5060ca5460ff165b60405190151581526020016102ab565b34801561044a57600080fd5b5061042e6104593660046124bd565b61013c6020526000908152604090205460ff1681565b34801561047b57600080fd5b506102a161048a3660046124bd565b6001600160a01b0316600090815261013b602052604090205490565b3480156104b257600080fd5b50610132546103b9906001600160a01b031681565b3480156104d357600080fd5b5061027f610e10565b3480156104e857600080fd5b506102a16104f73660046124bd565b61013d6020526000908152604090205481565b34801561051657600080fd5b506102a16101315481565b34801561052d57600080fd5b5061027f61053c3660046124bd565b610e44565b34801561054d57600080fd5b506102a1610e91565b34801561056257600080fd5b5061012e546001600160a01b03166103b9565b34801561058157600080fd5b5061027f610eaa565b34801561059657600080fd5b5061027f6105a53660046125b0565b610edc565b3480156105b657600080fd5b5061012f546103b9906001600160a01b031681565b3480156105d757600080fd5b506102a16105e63660046124bd565b6101386020526000908152604090205481565b34801561060557600080fd5b5060fc546001600160a01b03166103b9565b34801561062357600080fd5b5061027f61063236600461248d565b610fd1565b34801561064357600080fd5b506102a16106523660046124bd565b611250565b34801561066357600080fd5b5061027f61067236600461248d565b61132e565b34801561068357600080fd5b506102a16101345481565b34801561069a57600080fd5b5061027f6106a936600461248d565b6113bd565b3480156106ba57600080fd5b506102a1611423565b3480156106cf57600080fd5b5061027f6106de3660046125da565b61148b565b3480156106ef57600080fd5b506102a16101355481565b34801561070657600080fd5b506102a16101375481565b34801561071d57600080fd5b5061027f61157b565b34801561073257600080fd5b506102a16101305481565b34801561074957600080fd5b506102a16101365481565b34801561076057600080fd5b5061013e546103b9906001600160a01b031681565b34801561078157600080fd5b5061027f6107903660046124bd565b611634565b60fc546001600160a01b031633146107c85760405162461bcd60e51b81526004016107bf90612625565b60405180910390fd5b606361013654826107d99190612670565b11156108275760405162461bcd60e51b815260206004820152601a60248201527f6275726e202b20756e74616b65666565206973203e3d2031303000000000000060448201526064016107bf565b61013755565b6001600160a01b03811660009081526101396020908152604080832054610138909252822054670de0b6b3a764000090610865611423565b61086f9190612688565b6001600160a01b038516600090815261013b6020526040902054610893919061269f565b61089d91906126be565b6108a79190612670565b92915050565b60fc546001600160a01b031633146108d75760405162461bcd60e51b81526004016107bf90612625565b61013e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610133546101315461090e919061269f565b905090565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561095c5760405162461bcd60e51b81526004016107bf906126e0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109a56000805160206128ff833981519152546001600160a01b031690565b6001600160a01b0316146109cb5760405162461bcd60e51b81526004016107bf9061272c565b6109d4816116cc565b604080516000808252602082019092526109f0918391906116f6565b50565b6065546001600160a01b03163314610a605760405162461bcd60e51b815260206004820152602a60248201527f43616c6c6572206973206e6f742052657761726473446973747269627574696f6044820152691b8818dbdb9d1c9858dd60b21b60648201526084016107bf565b6000610a6a611423565b61013555610a76610e91565b610134556001600160a01b03811615610ac157610a928161082d565b6001600160a01b0382166000908152610139602090815260408083209390935561013554610138909152919020555b610130544210610ae25761013354610ad990836126be565b61013155610b28565b60004261013054610af39190612688565b905060006101315482610b06919061269f565b61013354909150610b178286612670565b610b2191906126be565b6101315550505b61012f546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610b6d57600080fd5b505afa158015610b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba59190612778565b90506101335481610bb691906126be565b610131541115610c085760405162461bcd60e51b815260206004820152601860248201527f50726f76696465642072657761726420746f6f2068696768000000000000000060448201526064016107bf565b4261013481905561013354610c1c91612670565b610130556040518381527fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d9060200160405180910390a1505050565b60fc546001600160a01b03163314610c825760405162461bcd60e51b81526004016107bf90612625565b610c8a611875565b565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610cd55760405162461bcd60e51b81526004016107bf906126e0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610d1e6000805160206128ff833981519152546001600160a01b031690565b6001600160a01b031614610d445760405162461bcd60e51b81526004016107bf9061272c565b610d4d826116cc565b610d59828260016116f6565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610dfd5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016107bf565b506000805160206128ff83398151915290565b60fc546001600160a01b03163314610e3a5760405162461bcd60e51b81526004016107bf90612625565b610c8a6000611908565b60fc546001600160a01b03163314610e6e5760405162461bcd60e51b81526004016107bf90612625565b61012e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610130544210610ea557506101305490565b504290565b60fc546001600160a01b03163314610ed45760405162461bcd60e51b81526004016107bf90612625565b610c8a61195a565b60fc546001600160a01b03163314610f065760405162461bcd60e51b81526004016107bf90612625565b61012f546001600160a01b0383811691161415610f655760405162461bcd60e51b815260206004820152601a60248201527f7769746864726177206e6f6e207374616b696e6720746f6b656e00000000000060448201526064016107bf565b610f8b610f7a60fc546001600160a01b031690565b6001600160a01b03841690836119d5565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a15050565b60026066541415610ff45760405162461bcd60e51b81526004016107bf90612791565b600260665560ca5460ff161561103f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107bf565b33611048611423565b61013555611054610e91565b610134556001600160a01b0381161561109f576110708161082d565b6001600160a01b0382166000908152610139602090815260408083209390935561013554610138909152919020555b600082116110e05760405162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b60448201526064016107bf565b33600090815261013c602052604090205460ff166111225733600090815261013c60209081526040808320805460ff1916600117905561013d90915290204290555b8161013a60008282546111359190612670565b909155505033600090815261013b60205260408120805484929061115a908490612670565b909155505061012e546001600160a01b0316156111f85761012e5433600081815261013b60205260409081902054905163ca58544960e01b81526001600160a01b039093169263ca585449926111c592916004019182526001600160a01b0316602082015260400190565b600060405180830381600087803b1580156111df57600080fd5b505af11580156111f3573d6000803e3d6000fd5b505050505b61012f54611211906001600160a01b0316333085611a38565b60405182815233907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d906020015b60405180910390a250506001606655565b6001600160a01b038116600090815261013d60205260408120546101365461013754839161127d91612670565b611288906064612688565b9050816112a9576112a181670de0b6b3a764000061269f565b949350505050565b6101305442106112bd575060009392505050565b600082610130546112ce9190612688565b905060006112dc8442612688565b90506000826112eb838661269f565b6112fd90670de0b6b3a764000061269f565b61130791906126be565b61131985670de0b6b3a764000061269f565b6113239190612688565b979650505050505050565b60fc546001600160a01b031633146113585760405162461bcd60e51b81526004016107bf90612625565b606361013754826113699190612670565b11156113b75760405162461bcd60e51b815260206004820152601960248201527f6275726e202b20756e74616b65666565206973203e3d2039390000000000000060448201526064016107bf565b61013655565b60fc546001600160a01b031633146113e75760405162461bcd60e51b81526004016107bf90612625565b6101338190556040518181527ffb46ca5a5e06d4540d6387b930a7c978bce0db5f449ec6b3f5d07c6e1d44f2d39060200160405180910390a150565b600061013a546000141561143957506101355490565b61013a5461013454611449610e91565b6114539190612688565b61013154611461919061269f565b61147390670de0b6b3a764000061269f565b61147d91906126be565b6101355461090e9190612670565b60006114976001611a76565b905080156114af576000805461ff0019166101001790555b61013382905561013e80546001600160a01b038087166001600160a01b03199283161790925561012f80548684169083161790556065805492881692821692909217909155600161013655600361013755610132805490911661dead179055611516611b03565b61151e611b32565b611526611b61565b61152e611b90565b8015611574576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b33600090815261013b602052604090205461159590611bb7565b61012e546001600160a01b0316156116065761012e5460405163b650cf6b60e01b81523360048201526001600160a01b039091169063b650cf6b90602401600060405180830381600087803b1580156115ed57600080fd5b505af1158015611601573d6000803e3d6000fd5b505050505b61160e611d7b565b33600090815261013c60209081526040808320805460ff1916905561013d909152812055565b60fc546001600160a01b0316331461165e5760405162461bcd60e51b81526004016107bf90612625565b6001600160a01b0381166116c35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107bf565b6109f081611908565b60fc546001600160a01b031633146109f05760405162461bcd60e51b81526004016107bf90612625565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561172e5761172983611fbd565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561176757600080fd5b505afa925050508015611797575060408051601f3d908101601f1916820190925261179491810190612778565b60015b6117fa5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016107bf565b6000805160206128ff83398151915281146118695760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016107bf565b50611729838383612059565b60ca5460ff166118be5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016107bf565b60ca805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60fc80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60ca5460ff16156119a05760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016107bf565b60ca805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118eb3390565b6040516001600160a01b03831660248201526044810182905261172990849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261207e565b6040516001600160a01b0380851660248301528316604482015260648101829052611a709085906323b872dd60e01b90608401611a01565b50505050565b60008054610100900460ff1615611abd578160ff166001148015611a995750303b155b611ab55760405162461bcd60e51b81526004016107bf906127c8565b506000919050565b60005460ff808416911610611ae45760405162461bcd60e51b81526004016107bf906127c8565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff16611b2a5760405162461bcd60e51b81526004016107bf90612816565b610c8a612150565b600054610100900460ff16611b595760405162461bcd60e51b81526004016107bf90612816565b610c8a612180565b600054610100900460ff16611b885760405162461bcd60e51b81526004016107bf90612816565b610c8a6121b3565b600054610100900460ff16610c8a5760405162461bcd60e51b81526004016107bf90612816565b60026066541415611bda5760405162461bcd60e51b81526004016107bf90612791565b600260665533611be8611423565b61013555611bf4610e91565b610134556001600160a01b03811615611c3f57611c108161082d565b6001600160a01b0382166000908152610139602090815260408083209390935561013554610138909152919020555b60008211611c835760405162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b60448201526064016107bf565b61012e546001600160a01b031615611cf45761012e5460405163b650cf6b60e01b81523360048201526001600160a01b039091169063b650cf6b90602401600060405180830381600087803b158015611cdb57600080fd5b505af1158015611cef573d6000803e3d6000fd5b505050505b8161013a6000828254611d079190612688565b909155505033600090815261013b602052604081208054849290611d2c908490612688565b909155505061012f54611d49906001600160a01b031633846119d5565b60405182815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59060200161123f565b60026066541415611d9e5760405162461bcd60e51b81526004016107bf90612791565b600260665533611dac611423565b61013555611db8610e91565b610134556001600160a01b03811615611e0357611dd48161082d565b6001600160a01b0382166000908152610139602090815260408083209390935561013554610138909152919020555b33600090815261013960205260409020548015611fb4576000610130544211611f52576000611e3133611250565b90508015611f5057600068056bc75e2d63100000611e4f838661269f565b611e5991906126be565b9050600068056bc75e2d6310000061013654670de0b6b3a7640000611e7e919061269f565b611e88908761269f565b611e9291906126be565b9050600068056bc75e2d6310000061013754670de0b6b3a7640000611eb7919061269f565b611ec1908861269f565b611ecb91906126be565b6101325461012f54919250611eed916001600160a01b039081169116846119d5565b60655461012f54611f0b916001600160a01b039182169116836119d5565b61013e5461012f54611f2a916001600160a01b039182169116856119d5565b8082611f368589612688565b611f409190612688565b611f4a9190612688565b94505050505b505b336000818152610139602052604081205561012f54611f7d916001600160a01b0390911690836119d5565b60405181815233907fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e04869060200160405180910390a2505b50506001606655565b6001600160a01b0381163b61202a5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016107bf565b6000805160206128ff83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612062836121e1565b60008251118061206f5750805b1561172957611a708383612221565b60006120d3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166123159092919063ffffffff16565b80519091501561172957808060200190518101906120f19190612861565b6117295760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016107bf565b600054610100900460ff166121775760405162461bcd60e51b81526004016107bf90612816565b610c8a33611908565b600054610100900460ff166121a75760405162461bcd60e51b81526004016107bf90612816565b60ca805460ff19169055565b600054610100900460ff166121da5760405162461bcd60e51b81526004016107bf90612816565b6001606655565b6121ea81611fbd565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6122895760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016107bf565b600080846001600160a01b0316846040516122a491906128af565b600060405180830381855af49150503d80600081146122df576040519150601f19603f3d011682016040523d82523d6000602084013e6122e4565b606091505b509150915061230c828260405180606001604052806027815260200161291f6027913961232e565b95945050505050565b60606123248484600085612367565b90505b9392505050565b6060831561233d575081612327565b82511561234d5782518084602001fd5b8160405162461bcd60e51b81526004016107bf91906128cb565b6060824710156123c85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016107bf565b6001600160a01b0385163b61241f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107bf565b600080866001600160a01b0316858760405161243b91906128af565b60006040518083038185875af1925050503d8060008114612478576040519150601f19603f3d011682016040523d82523d6000602084013e61247d565b606091505b509150915061132382828661232e565b60006020828403121561249f57600080fd5b5035919050565b80356001600160a01b0381168114611afe57600080fd5b6000602082840312156124cf57600080fd5b612327826124a6565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561250157600080fd5b61250a836124a6565b9150602083013567ffffffffffffffff8082111561252757600080fd5b818501915085601f83011261253b57600080fd5b81358181111561254d5761254d6124d8565b604051601f8201601f19908116603f01168101908382118183101715612575576125756124d8565b8160405282815288602084870101111561258e57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600080604083850312156125c357600080fd5b6125cc836124a6565b946020939093013593505050565b600080600080608085870312156125f057600080fd5b6125f9856124a6565b9350612607602086016124a6565b9250612615604086016124a6565b9396929550929360600135925050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156126835761268361265a565b500190565b60008282101561269a5761269a61265a565b500390565b60008160001904831182151516156126b9576126b961265a565b500290565b6000826126db57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60006020828403121561278a57600080fd5b5051919050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60006020828403121561287357600080fd5b8151801515811461232757600080fd5b60005b8381101561289e578181015183820152602001612886565b83811115611a705750506000910152565b600082516128c1818460208701612883565b9190910192915050565b60208152600082518060208401526128ea816040850160208701612883565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122085e039b32e7fa781dcf039e850c7a288cebfcad5e51bef7f7baca38622d16b2164736f6c63430008090033