60a06040523060805234801561001457600080fd5b5060805161296b61004c6000396000818161072c01528181610775015281816108b5015281816108f5015261096d015261296b6000f3fe6080604052600436106101bb5760003560e01c80636352211e116100ec578063a22cb4651161008a578063c87b56dd11610064578063c87b56dd146104bf578063e985e9c5146104df578063f2fde38b146104ff578063f62d18881461051f57600080fd5b8063a22cb4651461046a578063aaf10f421461048a578063b88d4fde1461049f57600080fd5b806370a08231116100c657806370a0823114610402578063715018a6146104225780638da5cb5b1461043757806395d89b411461045557600080fd5b80636352211e146103ac57806367243482146103cc5780636e1bd323146103ec57600080fd5b80632a55205a1161015957806342842e0e1161013357806342842e0e146103445780634f1ef2861461036457806352d1902d1461037757806355f804b31461038c57600080fd5b80632a55205a146102dd5780633659cfe61461031c5780633ccfd60b1461033c57600080fd5b8063081812fc11610195578063081812fc14610240578063095ea7b31461027857806318160ddd1461029857806323b872dd146102bd57600080fd5b806301ffc9a7146101c757806304634d8d146101fc57806306fdde031461021e57600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101e76101e2366004612035565b61053f565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5061021c61021736600461206e565b61055f565b005b34801561022a57600080fd5b50610233610575565b6040516101f39190612101565b34801561024c57600080fd5b5061026061025b366004612114565b610608565b6040516001600160a01b0390911681526020016101f3565b34801561028457600080fd5b5061021c61029336600461212d565b610630565b3480156102a457600080fd5b506102af6101605481565b6040519081526020016101f3565b3480156102c957600080fd5b5061021c6102d8366004612157565b610649565b3480156102e957600080fd5b506102fd6102f8366004612193565b610674565b604080516001600160a01b0390931683526020830191909152016101f3565b34801561032857600080fd5b5061021c6103373660046121b5565b610722565b61021c6107f3565b34801561035057600080fd5b5061021c61035f366004612157565b610886565b61021c61037236600461227c565b6108ab565b34801561038357600080fd5b506102af610960565b34801561039857600080fd5b5061021c6103a73660046122ca565b610a13565b3480156103b857600080fd5b506102606103c7366004612114565b610a28565b3480156103d857600080fd5b5061021c6103e7366004612358565b610a89565b3480156103f857600080fd5b506102af61271081565b34801561040e57600080fd5b506102af61041d3660046121b5565b610baf565b34801561042e57600080fd5b5061021c610c36565b34801561044357600080fd5b506097546001600160a01b0316610260565b34801561046157600080fd5b50610233610c4a565b34801561047657600080fd5b5061021c6104853660046123c4565b610c5a565b34801561049657600080fd5b50610260610c6e565b3480156104ab57600080fd5b5061021c6104ba3660046123f5565b610c7d565b3480156104cb57600080fd5b506102336104da366004612114565b610ca3565b3480156104eb57600080fd5b506101e76104fa36600461245d565b610d0a565b34801561050b57600080fd5b5061021c61051a3660046121b5565b610d39565b34801561052b57600080fd5b5061021c61053a3660046122ca565b610daf565b600061054a82610f38565b80610559575061055982610f73565b92915050565b610567610fa8565b6105718282611002565b5050565b606061012d805461058590612490565b80601f01602080910402602001604051908101604052809291908181526020018280546105b190612490565b80156105fe5780601f106105d3576101008083540402835291602001916105fe565b820191906000526020600020905b8154815290600101906020018083116105e157829003601f168201915b5050505050905090565b6000610613826110ff565b50600090815261013160205260409020546001600160a01b031690565b8161063a8161115f565b61064483836111a3565b505050565b826001600160a01b0381163314610663576106633361115f565b61066e8484846112b3565b50505050565b600082815260fc602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b03169282019290925282916106e957506040805180820190915260fb546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610708906001600160601b0316876124e0565b61071291906124f7565b91519350909150505b9250929050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107735760405162461bcd60e51b815260040161076a90612519565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107a56112e4565b6001600160a01b0316146107cb5760405162461bcd60e51b815260040161076a90612565565b6107d481611300565b604080516000808252602082019092526107f091839190611308565b50565b6107fb610fa8565b604051600090339047908381818185875af1925050503d806000811461083d576040519150601f19603f3d011682016040523d82523d6000602084013e610842565b606091505b50509050806107f05760405162461bcd60e51b815260206004820152601060248201526f7472616e73666572206661696c65642160801b604482015260640161076a565b826001600160a01b03811633146108a0576108a03361115f565b61066e848484611473565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036108f35760405162461bcd60e51b815260040161076a90612519565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109256112e4565b6001600160a01b03161461094b5760405162461bcd60e51b815260040161076a90612565565b61095482611300565b61057182826001611308565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a005760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161076a565b506000805160206128ef83398151915290565b610a1b610fa8565b61015f61057182826125ff565b600081815261012f60205260408120546001600160a01b0316806105595760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161076a565b610a91610fa8565b828114610ad05760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b604482015260640161076a565b6101605461271090610ae39085906126bf565b1115610b275760405162461bcd60e51b815260206004820152601360248201527213585e081cdd5c1c1b1e48195e18d959591959606a1b604482015260640161076a565b838390506101606000828254610b3d91906126bf565b90915550600090505b83811015610ba857610b96858583818110610b6357610b636126d2565b9050602002016020810190610b7891906121b5565b848484818110610b8a57610b8a6126d2565b9050602002013561148e565b80610ba0816126e8565b915050610b46565b5050505050565b60006001600160a01b038216610c195760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161076a565b506001600160a01b03166000908152610130602052604090205490565b610c3e610fa8565b610c48600061161d565b565b606061012e805461058590612490565b81610c648161115f565b610644838361166f565b6000610c786112e4565b905090565b836001600160a01b0381163314610c9757610c973361115f565b610ba88585858561167a565b6060610cae826110ff565b6000610cb86116ac565b90506000815111610cd85760405180602001604052806000815250610d03565b80610ce2846116bc565b604051602001610cf3929190612701565b6040516020818303038152906040525b9392505050565b6001600160a01b0391821660009081526101326020908152604080832093909416825291909152205460ff1690565b610d41610fa8565b6001600160a01b038116610da65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076a565b6107f08161161d565b600054610100900460ff1615808015610dcf5750600054600160ff909116105b80610de95750303b158015610de9575060005460ff166001145b610e4c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161076a565b6000805460ff191660011790558015610e6f576000805461ff0019166101001790555b610ec16040518060400160405280600c81526020016b43727970746f4d6f7269657360a01b8152506040518060400160405280600c81526020016b43525950544f4d4f5249455360a01b81525061174f565b610ec9611780565b610ed16117af565b610ed96117af565b610ee16117d6565b61015f610eee83826125ff565b508015610571576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60006001600160e01b031982166380ac58cd60e01b148061054a57506001600160e01b03198216635b5e139f60e01b14806105595750610559825b60006001600160e01b0319821663152a902d60e11b148061055957506301ffc9a760e01b6001600160e01b0319831614610559565b6097546001600160a01b03163314610c485760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161076a565b6127106001600160601b03821611156110705760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b606482015260840161076a565b6001600160a01b0382166110c65760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640161076a565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b9091021760fb55565b600081815261012f60205260409020546001600160a01b03166107f05760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161076a565b69c617113400112233445560005230601a5280603a52600080604460166daaeb6d7670e522a718067333cd4e5afa61119b573d6000803e3d6000fd5b6000603a5250565b60006111ae82610a28565b9050806001600160a01b0316836001600160a01b03160361121b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161076a565b336001600160a01b038216148061123757506112378133610d0a565b6112a95760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161076a565b61064483836117f5565b6112bd3382611864565b6112d95760405162461bcd60e51b815260040161076a90612730565b6106448383836118c3565b6000805160206128ef833981519152546001600160a01b031690565b6107f0610fa8565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561133b5761064483611a2a565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611395575060408051601f3d908101601f191682019092526113929181019061277d565b60015b6113f85760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161076a565b6000805160206128ef83398151915281146114675760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161076a565b50610644838383611ac6565b61064483838360405180602001604052806000815250610c7d565b6001600160a01b0382166114e45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161076a565b600081815261012f60205260409020546001600160a01b03161561154a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161076a565b600081815261012f60205260409020546001600160a01b0316156115b05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161076a565b6001600160a01b0382166000818152610130602090815260408083208054600101905584835261012f90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610571338383611aeb565b6116843383611864565b6116a05760405162461bcd60e51b815260040161076a90612730565b61066e84848484611bba565b606061015f805461058590612490565b606060006116c983611bed565b600101905060008167ffffffffffffffff8111156116e9576116e96121d0565b6040519080825280601f01601f191660200182016040528015611713576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461171d57509392505050565b600054610100900460ff166117765760405162461bcd60e51b815260040161076a90612796565b6105718282611cc5565b600054610100900460ff166117a75760405162461bcd60e51b815260040161076a90612796565b610c48611d07565b600054610100900460ff16610c485760405162461bcd60e51b815260040161076a90612796565b610c48733cc6cdda760b79bafa08df41ecfa224f810dceb66001611d37565b60008181526101316020526040902080546001600160a01b0319166001600160a01b038416908117909155819061182b82610a28565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061187083610a28565b9050806001600160a01b0316846001600160a01b0316148061189757506118978185610d0a565b806118bb5750836001600160a01b03166118b084610608565b6001600160a01b0316145b949350505050565b826001600160a01b03166118d682610a28565b6001600160a01b0316146118fc5760405162461bcd60e51b815260040161076a906127e1565b6001600160a01b03821661195e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161076a565b826001600160a01b031661197182610a28565b6001600160a01b0316146119975760405162461bcd60e51b815260040161076a906127e1565b60008181526101316020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652610130855283862080546000190190559087168086528386208054600101905586865261012f90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b0381163b611a975760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161076a565b6000805160206128ef83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611acf83611dac565b600082511180611adc5750805b156106445761066e8383611dec565b816001600160a01b0316836001600160a01b031603611b4c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161076a565b6001600160a01b0383811660008181526101326020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611bc58484846118c3565b611bd184848484611ee0565b61066e5760405162461bcd60e51b815260040161076a90612826565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611c2c5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611c58576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611c7657662386f26fc10000830492506010015b6305f5e1008310611c8e576305f5e100830492506008015b6127108310611ca257612710830492506004015b60648310611cb4576064830492506002015b600a83106105595760010192915050565b600054610100900460ff16611cec5760405162461bcd60e51b815260040161076a90612796565b61012d611cf983826125ff565b5061012e61064482826125ff565b600054610100900460ff16611d2e5760405162461bcd60e51b815260040161076a90612796565b610c483361161d565b6001600160a01b0390911690637d3e3dbe81611d645782611d5d5750634420e486611d64565b5063a0af29035b8060e01b60005230600452826024526004600060446000806daaeb6d7670e522a718067333cd4e5af1611da2578060005160e01c03611da257600080fd5b5060006024525050565b611db581611a2a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b611e545760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161076a565b600080846001600160a01b031684604051611e6f9190612878565b600060405180830381855af49150503d8060008114611eaa576040519150601f19603f3d011682016040523d82523d6000602084013e611eaf565b606091505b5091509150611ed7828260405180606001604052806027815260200161290f60279139611fe1565b95945050505050565b60006001600160a01b0384163b15611fd657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611f24903390899088908890600401612894565b6020604051808303816000875af1925050508015611f5f575060408051601f3d908101601f19168201909252611f5c918101906128d1565b60015b611fbc573d808015611f8d576040519150601f19603f3d011682016040523d82523d6000602084013e611f92565b606091505b508051600003611fb45760405162461bcd60e51b815260040161076a90612826565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506118bb565b506001949350505050565b60608315611ff0575081610d03565b610d0383838151156120055781518083602001fd5b8060405162461bcd60e51b815260040161076a9190612101565b6001600160e01b0319811681146107f057600080fd5b60006020828403121561204757600080fd5b8135610d038161201f565b80356001600160a01b038116811461206957600080fd5b919050565b6000806040838503121561208157600080fd5b61208a83612052565b915060208301356001600160601b03811681146120a657600080fd5b809150509250929050565b60005b838110156120cc5781810151838201526020016120b4565b50506000910152565b600081518084526120ed8160208601602086016120b1565b601f01601f19169290920160200192915050565b602081526000610d0360208301846120d5565b60006020828403121561212657600080fd5b5035919050565b6000806040838503121561214057600080fd5b61214983612052565b946020939093013593505050565b60008060006060848603121561216c57600080fd5b61217584612052565b925061218360208501612052565b9150604084013590509250925092565b600080604083850312156121a657600080fd5b50508035926020909101359150565b6000602082840312156121c757600080fd5b610d0382612052565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612201576122016121d0565b604051601f8501601f19908116603f01168101908282118183101715612229576122296121d0565b8160405280935085815286868601111561224257600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261226d57600080fd5b610d03838335602085016121e6565b6000806040838503121561228f57600080fd5b61229883612052565b9150602083013567ffffffffffffffff8111156122b457600080fd5b6122c08582860161225c565b9150509250929050565b6000602082840312156122dc57600080fd5b813567ffffffffffffffff8111156122f357600080fd5b8201601f8101841361230457600080fd5b6118bb848235602084016121e6565b60008083601f84011261232557600080fd5b50813567ffffffffffffffff81111561233d57600080fd5b6020830191508360208260051b850101111561071b57600080fd5b6000806000806040858703121561236e57600080fd5b843567ffffffffffffffff8082111561238657600080fd5b61239288838901612313565b909650945060208701359150808211156123ab57600080fd5b506123b887828801612313565b95989497509550505050565b600080604083850312156123d757600080fd5b6123e083612052565b9150602083013580151581146120a657600080fd5b6000806000806080858703121561240b57600080fd5b61241485612052565b935061242260208601612052565b925060408501359150606085013567ffffffffffffffff81111561244557600080fd5b6124518782880161225c565b91505092959194509250565b6000806040838503121561247057600080fd5b61247983612052565b915061248760208401612052565b90509250929050565b600181811c908216806124a457607f821691505b6020821081036124c457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610559576105596124ca565b60008261251457634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b601f82111561064457600081815260208120601f850160051c810160208610156125d85750805b601f850160051c820191505b818110156125f7578281556001016125e4565b505050505050565b815167ffffffffffffffff811115612619576126196121d0565b61262d816126278454612490565b846125b1565b602080601f831160018114612662576000841561264a5750858301515b600019600386901b1c1916600185901b1785556125f7565b600085815260208120601f198616915b8281101561269157888601518255948401946001909101908401612672565b50858210156126af5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820180821115610559576105596124ca565b634e487b7160e01b600052603260045260246000fd5b6000600182016126fa576126fa6124ca565b5060010190565b600083516127138184602088016120b1565b8351908301906127278183602088016120b1565b01949350505050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60006020828403121561278f57600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000825161288a8184602087016120b1565b9190910192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906128c7908301846120d5565b9695505050505050565b6000602082840312156128e357600080fd5b8151610d038161201f56fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212203d4f85f60a25ed412b12cc3fd9ec14b7e4cb9f60df3cdfabd93e069ff2077b1b64736f6c63430008110033