0x608060405234801561001057600080fd5b506004361061038e5760003560e01c8063672ec0bb116101de5780639b4fb9551161010f578063b88d4fde116100ad578063f2fde38b1161007c578063f2fde38b146108ff578063f8b2cb4f14610912578063fac3bda914610925578063fda9c2b21461093857600080fd5b8063b88d4fde1461088a578063c87b56dd1461089d578063e985e9c5146108b0578063f2b47d52146108ec57600080fd5b8063a22cb465116100e9578063a22cb4651461083e578063a3b1721914610851578063ab6a4fac14610864578063b7c682591461087757600080fd5b80639b4fb955146107535780639d6fac6f14610766578063a03937c51461078e57600080fd5b80637a7d49371161017c5780638da5cb5b116101565780638da5cb5b146106b3578063914fdbaf146106c457806395d89b41146106d757806395e26422146106df57600080fd5b80637a7d49371461068f5780638456cb591461069857806388c2a0bf146106a057600080fd5b806370a08231116101b857806370a0823114610658578063715018a61461066b57806375794a3c14610673578063796cd6b41461067c57600080fd5b8063672ec0bb1461060f5780636ed2cb3b146106225780636eeb7a361461064557600080fd5b80632ffb054e116102c357806346116e6f116102615780635663896e116102305780635663896e146105ce5780635c975abb146105e15780636352211e146105f357806366c42d1c1461060657600080fd5b806346116e6f1461056c5780634dfff04f146105955780634f6ccce7146105a8578063547a5eee146105bb57600080fd5b80633f4ba83a1161029d5780633f4ba83a1461052b57806341a5fc351461053357806342842e0e1461054657806345d9a1ce1461055957600080fd5b80632ffb054e146104f25780633c91cc18146105055780633ed247b01461051857600080fd5b80631889500c1161033057806323cb6a2c1161030a57806323cb6a2c146104a657806324e7a38a146104b95780632e333532146104cc5780632f745c59146104df57600080fd5b80631889500c1461046d5780631940a9361461048057806323b872dd1461049357600080fd5b8063095ea7b31161036c578063095ea7b3146103fb5780631412409a14610410578063150b7a021461042357806318160ddd1461045b57600080fd5b806301ffc9a71461039357806306fdde03146103bb578063081812fc146103d0575b600080fd5b6103a66103a1366004613a4c565b61094b565b60405190151581526020015b60405180910390f35b6103c3610976565b6040516103b29190613bd7565b6103e36103de366004613a86565b610a08565b6040516001600160a01b0390911681526020016103b2565b61040e61040936600461397d565b610aa2565b005b6000546103e3906001600160a01b031681565b6104426104313660046137ed565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016103b2565b600d545b6040519081526020016103b2565b6002546103e3906001600160a01b031681565b6103a661048e366004613a86565b610bb8565b61040e6104a13660046137b1565b610bde565b61040e6104b4366004613ab8565b610c0f565b61040e6104c7366004613763565b610ee3565b61045f6104da366004613ada565b610faf565b61045f6104ed36600461397d565b6110ed565b61040e610500366004613763565b611183565b61040e610513366004613763565b6111cf565b61040e610526366004613763565b61121b565b61040e611267565b61040e610541366004613763565b61129b565b61040e6105543660046137b1565b6112e7565b61040e6105673660046137b1565b611302565b6103e361057a366004613a86565b6022602052600090815260409020546001600160a01b031681565b61040e6105a336600461397d565b6113b7565b61045f6105b6366004613a86565b611464565b61040e6105c9366004613763565b6114f7565b61040e6105dc366004613a86565b611543565b600f54600160a01b900460ff166103a6565b6103e3610601366004613a86565b611586565b61045f60265481565b61045f61061d366004613a86565b6115fd565b6103a6610630366004613763565b60046020526000908152604090205460ff1681565b61040e610653366004613946565b611614565b61045f610666366004613763565b6116ee565b61040e611775565b61045f60205481565b61040e61068a366004613763565b6117a9565b61045f60235481565b61040e6117f5565b61045f6106ae366004613a86565b611827565b600f546001600160a01b03166103e3565b61040e6106d2366004613ab8565b611a89565b6103c3611e51565b6106f26106ed366004613a86565b611e60565b604080519a8b5260208b01999099526001600160401b03909716978901979097526060880194909452608087019290925260a086015261ffff90811660c08601521660e08401529015156101008301521515610120820152610140016103b2565b6103a6610761366004613ab8565b611ef1565b610779610774366004613a86565b611f46565b60405163ffffffff90911681526020016103b2565b6107f161079c366004613a86565b6021602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593946001600160401b0390931693919290919061ffff808216916201000090041688565b6040805198895260208901979097526001600160401b03909516958701959095526060860192909252608085015260a084015261ffff91821660c08401521660e0820152610100016103b2565b61040e61084c366004613946565b611f76565b61040e61085f3660046139a7565b61203b565b6103a6610872366004613a86565b61211d565b6103a6610885366004613a86565b6121b6565b61040e610898366004613887565b612248565b6103c36108ab366004613a86565b612280565b6103a66108be36600461377e565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205460ff1690565b6027546103e3906001600160a01b031681565b61040e61090d366004613763565b612367565b61045f610920366004613763565b612402565b6003546103e3906001600160a01b031681565b6001546103e3906001600160a01b031681565b60006001600160e01b0319821663780e9d6360e01b148061097057506109708261253a565b92915050565b60606005805461098590613e41565b80601f01602080910402602001604051908101604052809291908181526020018280546109b190613e41565b80156109fe5780601f106109d3576101008083540402835291602001916109fe565b820191906000526020600020905b8154815290600101906020018083116109e157829003601f168201915b5050505050905090565b6000818152600760205260408120546001600160a01b0316610a865760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600960205260409020546001600160a01b031690565b6000610aad82611586565b9050806001600160a01b0316836001600160a01b03161415610b1b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a7d565b336001600160a01b0382161480610b375750610b3781336108be565b610ba95760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a7d565b610bb3838361258a565b505050565b6000808211610bc657600080fd5b50600090815260216020526040902060050154151590565b610be833826125f8565b610c045760405162461bcd60e51b8152600401610a7d90613cd2565b610bb38383836126ef565b600f54600160a01b900460ff1615610c395760405162461bcd60e51b8152600401610a7d90613c3c565b600354604051636dfab87560e11b815260048101849052602481018390523360448201819052849284926001600160a01b039091169063dbf570ea90606401602060405180830381600087803b158015610c9257600080fd5b505af1158015610ca6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cca9190613a2f565b610d225760405162461bcd60e51b8152602060048201526024808201527f526f626f74446570656e64656e63793a20415353454d424c455f5649415f41556044820152632a24a7a760e11b6064820152608401610a7d565b6000858152602160209081526040918290208251610100810184528154815260018201549281019290925260028101546001600160401b0316928201929092526003820154606082015260048201546080820152600582015460a0820152600682015461ffff80821660c0840152620100009091041660e0820152610da69061289a565b610df25760405162461bcd60e51b815260206004820152601a60248201527f417373656d626c653a204d4154524f4e5f4e4f545f52454144590000000000006044820152606401610a7d565b6000858152602160209081526040918290208251610100810184528154815260018201549281019290925260028101546001600160401b0316928201929092526003820154606082015260048201546080820152600582015460a0820152600682015461ffff80821660c0840152620100009091041660e0820152610e769061289a565b610ebd5760405162461bcd60e51b8152602060048201526018602482015277417373656d626c653a20534952455f4e4f545f524541445960401b6044820152606401610a7d565b610ec787876128c2565b610ed057600080fd5b610eda87876128e3565b50505050505050565b600f546001600160a01b03163314610f0d5760405162461bcd60e51b8152600401610a7d90613c9d565b6000819050806001600160a01b03166354c15b826040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4b57600080fd5b505afa158015610f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f839190613a2f565b610f8c57600080fd5b602780546001600160a01b0319166001600160a01b039290921691909117905550565b3360009081526004602052604081205460ff16610ffd5760405162461bcd60e51b815260206004820152600c60248201526b27b7363c9031b932b0ba37b960a11b6044820152606401610a7d565b60015482906001600160a01b0316158061109157506001546040516311205bed60e11b81526001600160a01b03838116600483015290911690632240b7da90602401602060405180830381600087803b15801561105957600080fd5b505af115801561106d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110919190613a2f565b6110d55760405162461bcd60e51b815260206004820152601560248201527421b932b0ba34b7b7103737ba1030b63637bbb2b21760591b6044820152606401610a7d565b6110e287878787876129bb565b979650505050505050565b60006110f8836116ee565b821061115a5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a7d565b506001600160a01b03919091166000908152600b60209081526040808320938352929052205490565b6000546001600160a01b031633146111ad5760405162461bcd60e51b8152600401610a7d90613c66565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111f95760405162461bcd60e51b8152600401610a7d90613c66565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b031633146112455760405162461bcd60e51b8152600401610a7d90613c9d565b602580546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b031633146112915760405162461bcd60e51b8152600401610a7d90613c9d565b611299612b55565b565b6000546001600160a01b031633146112c55760405162461bcd60e51b8152600401610a7d90613c66565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610bb383838360405180602001604052806000815250612248565b600f546001600160a01b0316331461132c5760405162461bcd60e51b8152600401610a7d90613c9d565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b15801561137657600080fd5b505af115801561138a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ae9190613a2f565b610bb357600080fd5b600f54600160a01b900460ff16156113e15760405162461bcd60e51b8152600401610a7d90613c3c565b80336113ec82611586565b6001600160a01b0316146114355760405162461bcd60e51b815260206004820152601060248201526f27b7363c903937b137ba1037bbb732b960811b6044820152606401610a7d565b50600090815260226020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b600061146f600d5490565b82106114d25760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a7d565b600d82815481106114e5576114e5613f0d565b90600052602060002001549050919050565b6000546001600160a01b031633146115215760405162461bcd60e51b8152600401610a7d90613c66565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b0316331461156d5760405162461bcd60e51b8152600401610a7d90613c9d565b60105463ffffffff16811061158157600080fd5b602355565b6000818152600760205260408120546001600160a01b0316806109705760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a7d565b601281600e811061160d57600080fd5b0154905081565b6000546001600160a01b0316331461163e5760405162461bcd60e51b8152600401610a7d90613c66565b6001600160a01b03821660009081526004602052604090205460ff161515811515141561166a57600080fd5b6001600160a01b03821660008181526004602052604090819020805484151560ff19909116179055517fd303214f6629790e79ac3bad2625a3c6a0b082ce2adfa91dc25662bbf31428bc906116e29084151581526040602082018190526006908201526563726561746560d01b606082015260800190565b60405180910390a25050565b60006001600160a01b0382166117595760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a7d565b506001600160a01b031660009081526008602052604090205490565b600f546001600160a01b0316331461179f5760405162461bcd60e51b8152600401610a7d90613c9d565b6112996000612bf2565b600f546001600160a01b031633146117d35760405162461bcd60e51b8152600401610a7d90613c9d565b602480546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b0316331461181f5760405162461bcd60e51b8152600401610a7d90613c9d565b611299612c44565b600f54600090600160a01b900460ff16156118545760405162461bcd60e51b8152600401610a7d90613c3c565b6000828152602160205260409020600181015461187057600080fd5b6040805161010081018252825481526001830154602082015260028301546001600160401b0316918101919091526003820154606082015260048201546080820152600582015460a0820152600682015461ffff80821660c0840152620100009091041660e08201526118e290612ca9565b6119255760405162461bcd60e51b81526020600482015260146024820152734769766542697274683a204e4f545f524541445960601b6044820152606401610a7d565b600581015460008181526021602052604090206006808401549082015461ffff62010000928390048116929091041681101561196c5750600681015462010000900461ffff165b6027548454835460028701546000936001600160a01b031692630d9f5aed9290916119a2906001906001600160401b0316613db3565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526001600160401b03166044820152606401602060405180830381600087803b1580156119f157600080fd5b505af1158015611a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a299190613a9f565b90506000611a3688611586565b90506000611a5b898860050154866001611a509190613d53565b61ffff1686866129bb565b6000600589018190556026805492935090611a7583613e2a565b90915550909750505050505050505b919050565b600f54600160a01b900460ff1615611ab35760405162461bcd60e51b8152600401610a7d90613c3c565b8133611abe82611586565b6001600160a01b031614611b075760405162461bcd60e51b815260206004820152601060248201526f27b7363c903937b137ba1037bbb732b960811b6044820152606401610a7d565b600354604051630a06443960e41b81526004810185905260248101849052849184916001600160a01b039091169063a064439090604401602060405180830381600087803b158015611b5857600080fd5b505af1158015611b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b909190613a2f565b611bdc5760405162461bcd60e51b815260206004820152601960248201527f526f626f74446570656e64656e63793a20415353454d424c45000000000000006044820152606401610a7d565b611be68486612cd2565b611bef57600080fd5b6000858152602160209081526040918290208251610100810184528154815260018201549281019290925260028101546001600160401b0316928201929092526003820154606082015260048201546080820152600582015460a0820152600682015461ffff80821660c0840152620100009091041660e0820152611c739061289a565b611cbf5760405162461bcd60e51b815260206004820152601a60248201527f417373656d626c653a204d4154524f4e5f4e4f545f52454144590000000000006044820152606401610a7d565b6000858152602160209081526040918290208251610100810184528154815260018201549281019290925260028101546001600160401b0316928201929092526003820154606082015260048201546080820152600582015460a0820152600682015461ffff80821660c0840152620100009091041660e0820152611d439061289a565b611d8a5760405162461bcd60e51b8152602060048201526018602482015277417373656d626c653a20534952455f4e4f545f524541445960401b6044820152606401610a7d565b611d9682888389612d30565b611de25760405162461bcd60e51b815260206004820152601e60248201527f417373656d626c653a20534952455f504149525f4e4f545f4d4154494e4700006044820152606401610a7d565b6006808301549082015461ffff9182169116811015611e065750600681015461ffff165b602554602454611e3d916001600160a01b0390811691339116601261ffff8616600e8110611e3657611e36613f0d565b0154612e05565b611e4788886128e3565b5050505050505050565b60606006805461098590613e41565b60008080808080808080808a81611e7682611586565b6001600160a01b03161415611e8a57600080fd5b50505060009889525050602160205250506040909420805460018201546002830154600384015460048501546005860154600690960154949a9399506001600160401b0390921697509550935061ffff808316926201000090041690831515904388111590565b6000808311611eff57600080fd5b60008211611f0c57600080fd5b6000838152602160205260408082208483529120611f2c82868387612d30565b8015611f3d5750611f3d8486612cd2565b95945050505050565b601081600e8110611f5657600080fd5b60089182820401919006600402915054906101000a900463ffffffff1681565b6001600160a01b038216331415611fcf5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a7d565b336000818152600a602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600f546001600160a01b031633146120655760405162461bcd60e51b8152600401610a7d90613c9d565b60005b600e8160ff16101561210b5760ff8116156120f95781612089600183613ddb565b60ff16600e811061209c5761209c613f0d565b6020020151828260ff16600e81106120b6576120b6613f0d565b602002015110156120f95760405162461bcd60e51b815260206004820152600d60248201526c11995949dcc81a5b9d985b1a59609a1b6044820152606401610a7d565b8061210381613e97565b915050612068565b50612119601282600e6136f9565b5050565b600080821161212b57600080fd5b6000828152602160209081526040918290208251610100810184528154815260018201549281019290925260028101546001600160401b0316928201929092526003820154606082015260048201546080820152600582015460a0820152600682015461ffff80821660c0840152620100009091041660e08201526121af9061289a565b9392505050565b60008082116121c457600080fd5b6000828152602160209081526040918290208251610100810184528154815260018201549281019290925260028101546001600160401b0316928201929092526003820154606082015260048201546080820152600582015460a0820152600682015461ffff80821660c0840152620100009091041660e08201526121af90612ca9565b61225233836125f8565b61226e5760405162461bcd60e51b8152600401610a7d90613cd2565b61227a84848484612f35565b50505050565b6000818152600760205260409020546060906001600160a01b03166122ff5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610a7d565b600061231660408051602081019091526000815290565b9050600081511161233657604051806020016040528060008152506121af565b8061234084612f68565b604051602001612351929190613b6b565b6040516020818303038152906040529392505050565b600f546001600160a01b031633146123915760405162461bcd60e51b8152600401610a7d90613c9d565b6001600160a01b0381166123f65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a7d565b6123ff81612bf2565b50565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561244457600080fd5b505afa158015612458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109709190613a9f565b3b151590565b6001600160a01b0383166124dd576124d881600d80546000838152600e60205260408120829055600182018355919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50155565b612500565b816001600160a01b0316836001600160a01b031614612500576125008382613065565b6001600160a01b03821661251757610bb381613102565b826001600160a01b0316826001600160a01b031614610bb357610bb382826131b1565b60006001600160e01b031982166380ac58cd60e01b148061256b57506001600160e01b03198216635b5e139f60e01b145b8061097057506301ffc9a760e01b6001600160e01b0319831614610970565b600081815260096020526040902080546001600160a01b0319166001600160a01b03841690811790915581906125bf82611586565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600760205260408120546001600160a01b03166126715760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a7d565b600061267c83611586565b9050806001600160a01b0316846001600160a01b031614806126b75750836001600160a01b03166126ac84610a08565b6001600160a01b0316145b806126e757506001600160a01b038082166000908152600a602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661270282611586565b6001600160a01b03161461276a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610a7d565b6001600160a01b0382166127cc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a7d565b6127d78383836131f5565b6127e260008261258a565b6001600160a01b038316600090815260086020526040812080546001929061280b908490613d9c565b90915550506001600160a01b0382166000908152600860205260408120805460019290612839908490613d70565b909155505060008181526007602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008160a001516000148015610970575050604001516001600160401b034381169116111590565b600082815260216020526040808220838352908220611f3d82868387612d30565b6000818152602160205260408082208483529120600581018390556129078261338d565b6129108161338d565b60008481526022602052604080822080546001600160a01b031990811690915585835290822080549091169055602680549161294b83613e7c565b91905055507f241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b8061297a85611586565b6002830154604080516001600160a01b0390931683526020830188905282018690526001600160401b0316606082015260800160405180910390a150505050565b60008361ffff1684146129cd57600080fd5b60006129da600286613d88565b9050600d8161ffff1611156129ed5750600d5b600060405180610100016040528086815260200142815260200160006001600160401b03168152602001898152602001888152602001600081526020018361ffff1681526020018761ffff1681525090506020549250612a4d8484613454565b600083815260216020908152604080832084518155828501516001820155908401516002820180546001600160401b0390921667ffffffffffffffff19909216919091179055606084015160038201556080840151600482015560a0840151600582015560c08401516006909101805460e086015161ffff908116620100000263ffffffff19909216931692909217919091179055805491612aee83613e7c565b9091555050606080820151608083015160408051928352602083019190915281018790526001600160a01b0386169185917f7c264ef901865cde65f518c51467e4a4a4c3c13901a392463813be21466cf51b910160405180910390a3505095945050505050565b600f54600160a01b900460ff16612ba55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a7d565b600f805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600f80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600f54600160a01b900460ff1615612c6e5760405162461bcd60e51b8152600401610a7d90613c3c565b600f805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612bd53390565b60008160a00151600014158015610970575050604001516001600160401b034381169116111590565b600080612cde83611586565b90506000612ceb85611586565b9050806001600160a01b0316826001600160a01b03161480611f3d57506000858152602260205260409020546001600160a01b03908116908316149250505092915050565b600081841415612d42575060006126e7565b8185600301541480612d575750818560040154145b15612d64575060006126e7565b8383600301541480612d795750838360040154145b15612d86575060006126e7565b60038301541580612d9957506003850154155b15612da6575060016126e7565b846003015483600301541480612dc3575084600401548360030154145b15612dd0575060006126e7565b846003015483600401541480612ded575084600401548360040154145b15612dfa575060006126e7565b506001949350505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612e699190613b4f565b6000604051808303816000865af19150503d8060008114612ea6576040519150601f19603f3d011682016040523d82523d6000602084013e612eab565b606091505b5091509150818015612ed5575080511580612ed5575080806020019051810190612ed59190613a2f565b612f2d5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b6064820152608401610a7d565b505050505050565b612f408484846126ef565b612f4c8484848461346e565b61227a5760405162461bcd60e51b8152600401610a7d90613bea565b606081612f8c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612fb65780612fa081613e7c565b9150612faf9050600a83613d88565b9150612f90565b6000816001600160401b03811115612fd057612fd0613f23565b6040519080825280601f01601f191660200182016040528015612ffa576020820181803683370190505b5090505b84156126e75761300f600183613d9c565b915061301c600a86613eb7565b613027906030613d70565b60f81b81838151811061303c5761303c613f0d565b60200101906001600160f81b031916908160001a90535061305e600a86613d88565b9450612ffe565b60006001613072846116ee565b61307c9190613d9c565b6000838152600c60205260409020549091508082146130cf576001600160a01b0384166000908152600b602090815260408083208584528252808320548484528184208190558352600c90915290208190555b506000918252600c602090815260408084208490556001600160a01b039094168352600b81528383209183525290812055565b600d5460009061311490600190613d9c565b6000838152600e6020526040812054600d805493945090928490811061313c5761313c613f0d565b9060005260206000200154905080600d838154811061315d5761315d613f0d565b6000918252602080832090910192909255828152600e9091526040808220849055858252812055600d80548061319557613195613ef7565b6001900381819060005260206000200160009055905550505050565b60006131bc836116ee565b6001600160a01b039093166000908152600b602090815260408083208684528252808320859055938252600c9052919091209190915550565b6002548390839083906001600160a01b0316158061329c5750600254604051637bf5e1cd60e11b81526001600160a01b0385811660048301528481166024830152604482018490529091169063f7ebc39a90606401602060405180830381600087803b15801561326457600080fd5b505af1158015613278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329c9190613a2f565b6132e85760405162461bcd60e51b815260206004820152601960248201527f526f626f74446570656e64656e63793a205452414e53464552000000000000006044820152606401610a7d565b6132f3868686612482565b6001600160a01b0386161561331f57600084815260226020526040902080546001600160a01b03191690555b600f54600160a01b900460ff1615612f2d5760405162461bcd60e51b815260206004820152602b60248201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760448201526a1a1a5b19481c185d5cd95960aa1b6064820152608401610a7d565b602354600682015443919060109061ffff16600e81106133af576133af613f0d565b600891828204019190066004029054906101000a900463ffffffff1663ffffffff166133db9190613d88565b6133e59190613d70565b60028201805467ffffffffffffffff19166001600160401b03929092169190911790556006810154600d61ffff90911610156123ff576006810180546001919060009061343790849061ffff16613d53565b92506101000a81548161ffff021916908361ffff16021790555050565b612119828260405180602001604052806000815250613578565b60006001600160a01b0384163b1561357057604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906134b2903390899088908890600401613b9a565b602060405180830381600087803b1580156134cc57600080fd5b505af19250505080156134fc575060408051601f3d908101601f191682019092526134f991810190613a69565b60015b613556573d80801561352a576040519150601f19603f3d011682016040523d82523d6000602084013e61352f565b606091505b50805161354e5760405162461bcd60e51b8152600401610a7d90613bea565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506126e7565b5060016126e7565b61358283836135ab565b61358f600084848461346e565b610bb35760405162461bcd60e51b8152600401610a7d90613bea565b6001600160a01b0382166136015760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a7d565b6000818152600760205260409020546001600160a01b0316156136665760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a7d565b613672600083836131f5565b6001600160a01b038216600090815260086020526040812080546001929061369b908490613d70565b909155505060008181526007602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82600e8101928215613727579160200282015b8281111561372757825182559160200191906001019061370c565b50613733929150613737565b5090565b5b808211156137335760008155600101613738565b80356001600160a01b0381168114611a8457600080fd5b60006020828403121561377557600080fd5b6121af8261374c565b6000806040838503121561379157600080fd5b61379a8361374c565b91506137a86020840161374c565b90509250929050565b6000806000606084860312156137c657600080fd5b6137cf8461374c565b92506137dd6020850161374c565b9150604084013590509250925092565b60008060008060006080868803121561380557600080fd5b61380e8661374c565b945061381c6020870161374c565b93506040860135925060608601356001600160401b038082111561383f57600080fd5b818801915088601f83011261385357600080fd5b81358181111561386257600080fd5b89602082850101111561387457600080fd5b9699959850939650602001949392505050565b6000806000806080858703121561389d57600080fd5b6138a68561374c565b935060206138b581870161374c565b93506040860135925060608601356001600160401b03808211156138d857600080fd5b818801915088601f8301126138ec57600080fd5b8135818111156138fe576138fe613f23565b613910601f8201601f19168501613d23565b9150808252898482850101111561392657600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561395957600080fd5b6139628361374c565b9150602083013561397281613f39565b809150509250929050565b6000806040838503121561399057600080fd5b6139998361374c565b946020939093013593505050565b60006101c08083850312156139bb57600080fd5b83601f8401126139ca57600080fd5b6040518181018181106001600160401b03821117156139eb576139eb613f23565b60405280848381018710156139ff57600080fd5b600093505b600e841015613a2457803582526001939093019260209182019101613a04565b509095945050505050565b600060208284031215613a4157600080fd5b81516121af81613f39565b600060208284031215613a5e57600080fd5b81356121af81613f47565b600060208284031215613a7b57600080fd5b81516121af81613f47565b600060208284031215613a9857600080fd5b5035919050565b600060208284031215613ab157600080fd5b5051919050565b60008060408385031215613acb57600080fd5b50508035926020909101359150565b600080600080600060a08688031215613af257600080fd5b85359450602086013593506040860135925060608601359150613b176080870161374c565b90509295509295909350565b60008151808452613b3b816020860160208601613dfe565b601f01601f19169290920160200192915050565b60008251613b61818460208701613dfe565b9190910192915050565b60008351613b7d818460208801613dfe565b835190830190613b91818360208801613dfe565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613bcd90830184613b23565b9695505050505050565b6020815260006121af6020830184613b23565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f4f6e6c792077686974656c697374207365747465722063616e20646f2e000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b604051601f8201601f191681016001600160401b0381118282101715613d4b57613d4b613f23565b604052919050565b600061ffff808316818516808303821115613b9157613b91613ecb565b60008219821115613d8357613d83613ecb565b500190565b600082613d9757613d97613ee1565b500490565b600082821015613dae57613dae613ecb565b500390565b60006001600160401b0383811690831681811015613dd357613dd3613ecb565b039392505050565b600060ff821660ff841680821015613df557613df5613ecb565b90039392505050565b60005b83811015613e19578181015183820152602001613e01565b8381111561227a5750506000910152565b600081613e3957613e39613ecb565b506000190190565b600181811c90821680613e5557607f821691505b60208210811415613e7657634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613e9057613e90613ecb565b5060010190565b600060ff821660ff811415613eae57613eae613ecb565b60010192915050565b600082613ec657613ec6613ee1565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146123ff57600080fd5b6001600160e01b0319811681146123ff57600080fdfea2646970667358221220f53965baae03ad211bd34d814e8bb59e9e92365716a820179f07a79fd426289b64736f6c63430008070033