60806040526001600c5534801561001557600080fd5b50604080518082018252601281527129bab9b434a9bbb0b8102628102a37b5b2b760711b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fefbffe65652a145845c9bc8d0532945be6b9830fe1e9966c887bd298e551ac83818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556124a7806101106000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a71461040d578063d505accf14610420578063dd62ed3e14610433578063fff6cae91461045e57600080fd5b8063ba9a7a56146103de578063bc25cf77146103e7578063c45a0155146103fa57600080fd5b80637ecebe00116100d35780637ecebe001461036157806389afcb441461038157806395d89b41146103a9578063a9059cbb146103cb57600080fd5b80636a6278421461032557806370a08231146103385780637464fc3d1461035857600080fd5b806323b872dd116101665780633644e515116101405780633644e515146102f7578063485cc955146103005780635909c0d5146103135780635a3d54931461031c57600080fd5b806323b872dd146102a357806330adf81f146102b6578063313ce567146102dd57600080fd5b8063022c0d9f146101ae57806306fdde03146101c35780630902f1ac1461020a578063095ea7b31461023e5780630dfe16811461026157806318160ddd1461028c575b600080fd5b6101c16101bc36600461201c565b610466565b005b6101f46040518060400160405280601281526020017129bab9b434a9bbb0b8102628102a37b5b2b760711b81525081565b60405161020191906120e2565b60405180910390f35b61021261098a565b604080516001600160701b03948516815293909216602084015263ffffffff1690820152606001610201565b61025161024c366004612115565b6109b4565b6040519015158152602001610201565b600654610274906001600160a01b031681565b6040516001600160a01b039091168152602001610201565b61029560005481565b604051908152602001610201565b6102516102b1366004612141565b6109cb565b6102957f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102e5601281565b60405160ff9091168152602001610201565b61029560035481565b6101c161030e366004612182565b610a5f565b61029560095481565b610295600a5481565b6102956103333660046121bb565b610ade565b6102956103463660046121bb565b60016020526000908152604090205481565b610295600b5481565b61029561036f3660046121bb565b60046020526000908152604090205481565b61039461038f3660046121bb565b610f70565b60408051928352602083019190915201610201565b6101f4604051806040016040528060038152602001620534c560ec1b81525081565b6102516103d9366004612115565b611312565b6102956103e881565b6101c16103f53660046121bb565b61131f565b600554610274906001600160a01b031681565b600754610274906001600160a01b031681565b6101c161042e3660046121d8565b611442565b610295610441366004612182565b600260209081526000928352604080842090915290825290205481565b6101c1611656565b600c546001146104915760405162461bcd60e51b81526004016104889061224f565b60405180910390fd5b6000600c55841515806104a45750600084115b6104fe5760405162461bcd60e51b815260206004820152602560248201527f556e697377617056323a20494e53554646494349454e545f4f55545055545f416044820152641353d5539560da1b6064820152608401610488565b60008061050961098a565b5091509150816001600160701b03168710801561052e5750806001600160701b031686105b6105845760405162461bcd60e51b815260206004820152602160248201527f556e697377617056323a20494e53554646494349454e545f4c495155494449546044820152605960f81b6064820152608401610488565b60065460075460009182916001600160a01b039182169190811690891682148015906105c25750806001600160a01b0316896001600160a01b031614155b6106065760405162461bcd60e51b8152602060048201526015602482015274556e697377617056323a20494e56414c49445f544f60581b6044820152606401610488565b8a1561061757610617828a8d611798565b891561062857610628818a8c611798565b8615610695576040516304347a1760e21b81526001600160a01b038a16906310d1e85c906106629033908f908f908e908e9060040161227a565b600060405180830381600087803b15801561067c57600080fd5b505af1158015610690573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b1580156106d457600080fd5b505afa1580156106e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070c91906122c6565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a082319060240160206040518083038186803b15801561074e57600080fd5b505afa158015610762573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078691906122c6565b92505050600089856001600160701b03166107a191906122f5565b83116107ae5760006107cb565b6107c18a6001600160701b0387166122f5565b6107cb90846122f5565b905060006107e28a6001600160701b0387166122f5565b83116107ef57600061080c565b6108028a6001600160701b0387166122f5565b61080c90846122f5565b9050600082118061081d5750600081115b6108755760405162461bcd60e51b8152602060048201526024808201527f556e697377617056323a20494e53554646494349454e545f494e5055545f414d60448201526313d5539560e21b6064820152608401610488565b60006108976108858460036118e3565b610891876103e86118e3565b9061194a565b905060006108a96108858460036118e3565b90506108ce620f42406108c86001600160701b038b8116908b166118e3565b906118e3565b6108d883836118e3565b10156109155760405162461bcd60e51b815260206004820152600c60248201526b556e697377617056323a204b60a01b6044820152606401610488565b5050610923848488886119a0565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600c55505050505050505050565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b60006109c1338484611b8c565b5060015b92915050565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610a4a576001600160a01b0384166000908152600260209081526040808320338452909152902054610a25908361194a565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610a55848484611bee565b5060019392505050565b6005546001600160a01b03163314610ab05760405162461bcd60e51b81526020600482015260146024820152732ab734b9bbb0b82b191d102327a92124a22222a760611b6044820152606401610488565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b6000600c54600114610b025760405162461bcd60e51b81526004016104889061224f565b6000600c81905580610b1261098a565b506006546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610b5f57600080fd5b505afa158015610b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9791906122c6565b6007546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610be057600080fd5b505afa158015610bf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1891906122c6565b90506000610c2f836001600160701b03871661194a565b90506000610c46836001600160701b03871661194a565b90506000610c548787611c94565b60005490915080610e3a5760055460408051637cd07e4760e01b815290516000926001600160a01b031691637cd07e47916004808301926020929190829003018186803b158015610ca457600080fd5b505afa158015610cb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdc919061230c565b9050336001600160a01b0382161415610dbd57806001600160a01b03166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2857600080fd5b505afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6091906122c6565b995060008a118015610d7457506000198a14155b610db85760405162461bcd60e51b81526020600482015260156024820152744261642064657369726564206c697175696469747960581b6044820152606401610488565b610e34565b6001600160a01b03811615610e0d5760405162461bcd60e51b815260206004820152601660248201527526bab9ba103737ba103430bb329036b4b3b930ba37b960511b6044820152606401610488565b610e256103e8610891610e2088886118e3565b611de0565b9950610e3460006103e8611e50565b50610e81565b610e7e6001600160701b038916610e5186846118e3565b610e5b919061233f565b6001600160701b038916610e6f86856118e3565b610e79919061233f565b611edf565b98505b60008911610ee25760405162461bcd60e51b815260206004820152602860248201527f556e697377617056323a20494e53554646494349454e545f4c495155494449546044820152671657d3525395115160c21b6064820152608401610488565b610eec8a8a611e50565b610ef886868a8a6119a0565b8115610f2257600854610f1e906001600160701b0380821691600160701b9004166118e3565b600b555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600c5550949695505050505050565b600080600c54600114610f955760405162461bcd60e51b81526004016104889061224f565b6000600c81905580610fa561098a565b506006546007546040516370a0823160e01b81523060048201529395509193506001600160a01b039081169291169060009083906370a082319060240160206040518083038186803b158015610ffa57600080fd5b505afa15801561100e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103291906122c6565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b15801561107757600080fd5b505afa15801561108b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110af91906122c6565b306000908152600160205260408120549192506110cc8888611c94565b600054909150806110dd84876118e3565b6110e7919061233f565b9a50806110f484866118e3565b6110fe919061233f565b995060008b118015611110575060008a115b61116d5760405162461bcd60e51b815260206004820152602860248201527f556e697377617056323a20494e53554646494349454e545f4c495155494449546044820152671657d0955493915160c21b6064820152608401610488565b6111773084611ef7565b611182878d8d611798565b61118d868d8c611798565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a082319060240160206040518083038186803b1580156111cc57600080fd5b505afa1580156111e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120491906122c6565b6040516370a0823160e01b81523060048201529095506001600160a01b038716906370a082319060240160206040518083038186803b15801561124657600080fd5b505afa15801561125a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127e91906122c6565b935061128c85858b8b6119a0565b81156112b6576008546112b2906001600160701b0380821691600160701b9004166118e3565b600b555b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600c81905550915091565b60006109c1338484611bee565b600c546001146113415760405162461bcd60e51b81526004016104889061224f565b6000600c556006546007546008546040516370a0823160e01b81523060048201526001600160a01b0393841693909216916113eb91849186916113e6916001600160701b039091169084906370a08231906024015b60206040518083038186803b1580156113ae57600080fd5b505afa1580156113c2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089191906122c6565b611798565b6008546040516370a0823160e01b815230600482015261143891839186916113e691600160701b9091046001600160701b0316906001600160a01b038516906370a0823190602401611396565b50506001600c5550565b428410156114875760405162461bcd60e51b8152602060048201526012602482015271155b9a5cddd85c158c8e881156141254915160721b6044820152606401610488565b6003546001600160a01b038816600090815260046020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b9190876114da83612353565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161155392919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156115be573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906115f45750886001600160a01b0316816001600160a01b0316145b6116405760405162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e4154555245000000006044820152606401610488565b61164b898989611b8c565b505050505050505050565b600c546001146116785760405162461bcd60e51b81526004016104889061224f565b6000600c556006546040516370a0823160e01b8152306004820152611791916001600160a01b0316906370a082319060240160206040518083038186803b1580156116c257600080fd5b505afa1580156116d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fa91906122c6565b6007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561173d57600080fd5b505afa158015611751573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177591906122c6565b6008546001600160701b0380821691600160701b9004166119a0565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b17905291516000928392871691611824919061236e565b6000604051808303816000865af19150503d8060008114611861576040519150601f19603f3d011682016040523d82523d6000602084013e611866565b606091505b5091509150818015611890575080511580611890575080806020019051810190611890919061238a565b6118dc5760405162461bcd60e51b815260206004820152601a60248201527f556e697377617056323a205452414e534645525f4641494c45440000000000006044820152606401610488565b5050505050565b6000811580611907575082826118f981836123ac565b9250611905908361233f565b145b6109c55760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b6044820152606401610488565b60008261195783826122f5565b91508111156109c55760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b6044820152606401610488565b6001600160701b0384118015906119be57506001600160701b038311155b611a005760405162461bcd60e51b8152602060048201526013602482015272556e697377617056323a204f564552464c4f5760681b6044820152606401610488565b6000611a11640100000000426123cb565b600854909150600090611a3190600160e01b900463ffffffff16836123df565b905060008163ffffffff16118015611a5157506001600160701b03841615155b8015611a6557506001600160701b03831615155b15611af4578063ffffffff16611a8d85611a7e86611f81565b6001600160e01b031690611f9a565b6001600160e01b0316611aa091906123ac565b60096000828254611ab19190612404565b909155505063ffffffff8116611aca84611a7e87611f81565b6001600160e01b0316611add91906123ac565b600a6000828254611aee9190612404565b90915550505b6008805463ffffffff8416600160e01b026001600160e01b036001600160701b03898116600160701b9081026001600160e01b03199095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316600090815260016020526040902054611c11908261194a565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611c409082611faf565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611be19085815260200190565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611ce557600080fd5b505afa158015611cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1d919061230c565b600b546001600160a01b038216158015945091925090611dcc578015611dc7576000611d58610e206001600160701b038881169088166118e3565b90506000611d6583611de0565b905080821115611dc4576000611d87611d7e848461194a565b600054906118e3565b90506000611da083611d9a8660056118e3565b90611faf565b90506000611dae828461233f565b90508015611dc057611dc08782611e50565b5050505b50505b611dd8565b8015611dd8576000600b555b505092915050565b60006003821115611e415750806000611dfa60028361233f565b611e05906001612404565b90505b81811015611e3b57905080600281611e20818661233f565b611e2a9190612404565b611e34919061233f565b9050611e08565b50919050565b8115611e4b575060015b919050565b600054611e5d9082611faf565b60009081556001600160a01b038316815260016020526040902054611e829082611faf565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ed39085815260200190565b60405180910390a35050565b6000818310611eee5781611ef0565b825b9392505050565b6001600160a01b038216600090815260016020526040902054611f1a908261194a565b6001600160a01b03831660009081526001602052604081209190915554611f41908261194a565b60009081556040518281526001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611ed3565b60006109c5600160701b6001600160701b03841661241c565b6000611ef06001600160701b0383168461244b565b600082611fbc8382612404565b91508110156109c55760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b6044820152606401610488565b6001600160a01b038116811461201957600080fd5b50565b60008060008060006080868803121561203457600080fd5b8535945060208601359350604086013561204d81612004565b9250606086013567ffffffffffffffff8082111561206a57600080fd5b818801915088601f83011261207e57600080fd5b81358181111561208d57600080fd5b89602082850101111561209f57600080fd5b9699959850939650602001949392505050565b60005b838110156120cd5781810151838201526020016120b5565b838111156120dc576000848401525b50505050565b60208152600082518060208401526121018160408501602087016120b2565b601f01601f19169190910160400192915050565b6000806040838503121561212857600080fd5b823561213381612004565b946020939093013593505050565b60008060006060848603121561215657600080fd5b833561216181612004565b9250602084013561217181612004565b929592945050506040919091013590565b6000806040838503121561219557600080fd5b82356121a081612004565b915060208301356121b081612004565b809150509250929050565b6000602082840312156121cd57600080fd5b8135611ef081612004565b600080600080600080600060e0888a0312156121f357600080fd5b87356121fe81612004565b9650602088013561220e81612004565b95506040880135945060608801359350608088013560ff8116811461223257600080fd5b9699959850939692959460a0840135945060c09093013592915050565b602080825260119082015270155b9a5cddd85c158c8e881313d0d2d151607a1b604082015260600190565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b6000602082840312156122d857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015612307576123076122df565b500390565b60006020828403121561231e57600080fd5b8151611ef081612004565b634e487b7160e01b600052601260045260246000fd5b60008261234e5761234e612329565b500490565b6000600019821415612367576123676122df565b5060010190565b600082516123808184602087016120b2565b9190910192915050565b60006020828403121561239c57600080fd5b81518015158114611ef057600080fd5b60008160001904831182151516156123c6576123c66122df565b500290565b6000826123da576123da612329565b500690565b600063ffffffff838116908316818110156123fc576123fc6122df565b039392505050565b60008219821115612417576124176122df565b500190565b60006001600160e01b0382811684821681151582840482111615612442576124426122df565b02949350505050565b60006001600160e01b038381168061246557612465612329565b9216919091049291505056fea2646970667358221220960b1f11ea468c906afd820d4cbefdd1e2073f882ac6017fdee1fed9ea56d65d64736f6c63430008090033