60806040526001600c55348015610014575f80fd5b50604080518082018252600c81526b4d696e6453776170204c507360a01b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f501119e5e68bbbdfc8832239cf4285d9de24c296dc8e9dd79e3609ee1425f052818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b03191633179055612040806101075f395ff3fe608060405234801561000f575f80fd5b50600436106101a1575f3560e01c80636a627842116100f3578063ba9a7a5611610093578063d21220a71161006e578063d21220a714610403578063d505accf14610416578063dd62ed3e14610429578063fff6cae914610453575f80fd5b8063ba9a7a56146103d4578063bc25cf77146103dd578063c45a0155146103f0575f80fd5b80637ecebe00116100ce5780637ecebe001461035057806389afcb441461036f57806395d89b4114610397578063a9059cbb146103c1575f80fd5b80636a6278421461031557806370a08231146103285780637464fc3d14610347575f80fd5b806323b872dd1161015e5780633644e515116101395780633644e515146102e7578063485cc955146102f05780635909c0d5146103035780635a3d54931461030c575f80fd5b806323b872dd1461029357806330adf81f146102a6578063313ce567146102cd575f80fd5b8063022c0d9f146101a557806306fdde03146101ba5780630902f1ac146101fb578063095ea7b31461022f5780630dfe16811461025257806318160ddd1461027d575b5f80fd5b6101b86101b3366004611c28565b61045b565b005b6101e56040518060400160405280600c81526020016b4d696e6453776170204c507360a01b81525081565b6040516101f29190611cb8565b60405180910390f35b610203610953565b604080516001600160701b03948516815293909216602084015263ffffffff16908201526060016101f2565b61024261023d366004611ced565b61097d565b60405190151581526020016101f2565b600654610265906001600160a01b031681565b6040516001600160a01b0390911681526020016101f2565b6102855f5481565b6040519081526020016101f2565b6102426102a1366004611d17565b610993565b6102857f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6102d5601281565b60405160ff90911681526020016101f2565b61028560035481565b6101b86102fe366004611d55565b610a0a565b61028560095481565b610285600a5481565b610285610323366004611d8c565b610a88565b610285610336366004611d8c565b60016020525f908152604090205481565b610285600b5481565b61028561035e366004611d8c565b60046020525f908152604090205481565b61038261037d366004611d8c565b610d47565b604080519283526020830191909152016101f2565b6101e56040518060400160405280600b81526020016a04d696e64537761702d4c560ac1b81525081565b6102426103cf366004611ced565b61109b565b6102856103e881565b6101b86103eb366004611d8c565b6110a7565b600554610265906001600160a01b031681565b600754610265906001600160a01b031681565b6101b8610424366004611da7565b6111b7565b610285610437366004611d55565b600260209081525f928352604080842090915290825290205481565b6101b86113c6565b600c546001146104865760405162461bcd60e51b815260040161047d90611e18565b60405180910390fd5b5f600c558415158061049757505f84115b6104ef5760405162461bcd60e51b8152602060048201526024808201527f4d696e64537761703a20494e53554646494349454e545f4f55545055545f414d60448201526313d5539560e21b606482015260840161047d565b5f806104f9610953565b5091509150816001600160701b03168710801561051e5750806001600160701b031686105b61056a5760405162461bcd60e51b815260206004820181905260248201527f4d696e64537761703a20494e53554646494349454e545f4c4951554944495459604482015260640161047d565b6006546007545f9182916001600160a01b039182169190811690891682148015906105a75750806001600160a01b0316896001600160a01b031614155b6105ea5760405162461bcd60e51b81526020600482015260146024820152734d696e64537761703a20494e56414c49445f544f60601b604482015260640161047d565b8a156105fb576105fb828a8d6114e5565b891561060c5761060c818a8c6114e5565b861561067457604051633ca3dc2160e11b81526001600160a01b038a1690637947b842906106469033908f908f908e908e90600401611e42565b5f604051808303815f87803b15801561065d575f80fd5b505af115801561066f573d5f803e3d5ffd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa1580156106b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106da9190611e8d565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a0823190602401602060405180830381865afa15801561071f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107439190611e8d565b925050505f89856001600160701b031661075d9190611eb8565b8311610769575f610786565b61077c8a6001600160701b038716611eb8565b6107869084611eb8565b90505f61079c8a6001600160701b038716611eb8565b83116107a8575f6107c5565b6107bb8a6001600160701b038716611eb8565b6107c59084611eb8565b90505f8211806107d457505f81115b61082c5760405162461bcd60e51b815260206004820152602360248201527f4d696e64537761703a20494e53554646494349454e545f494e5055545f414d4f60448201526215539560ea1b606482015260840161047d565b5f610838836012611ecb565b61084486612710611ecb565b61084e9190611eb8565b90505f61085c836012611ecb565b61086886612710611ecb565b6108729190611eb8565b905061088a6001600160701b03808916908a16611ecb565b610898906305f5e100611ecb565b6108a28284611ecb565b10156108de5760405162461bcd60e51b815260206004820152600b60248201526a4d696e64537761703a204b60a81b604482015260640161047d565b50506108ec8484888861162b565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600c55505050505050505050565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b5f610989338484611811565b5060015b92915050565b6001600160a01b0383165f9081526002602090815260408083203384529091528120545f19146109f5576001600160a01b0384165f908152600260209081526040808320338452909152812080548492906109ef908490611eb8565b90915550505b610a00848484611872565b5060019392505050565b6005546001600160a01b03163314610a5a5760405162461bcd60e51b815260206004820152601360248201527226b4b73229bbb0b81d102327a92124a22222a760691b604482015260640161047d565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b5f600c54600114610aab5760405162461bcd60e51b815260040161047d90611e18565b5f600c81905580610aba610953565b506006546040516370a0823160e01b81523060048201529294509092505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610b09573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2d9190611e8d565b6007546040516370a0823160e01b81523060048201529192505f916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610b78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9c9190611e8d565b90505f610bb26001600160701b03861684611eb8565b90505f610bc86001600160701b03861684611eb8565b90505f610bd58787611911565b5f8054919250819003610c14576103e8610bf7610bf28587611ecb565b611a5a565b610c019190611eb8565b9850610c0f5f6103e8611ac8565b610c5b565b610c586001600160701b038916610c2b8387611ecb565b610c359190611ef6565b6001600160701b038916610c498487611ecb565b610c539190611ef6565b611b4e565b98505b5f8911610cba5760405162461bcd60e51b815260206004820152602760248201527f4d696e64537761703a20494e53554646494349454e545f4c495155494449545960448201526617d3525395115160ca1b606482015260840161047d565b610cc48a8a611ac8565b610cd086868a8a61162b565b8115610cf957600854610cf5906001600160701b03600160701b820481169116611ecb565b600b555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600c5550949695505050505050565b5f80600c54600114610d6b5760405162461bcd60e51b815260040161047d90611e18565b5f600c81905580610d7a610953565b506006546007546040516370a0823160e01b81523060048201529395509193506001600160a01b03908116929116905f9083906370a0823190602401602060405180830381865afa158015610dd1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df59190611e8d565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610e3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e609190611e8d565b305f90815260016020526040812054919250610e7c8888611911565b5f5490915080610e8c8685611ecb565b610e969190611ef6565b9a5080610ea38585611ecb565b610ead9190611ef6565b99505f8b118015610ebd57505f8a115b610f195760405162461bcd60e51b815260206004820152602760248201527f4d696e64537761703a20494e53554646494349454e545f4c495155494449545960448201526617d0955493915160ca1b606482015260840161047d565b610f233084611b65565b610f2e878d8d6114e5565b610f39868d8c6114e5565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015610f7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f9f9190611e8d565b6040516370a0823160e01b81523060048201529095506001600160a01b038716906370a0823190602401602060405180830381865afa158015610fe4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110089190611e8d565b935061101685858b8b61162b565b811561103f5760085461103b906001600160701b03600160701b820481169116611ecb565b600b555b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600c81905550915091565b5f610989338484611872565b600c546001146110c95760405162461bcd60e51b815260040161047d90611e18565b5f600c556006546007546008546040516370a0823160e01b81523060048201526001600160a01b03938416939092169161116591849186916001600160701b03169083906370a08231906024015b602060405180830381865afa158015611132573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111569190611e8d565b6111609190611eb8565b6114e5565b6008546040516370a0823160e01b81523060048201526111ad9183918691600160701b90046001600160701b0316906001600160a01b038416906370a0823190602401611117565b50506001600c5550565b428410156111fb5760405162461bcd60e51b8152602060048201526011602482015270135a5b9914ddd85c0e8811561412549151607a1b604482015260640161047d565b6003546001600160a01b0388165f90815260046020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b91908761124d83611f09565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016112c692919061190160f01b81526002810192909252602282015260420190565b60408051601f1981840301815282825280516020918201205f80855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa15801561132e573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116158015906113645750886001600160a01b0316816001600160a01b0316145b6113b05760405162461bcd60e51b815260206004820152601b60248201527f4d696e64537761703a20494e56414c49445f5349474e41545552450000000000604482015260640161047d565b6113bb898989611811565b505050505050505050565b600c546001146113e85760405162461bcd60e51b815260040161047d90611e18565b5f600c556006546040516370a0823160e01b81523060048201526114de916001600160a01b0316906370a0823190602401602060405180830381865afa158015611434573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114589190611e8d565b6007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561149e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c29190611e8d565b6008546001600160701b0380821691600160701b90041661162b565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b17905291515f9283928716916115709190611f21565b5f604051808303815f865af19150503d805f81146115a9576040519150601f19603f3d011682016040523d82523d5f602084013e6115ae565b606091505b50915091508180156115d85750805115806115d85750808060200190518101906115d89190611f37565b6116245760405162461bcd60e51b815260206004820152601960248201527f4d696e64537761703a205452414e534645525f4641494c454400000000000000604482015260640161047d565b5050505050565b6001600160701b03841180159061164957506001600160701b038311155b61168a5760405162461bcd60e51b81526020600482015260126024820152714d696e64537761703a204f564552464c4f5760701b604482015260640161047d565b5f61169a64010000000042611f56565b6008549091505f906116b990600160e01b900463ffffffff1683611f69565b90505f8163ffffffff161180156116d857506001600160701b03841615155b80156116ec57506001600160701b03831615155b15611779578063ffffffff166117148561170586611be5565b6001600160e01b031690611bfd565b6001600160e01b03166117279190611ecb565b60095f8282546117379190611f85565b909155505063ffffffff81166117508461170587611be5565b6001600160e01b03166117639190611ecb565b600a5f8282546117739190611f85565b90915550505b6008805463ffffffff8416600160e01b026001600160e01b036001600160701b03898116600160701b9081026001600160e01b03199095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383165f9081526001602052604081208054839290611899908490611eb8565b90915550506001600160a01b0382165f90815260016020526040812080548392906118c5908490611f85565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161186591815260200190565b5f8060055f9054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611963573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119879190611f98565b600b546001600160a01b038216158015945091925090611a47578015611a42575f6119c1610bf26001600160701b03808816908916611ecb565b90505f6119cd83611a5a565b905080821115611a3f575f6119e28284611eb8565b5f546119ee9190611ecb565b6119f9906008611ecb565b90505f611a07836008611ecb565b611a1285600a611ecb565b611a1c9190611f85565b90505f611a298284611ef6565b90508015611a3b57611a3b8782611ac8565b5050505b50505b611a52565b8015611a52575f600b555b505092915050565b5f6003821115611ab95750805f611a72600283611ef6565b611a7d906001611f85565b90505b81811015611ab357905080600281611a988186611ef6565b611aa29190611f85565b611aac9190611ef6565b9050611a80565b50919050565b8115611ac3575060015b919050565b805f80828254611ad89190611f85565b90915550506001600160a01b0382165f9081526001602052604081208054839290611b04908490611f85565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b5f818310611b5c5781611b5e565b825b9392505050565b6001600160a01b0382165f9081526001602052604081208054839290611b8c908490611eb8565b92505081905550805f80828254611ba39190611eb8565b90915550506040518181525f906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611b42565b5f61098d600160701b6001600160701b038416611fb3565b5f611b5e6001600160701b03831684611fdc565b6001600160a01b0381168114611c25575f80fd5b50565b5f805f805f60808688031215611c3c575f80fd5b85359450602086013593506040860135611c5581611c11565b9250606086013567ffffffffffffffff811115611c70575f80fd5b8601601f81018813611c80575f80fd5b803567ffffffffffffffff811115611c96575f80fd5b886020828401011115611ca7575f80fd5b959894975092955050506020019190565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215611cfe575f80fd5b8235611d0981611c11565b946020939093013593505050565b5f805f60608486031215611d29575f80fd5b8335611d3481611c11565b92506020840135611d4481611c11565b929592945050506040919091013590565b5f8060408385031215611d66575f80fd5b8235611d7181611c11565b91506020830135611d8181611c11565b809150509250929050565b5f60208284031215611d9c575f80fd5b8135611b5e81611c11565b5f805f805f805f60e0888a031215611dbd575f80fd5b8735611dc881611c11565b96506020880135611dd881611c11565b95506040880135945060608801359350608088013560ff81168114611dfb575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b60208082526010908201526f135a5b9914ddd85c0e881313d0d2d15160821b604082015260600190565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b5f60208284031215611e9d575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561098d5761098d611ea4565b808202811582820484141761098d5761098d611ea4565b634e487b7160e01b5f52601260045260245ffd5b5f82611f0457611f04611ee2565b500490565b5f60018201611f1a57611f1a611ea4565b5060010190565b5f82518060208501845e5f920191825250919050565b5f60208284031215611f47575f80fd5b81518015158114611b5e575f80fd5b5f82611f6457611f64611ee2565b500690565b63ffffffff828116828216039081111561098d5761098d611ea4565b8082018082111561098d5761098d611ea4565b5f60208284031215611fa8575f80fd5b8151611b5e81611c11565b6001600160e01b03818116838216818102909216918183048114821517611a5257611a52611ea4565b5f6001600160e01b03831680611ff457611ff4611ee2565b6001600160e01b0392909216919091049291505056fea2646970667358221220f1cbf92d064371c0a6e2f299095a78473c2f270e2c37df47dfb5e15325a1592164736f6c634300081a0033