0x608060405234801561001057600080fd5b50604051613e10380380613e1083398101604081905261002f91610054565b600180546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b613d7d806100936000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063a7c4f0ef11610097578063e41c0a8d11610066578063e41c0a8d146101e9578063e584324214610212578063e6a4390514610250578063f46901ed1461028457600080fd5b8063a7c4f0ef14610192578063c9c65396146101a5578063e255fdd8146101b8578063e40de887146101c057600080fd5b8063574f2ba3116100d3578063574f2ba31461015057806360ccbbb91461016257806387ff971614610175578063a2e74af61461017d57600080fd5b8063017e7e58146100fa578063094b74151461012a5780631e3dd18b1461013d575b600080fd5b60005461010d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60015461010d906001600160a01b031681565b61010d61014b366004610b5c565b610297565b6003545b604051908152602001610121565b61010d610170366004610b5c565b6102c1565b6101546102d1565b61019061018b366004610b8d565b610303565b005b61010d6101a0366004610b8d565b61037c565b61010d6101b3366004610bb1565b6105ba565b600654610154565b61010d6101ce366004610b8d565b6004602052600090815260409020546001600160a01b031681565b61010d6101f7366004610b8d565b6005602052600090815260409020546001600160a01b031681565b610240610220366004610bb1565b600760209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610121565b61010d61025e366004610bb1565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b610190610292366004610b8d565b610ace565b600381815481106102a757600080fd5b6000918252602090912001546001600160a01b0316905081565b600681815481106102a757600080fd5b6000604051806020016102e390610b42565b6020820181038252601f19601f8201166040525080519060200120905090565b6001546001600160a01b0316331461035a5760405162461bcd60e51b815260206004820152601560248201527429bbb2b2b837233634b81d102327a92124a22222a760591b60448201526064015b60405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0382166103cf5760405162461bcd60e51b815260206004820152601860248201527753776565706e466c69703a205a45524f5f4144445245535360401b6044820152606401610351565b6001600160a01b0382811660009081526005602052604090205416156104375760405162461bcd60e51b815260206004820152601a60248201527f53776565706e466c69703a20575241505045525f4558495354530000000000006044820152606401610351565b6040516bffffffffffffffffffffffff19606084901b1660208201526000906034016040516020818303038152906040528051906020012090508060405161047e90610b4f565b8190604051809103906000f590508015801561049e573d6000803e3d6000fd5b5060405163189acdbd60e31b81526001600160a01b0385811660048301529193509083169063c4d66de890602401600060405180830381600087803b1580156104e657600080fd5b505af11580156104fa573d6000803e3d6000fd5b505050506001600160a01b03828116600081815260046020908152604080832080546001600160a01b0319908116968a1696871790915585845260058352818420805482168617905560068054600181018255948190527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90940180549091168517905591548251938452908301527f44088935d035995c1d105d8bd491e155573d2ad9989b0b41766f7b990d316fe5910160405180910390a250919050565b6000816001600160a01b0316836001600160a01b0316141561061e5760405162461bcd60e51b815260206004820152601f60248201527f53776565706e466c69703a204944454e544943414c5f414444524553534553006044820152606401610351565b600080836001600160a01b0316856001600160a01b031610610641578385610644565b84845b90925090506001600160a01b03821661069a5760405162461bcd60e51b815260206004820152601860248201527753776565706e466c69703a205a45524f5f4144445245535360401b6044820152606401610351565b6001600160a01b0382811660009081526002602090815260408083208585168452909152902054161561070f5760405162461bcd60e51b815260206004820152601760248201527f53776565706e466c69703a20504149525f4558495354530000000000000000006044820152606401610351565b6001600160a01b03828116600090815260046020526040808220548484168352912054908216158015929190911615159082906107495750805b156107965760405162461bcd60e51b815260206004820152601a60248201527f53776565706e466c69703a2044495343524554455f434c4153480000000000006044820152606401610351565b818061079f5750805b15610893576040516bffffffffffffffffffffffff19606086811b8216602084015285901b166034820152600090604801604051602081830303815290604052805190602001209050806040516107f590610b42565b8190604051809103906000f5905080158015610815573d6000803e3d6000fd5b506040516344943f0560e11b81526001600160a01b038781166004830152868116602483015285151560448301528415156064830152919750908716906389287e0a90608401600060405180830381600087803b15801561087557600080fd5b505af1158015610889573d6000803e3d6000fd5b50505050506109fe565b60405163e6a4390560e01b81526001600160a01b0380891660048301528716602482015273c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac9063e6a439059060440160206040518083038186803b1580156108ee57600080fd5b505afa158015610902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109269190610bea565b94506001600160a01b0385166109cd576040516364e329cb60e11b81526001600160a01b0380891660048301528716602482015273c0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac9063c9c6539690604401602060405180830381600087803b15801561099357600080fd5b505af11580156109a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cb9190610bea565b505b6001600160a01b038085166000908152600760209081526040808320938716835292905220805460ff191660011790555b6001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9095018054909716841790965592548351928352908201527f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9910160405180910390a35050505092915050565b6001546001600160a01b03163314610b205760405162461bcd60e51b815260206004820152601560248201527429bbb2b2b837233634b81d102327a92124a22222a760591b6044820152606401610351565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6124a380610c0883390190565b610c9d806130ab83390190565b600060208284031215610b6e57600080fd5b5035919050565b6001600160a01b0381168114610b8a57600080fd5b50565b600060208284031215610b9f57600080fd5b8135610baa81610b75565b9392505050565b60008060408385031215610bc457600080fd5b8235610bcf81610b75565b91506020830135610bdf81610b75565b809150509250929050565b600060208284031215610bfc57600080fd5b8151610baa81610b7556fe60806040526001600d5534801561001557600080fd5b50604080518082018252600e81526d53776565706e466c6970204c507360901b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f2d6ef63278c2ffe2c62dc635b1c0e821242f11e277f623a086a21971facc47d3918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f198184030181529190528051602090910120600355600580546001600160a01b03191633179055612391806101126000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637464fc3d11610104578063bc25cf77116100a2578063d62acf0011610071578063d62acf0014610458578063dd62ed3e14610465578063e3a5b87214610490578063fff6cae9146104a257600080fd5b8063bc25cf771461040c578063c45a01551461041f578063d21220a714610432578063d505accf1461044557600080fd5b806389afcb44116100de57806389afcb44146103a357806395d89b41146103cb578063a9059cbb146103f0578063ba9a7a561461040357600080fd5b80637464fc3d146103675780637ecebe001461037057806389287e0a1461039057600080fd5b806330adf81f116101715780635909c0d51161014b5780635909c0d5146103225780635a3d54931461032b5780636a6278421461033457806370a082311461034757600080fd5b806330adf81f146102d8578063313ce567146102ff5780633644e5151461031957600080fd5b8063095ea7b3116101ad578063095ea7b3146102605780630dfe16811461028357806318160ddd146102ae57806323b872dd146102c557600080fd5b8063022c0d9f146101d457806306fdde03146101e95780630902f1ac1461022c575b600080fd5b6101e76101e2366004611f45565b6104aa565b005b6102166040518060400160405280600e81526020016d53776565706e466c6970204c507360901b81525081565b604051610223919061200b565b60405180910390f35b610234610a0d565b604080516001600160701b03948516815293909216602084015263ffffffff1690820152606001610223565b61027361026e36600461203e565b610a37565b6040519015158152602001610223565b600654610296906001600160a01b031681565b6040516001600160a01b039091168152602001610223565b6102b760005481565b604051908152602001610223565b6102736102d336600461206a565b610a4d565b6102b77f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b610307601281565b60405160ff9091168152602001610223565b6102b760035481565b6102b760095481565b6102b7600a5481565b6102b76103423660046120ab565b610ac7565b6102b76103553660046120ab565b60016020526000908152604090205481565b6102b7600b5481565b6102b761037e3660046120ab565b60046020526000908152604090205481565b6101e761039e3660046120d6565b610dd6565b6103b66103b13660046120ab565b610e92565b60408051928352602083019190915201610223565b610216604051806040016040528060068152602001650534e462d4c560d41b81525081565b6102736103fe36600461203e565b611337565b6102b76103e881565b6101e761041a3660046120ab565b611344565b600554610296906001600160a01b031681565b600754610296906001600160a01b031681565b6101e7610453366004612132565b61148b565b600c546102739060ff1681565b6102b76104733660046121a9565b600260209081526000928352604080842090915290825290205481565b600c5461027390610100900460ff1681565b6101e76116a0565b600d546001146104f65760405162461bcd60e51b815260206004820152601260248201527114ddd9595c1b919b1a5c0e881313d0d2d15160721b60448201526064015b60405180910390fd5b6000600d55841515806105095750600084115b6105645760405162461bcd60e51b815260206004820152602660248201527f53776565706e466c69703a20494e53554646494349454e545f4f55545055545f604482015265105353d5539560d21b60648201526084016104ed565b60008061056f610a0d565b5091509150816001600160701b0316871080156105945750806001600160701b031686105b6105eb5760405162461bcd60e51b815260206004820152602260248201527f53776565706e466c69703a20494e53554646494349454e545f4c495155494449604482015261545960f01b60648201526084016104ed565b60065460075460009182916001600160a01b039182169190811690891682148015906106295750806001600160a01b0316896001600160a01b031614155b6106755760405162461bcd60e51b815260206004820152601660248201527f53776565706e466c69703a20494e56414c49445f544f0000000000000000000060448201526064016104ed565b8a1561068657610686828a8d611807565b891561069757610697818a8c611807565b8615610704576040516304347a1760e21b81526001600160a01b038a16906310d1e85c906106d19033908f908f908e908e906004016121e2565b600060405180830381600087803b1580156106eb57600080fd5b505af11580156106ff573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b15801561074357600080fd5b505afa158015610757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077b919061222f565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a082319060240160206040518083038186803b1580156107bd57600080fd5b505afa1580156107d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f5919061222f565b92505050600089856001600160701b0316610810919061225e565b831161081d57600061083a565b6108308a6001600160701b03871661225e565b61083a908461225e565b905060006108518a6001600160701b03871661225e565b831161085e57600061087b565b6108718a6001600160701b03871661225e565b61087b908461225e565b9050600082118061088c5750600081115b6108e65760405162461bcd60e51b815260206004820152602560248201527f53776565706e466c69703a20494e53554646494349454e545f494e5055545f416044820152641353d5539560da1b60648201526084016104ed565b60006108f3836001612275565b6108fe866064612275565b610908919061225e565b90506000610917836001612275565b610922866064612275565b61092c919061225e565b90506109446001600160701b03808916908a16612275565b61095090612710612275565b61095a8284612275565b10156109985760405162461bcd60e51b815260206004820152600d60248201526c53776565706e466c69703a204b60981b60448201526064016104ed565b50506109a684848888611952565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600d55505050505050505050565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610a44338484611b2f565b50600192915050565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610ab2576001600160a01b038416600090815260026020908152604080832033845290915281208054849290610aac90849061225e565b90915550505b610abd848484611b91565b5060019392505050565b6000600d54600114610b105760405162461bcd60e51b815260206004820152601260248201527114ddd9595c1b919b1a5c0e881313d0d2d15160721b60448201526064016104ed565b6000600d81905580610b20610a0d565b506006546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610b6d57600080fd5b505afa158015610b81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba5919061222f565b6007546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610bee57600080fd5b505afa158015610c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c26919061222f565b90506000610c3d6001600160701b0386168461225e565b90506000610c546001600160701b0386168461225e565b90506000610c628787611c32565b60005490915080610ca0576103e8610c82610c7d8587612275565b611d80565b610c8c919061225e565b9850610c9b60006103e8611dde565b610ce7565b610ce46001600160701b038916610cb78387612275565b610cc191906122aa565b6001600160701b038916610cd58487612275565b610cdf91906122aa565b611e67565b98505b60008911610d495760405162461bcd60e51b815260206004820152602960248201527f53776565706e466c69703a20494e53554646494349454e545f4c495155494449604482015268151657d3525395115160ba1b60648201526084016104ed565b610d538a8a611dde565b610d5f86868a8a611952565b8115610d8857600854610d84906001600160701b03600160701b820481169116612275565b600b555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600d5550949695505050505050565b6005546001600160a01b03163314610e305760405162461bcd60e51b815260206004820152601560248201527f53776565706e466c69703a20464f5242494444454e000000000000000000000060448201526064016104ed565b6006805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0396871617909155600780549091169390941692909217909255600c805461ffff191692151561ff0019169290921761010091151591909102179055565b600080600d54600114610edc5760405162461bcd60e51b815260206004820152601260248201527114ddd9595c1b919b1a5c0e881313d0d2d15160721b60448201526064016104ed565b6000600d81905580610eec610a0d565b506006546007546040516370a0823160e01b81523060048201529395509193506001600160a01b039081169291169060009083906370a082319060240160206040518083038186803b158015610f4157600080fd5b505afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f79919061222f565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b158015610fbe57600080fd5b505afa158015610fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff6919061222f565b306000908152600160205260408120549192506110138888611c32565b600054909150806110248685612275565b61102e91906122aa565b9a508061103b8585612275565b61104591906122aa565b600c54909a5060ff16156110b6576000611067670de0b6b3a76400008d6122be565b905080156110b057611079818d61225e565b9b506110858c8761225e565b61108f8c8761225e565b6110999083612275565b6110a391906122aa565b6110ad908c6122d2565b9a505b50611125565b600c54610100900460ff16156111255760006110da670de0b6b3a76400008c6122be565b90508015611123576110ec818c61225e565b9a506110f88b8661225e565b6111028d8861225e565b61110c9083612275565b61111691906122aa565b611120908d6122d2565b9b505b505b60008b118015611135575060008a115b6111935760405162461bcd60e51b815260206004820152602960248201527f53776565706e466c69703a20494e53554646494349454e545f4c495155494449604482015268151657d0955493915160ba1b60648201526084016104ed565b61119d3084611e7f565b6111a8878d8d611807565b6111b3868d8c611807565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a082319060240160206040518083038186803b1580156111f257600080fd5b505afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a919061222f565b6040516370a0823160e01b81523060048201529095506001600160a01b038716906370a082319060240160206040518083038186803b15801561126c57600080fd5b505afa158015611280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a4919061222f565b93506112b285858b8b611952565b81156112db576008546112d7906001600160701b03600160701b820481169116612275565b600b555b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600d81905550915091565b6000610a44338484611b91565b600d5460011461138b5760405162461bcd60e51b815260206004820152601260248201527114ddd9595c1b919b1a5c0e881313d0d2d15160721b60448201526064016104ed565b6000600d556006546007546008546040516370a0823160e01b81523060048201526001600160a01b03938416939092169161143991849186916001600160701b03169083906370a08231906024015b60206040518083038186803b1580156113f257600080fd5b505afa158015611406573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142a919061222f565b611434919061225e565b611807565b6008546040516370a0823160e01b81523060048201526114819183918691600160701b90046001600160701b0316906001600160a01b038416906370a08231906024016113da565b50506001600d5550565b428410156114d15760405162461bcd60e51b815260206004820152601360248201527214ddd9595c1b919b1a5c0e8811561412549151606a1b60448201526064016104ed565b6003546001600160a01b038816600090815260046020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b919087611524836122ea565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161159d92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015611608573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061163e5750886001600160a01b0316816001600160a01b0316145b61168a5760405162461bcd60e51b815260206004820152601d60248201527f53776565706e466c69703a20494e56414c49445f5349474e415455524500000060448201526064016104ed565b611695898989611b2f565b505050505050505050565b600d546001146116e75760405162461bcd60e51b815260206004820152601260248201527114ddd9595c1b919b1a5c0e881313d0d2d15160721b60448201526064016104ed565b6000600d556006546040516370a0823160e01b8152306004820152611800916001600160a01b0316906370a082319060240160206040518083038186803b15801561173157600080fd5b505afa158015611745573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611769919061222f565b6007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b1580156117ac57600080fd5b505afa1580156117c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e4919061222f565b6008546001600160701b0380821691600160701b900416611952565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b179052915160009283928716916118939190612305565b6000604051808303816000865af19150503d80600081146118d0576040519150601f19603f3d011682016040523d82523d6000602084013e6118d5565b606091505b50915091508180156118ff5750805115806118ff5750808060200190518101906118ff9190612321565b61194b5760405162461bcd60e51b815260206004820152601b60248201527f53776565706e466c69703a205452414e534645525f4641494c4544000000000060448201526064016104ed565b5050505050565b6001600160701b03841180159061197057506001600160701b038311155b6119bc5760405162461bcd60e51b815260206004820152601460248201527f53776565706e466c69703a204f564552464c4f5700000000000000000000000060448201526064016104ed565b60085463ffffffff42811691600160e01b900481168203908116158015906119ec57506001600160701b03841615155b8015611a0057506001600160701b03831615155b15611a7f5763ffffffff8116611a3085600160701b6001600160701b038716025b6001600160e01b031690611f02565b600980546001600160e01b03929092169290920201905563ffffffff8116611a6784600160701b6001600160701b03881602611a21565b600a80546001600160e01b0392909216929092020190555b6008805463ffffffff8416600160e01b026001600160e01b036001600160701b03898116600160701b9081027fffffffff000000000000000000000000000000000000000000000000000000009095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831660009081526001602052604081208054839290611bb990849061225e565b90915550506001600160a01b03821660009081526001602052604081208054839290611be69084906122d2565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b8491815260200190565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8357600080fd5b505afa158015611c97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbb919061233e565b600b546001600160a01b038216158015945091925090611d6c578015611d67576000611cf6610c7d6001600160701b03808816908916612275565b90506000611d0383611d80565b905080821115611d64576000611d19828461225e565b600054611d269190612275565b9050600082611d36856005612275565b611d4091906122d2565b90506000611d4e82846122aa565b90508015611d6057611d608782611dde565b5050505b50505b611d78565b8015611d78576000600b555b505092915050565b60006003821115611dcf575080600160028204015b81811015611dc957809150600281828581611db257611db2612294565b040181611dc157611dc1612294565b049050611d95565b50919050565b8115611dd9575060015b919050565b80600080828254611def91906122d2565b90915550506001600160a01b03821660009081526001602052604081208054839290611e1c9084906122d2565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6000818310611e765781611e78565b825b9392505050565b6001600160a01b03821660009081526001602052604081208054839290611ea790849061225e565b9250508190555080600080828254611ebf919061225e565b90915550506040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611e5b565b60006001600160701b0382166001600160e01b03841681611f2557611f25612294565b049392505050565b6001600160a01b0381168114611f4257600080fd5b50565b600080600080600060808688031215611f5d57600080fd5b85359450602086013593506040860135611f7681611f2d565b9250606086013567ffffffffffffffff80821115611f9357600080fd5b818801915088601f830112611fa757600080fd5b813581811115611fb657600080fd5b896020828501011115611fc857600080fd5b9699959850939650602001949392505050565b60005b83811015611ff6578181015183820152602001611fde565b83811115612005576000848401525b50505050565b602081526000825180602084015261202a816040850160208701611fdb565b601f01601f19169190910160400192915050565b6000806040838503121561205157600080fd5b823561205c81611f2d565b946020939093013593505050565b60008060006060848603121561207f57600080fd5b833561208a81611f2d565b9250602084013561209a81611f2d565b929592945050506040919091013590565b6000602082840312156120bd57600080fd5b8135611e7881611f2d565b8015158114611f4257600080fd5b600080600080608085870312156120ec57600080fd5b84356120f781611f2d565b9350602085013561210781611f2d565b92506040850135612117816120c8565b91506060850135612127816120c8565b939692955090935050565b600080600080600080600060e0888a03121561214d57600080fd5b873561215881611f2d565b9650602088013561216881611f2d565b95506040880135945060608801359350608088013560ff8116811461218c57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156121bc57600080fd5b82356121c781611f2d565b915060208301356121d781611f2d565b809150509250929050565b6001600160a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60006020828403121561224157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561227057612270612248565b500390565b600081600019048311821515161561228f5761228f612248565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826122b9576122b9612294565b500490565b6000826122cd576122cd612294565b500690565b600082198211156122e5576122e5612248565b500190565b60006000198214156122fe576122fe612248565b5060010190565b60008251612317818460208701611fdb565b9190910192915050565b60006020828403121561233357600080fd5b8151611e78816120c8565b60006020828403121561235057600080fd5b8151611e7881611f2d56fea26469706673582212202967764a36946b26d9e786055343e4c55e9b1b223ccac9eeee81109916b6451264736f6c634300080900336080604052600160055534801561001557600080fd5b50600380546001600160a01b03191633179055610c66806100376000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806395d89b411161008c578063c45a015511610066578063c45a01551461022c578063c4d66de81461023f578063dd62ed3e14610252578063de836ebd1461027d57600080fd5b806395d89b41146101e1578063a9059cbb14610204578063ba36b92d1461021757600080fd5b806323b872dd116100c857806323b872dd14610169578063313ce5671461017c57806370a08231146101965780637de1e536146101b657600080fd5b806306fdde03146100ef578063095ea7b31461012f57806318160ddd14610152575b600080fd5b6101196040518060400160405280600b81526020016a15dc985c1c19590813919560aa1b81525081565b6040516101269190610922565b60405180910390f35b61014261013d366004610993565b610290565b6040519015158152602001610126565b61015b60005481565b604051908152602001610126565b6101426101773660046109bd565b6102a6565b610184601281565b60405160ff9091168152602001610126565b61015b6101a43660046109f9565b60016020526000908152604090205481565b6004546101c9906001600160a01b031681565b6040516001600160a01b039091168152602001610126565b6101196040518060400160405280600481526020016315d3919560e21b81525081565b610142610212366004610993565b610320565b61022a610225366004610a31565b61032d565b005b6003546101c9906001600160a01b031681565b61022a61024d3660046109f9565b610392565b61015b610260366004610b02565b600260209081526000928352604080842090915290825290205481565b61022a61028b366004610a31565b61041b565b600061029d338484610472565b50600192915050565b6001600160a01b03831660009081526002602090815260408083203384529091528120546000191461030b576001600160a01b038416600090815260026020908152604080832033845290915281208054849290610305908490610b4b565b90915550505b6103168484846104d4565b5060019392505050565b600061029d3384846104d4565b6005546001146103795760405162461bcd60e51b815260206004820152601260248201527114ddd9595c1b919b1a5c0e881313d0d2d15160721b60448201526064015b60405180910390fd5b60006005556103893383836105d4565b50506001600555565b6003546001600160a01b031633146103ec5760405162461bcd60e51b815260206004820152601560248201527f53776565706e466c69703a20464f5242494444454e00000000000000000000006044820152606401610370565b6004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6005546001146104625760405162461bcd60e51b815260206004820152601260248201527114ddd9595c1b919b1a5c0e881313d0d2d15160721b6044820152606401610370565b6000600555610389338383610785565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6104e6670de0b6b3a764000082610b62565b156105335760405162461bcd60e51b815260206004820152601a60248201527f53776565706e466c69703a205041525449414c5f414d4f554e540000000000006044820152606401610370565b6001600160a01b0383166000908152600160205260408120805483929061055b908490610b4b565b90915550506001600160a01b03821660009081526001602052604081208054839290610588908490610b84565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104c791815260200190565b805160006105ea82670de0b6b3a7640000610b9c565b6001600160a01b038616600090815260016020526040812080549293508392909190610617908490610b4b565b925050819055508060008082825461062f9190610b4b565b90915550506040518181526000906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360005b828110156107325760045484516001600160a01b03909116906323b872dd90309088908890869081106106ad576106ad610bbb565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561070757600080fd5b505af115801561071b573d6000803e3d6000fd5b50505050808061072a90610bd1565b915050610678565b50836001600160a01b0316856001600160a01b03167f1a9ecd79d4129de1f6144bf993d21f4a1803c25ad4040ae9571f25082792125e856040516107769190610bec565b60405180910390a35050505050565b8051600061079b82670de0b6b3a7640000610b9c565b9050806000808282546107ae9190610b84565b90915550506001600160a01b038416600090815260016020526040812080548392906107db908490610b84565b90915550506040518181526001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360005b828110156108de5760045484516001600160a01b03909116906323b872dd908890309088908690811061085957610859610bbb565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156108b357600080fd5b505af11580156108c7573d6000803e3d6000fd5b5050505080806108d690610bd1565b915050610824565b50836001600160a01b0316856001600160a01b03167ffd9359b77bedf90cc62dc5e65e71caac46edc3f206e575d895e753ae8f6e88ea856040516107769190610bec565b600060208083528351808285015260005b8181101561094f57858101830151858201604001528201610933565b81811115610961576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461098e57600080fd5b919050565b600080604083850312156109a657600080fd5b6109af83610977565b946020939093013593505050565b6000806000606084860312156109d257600080fd5b6109db84610977565b92506109e960208501610977565b9150604084013590509250925092565b600060208284031215610a0b57600080fd5b610a1482610977565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4457600080fd5b610a4d83610977565b915060208084013567ffffffffffffffff80821115610a6b57600080fd5b818601915086601f830112610a7f57600080fd5b813581811115610a9157610a91610a1b565b8060051b604051601f19603f83011681018181108582111715610ab657610ab6610a1b565b604052918252848201925083810185019189831115610ad457600080fd5b938501935b82851015610af257843584529385019392850192610ad9565b8096505050505050509250929050565b60008060408385031215610b1557600080fd5b610b1e83610977565b9150610b2c60208401610977565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b600082821015610b5d57610b5d610b35565b500390565b600082610b7f57634e487b7160e01b600052601260045260246000fd5b500690565b60008219821115610b9757610b97610b35565b500190565b6000816000190483118215151615610bb657610bb6610b35565b500290565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610be557610be5610b35565b5060010190565b6020808252825182820181905260009190848201906040850190845b81811015610c2457835183529284019291840191600101610c08565b5090969550505050505056fea2646970667358221220a0fa7f0e5c9d2a623adf472f4643864ad2f22c272be19893d31bb70de71349c364736f6c63430008090033a26469706673582212204f269ce293b10704a71341840edf99a7a76d8274034987ce23715e1f6b35c54e64736f6c63430008090033000000000000000000000000c718e5a5b06ce7fed722b128c0c0eb9c5c902d92