0x608060405234801561000f575f80fd5b506040518060400160405280601e81526020017f4368696d7065727320436f6c6c65637469626c6573202d20416d756c657400008152506040518060400160405280600881526020016710d0d0535553115560c21b815250815f90816100759190610220565b5060016100828282610220565b5061009191505f9050336100db565b506100a95f80516020611dcf833981519152336100db565b506100d55f80516020611dcf8339815191527315480621aa617a0d8ded9b6f360788c43bcb931d6100db565b506102da565b5f828152600a602090815260408083206001600160a01b038516845290915281205460ff1661017f575f838152600a602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101373390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610182565b505f5b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806101b057607f821691505b6020821081036101ce57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561021b57805f5260205f20601f840160051c810160208510156101f95750805b601f840160051c820191505b81811015610218575f8155600101610205565b50505b505050565b81516001600160401b0381111561023957610239610188565b61024d81610247845461019c565b846101d4565b6020601f82116001811461027f575f83156102685750848201515b5f19600385901b1c1916600184901b178455610218565b5f84815260208120601f198516915b828110156102ae578785015182556020948501946001909201910161028e565b50848210156102cb57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b611ae8806102e75f395ff3fe608060405234801561000f575f80fd5b50600436106101bb575f3560e01c806370480275116100f3578063a22cb46511610093578063b88d4fde1161006e578063b88d4fde146103bf578063c87b56dd146103d2578063d547741f146103e5578063e985e9c5146103f8575f80fd5b8063a22cb46514610377578063a82567d41461038a578063b2542e28146103ac575f80fd5b806375b238fc116100ce57806375b238fc1461034157806391d148541461035557806395d89b4114610368578063a217fddf14610370575f80fd5b8063704802751461030857806370a082311461031b5780637143a5251461032e575f80fd5b80632f2ff15d1161015e57806342842e0e1161013957806342842e0e146102bc5780634f6ccce7146102cf57806355f804b3146102e25780636352211e146102f5575f80fd5b80632f2ff15d146102835780632f745c591461029657806336568abe146102a9575f80fd5b8063095ea7b311610199578063095ea7b31461022757806318160ddd1461023c57806323b872dd1461024e578063248a9ca314610261575f80fd5b806301ffc9a7146101bf57806306fdde03146101e7578063081812fc146101fc575b5f80fd5b6101d26101cd3660046114b1565b61040b565b60405190151581526020015b60405180910390f35b6101ef61041b565b6040516101de9190611501565b61020f61020a366004611513565b6104aa565b6040516001600160a01b0390911681526020016101de565b61023a610235366004611545565b6104d1565b005b6008545b6040519081526020016101de565b61023a61025c36600461156d565b6104e0565b61024061026f366004611513565b5f908152600a602052604090206001015490565b61023a6102913660046115a7565b61056e565b6102406102a4366004611545565b610592565b61023a6102b73660046115a7565b6105f5565b61023a6102ca36600461156d565b61062d565b6102406102dd366004611513565b610647565b61023a6102f036600461165c565b61069c565b61020f610303366004611513565b6106bf565b61023a6103163660046116a1565b6106c9565b6102406103293660046116a1565b6106ea565b61023a61033c3660046116c9565b61072f565b6102405f80516020611a9383398151915281565b6101d26103633660046115a7565b6107e1565b6101ef61080b565b6102405f81565b61023a6103853660046116ea565b61081a565b6101d2610398366004611513565b600c6020525f908152604090205460ff1681565b61023a6103ba366004611712565b610825565b61023a6103cd366004611783565b61088b565b6101ef6103e0366004611513565b6108a2565b61023a6103f33660046115a7565b610962565b6101d26104063660046117fa565b610986565b5f610415826109b3565b92915050565b60605f805461042990611822565b80601f016020809104026020016040519081016040528092919081815260200182805461045590611822565b80156104a05780601f10610477576101008083540402835291602001916104a0565b820191905f5260205f20905b81548152906001019060200180831161048357829003601f168201915b5050505050905090565b5f6104b4826109d7565b505f828152600460205260409020546001600160a01b0316610415565b6104dc828233610a0f565b5050565b6001600160a01b03821661050e57604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f61051a838333610a1c565b9050836001600160a01b0316816001600160a01b031614610568576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610505565b50505050565b5f828152600a602052604090206001015461058881610aef565b6105688383610afc565b5f61059c836106ea565b82106105cd5760405163295f44f760e21b81526001600160a01b038416600482015260248101839052604401610505565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b6001600160a01b038116331461061e5760405163334bd91960e11b815260040160405180910390fd5b6106288282610b8d565b505050565b61062883838360405180602001604052805f81525061088b565b5f61065160085490565b82106106795760405163295f44f760e21b81525f600482015260248101839052604401610505565b6008828154811061068c5761068c61185a565b905f5260205f2001549050919050565b5f80516020611a938339815191526106b381610aef565b600b61062883826118b2565b5f610415826109d7565b5f6106d381610aef565b6104dc5f80516020611a938339815191528361056e565b5f6001600160a01b038216610714576040516322718ad960e21b81525f6004820152602401610505565b506001600160a01b03165f9081526003602052604090205490565b5f80516020611a9383398151915261074681610aef565b5f838152600260205260409020546001600160a01b03166107c15760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a204f7065726174696f6e20666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610505565b505f918252600c6020526040909120805460ff1916911515919091179055565b5f918252600a602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60606001805461042990611822565b6104dc338383610bf8565b5f80516020611a9383398151915261083c81610aef565b5f5b828110156105685761088384848381811061085b5761085b61185a565b905060200201602081019061087091906116a1565b60085461087e906001611981565b610c96565b60010161083e565b6108968484846104e0565b61056884848484610caf565b5f818152600260205260409020546060906001600160a01b03166109085760405162461bcd60e51b815260206004820152601760248201527f546f6b656e20494420646f6573206e6f742065786973740000000000000000006044820152606401610505565b5f600b805461091690611822565b9050116109315760405180602001604052805f815250610415565b600b61093c83610dd5565b60405160200161094d929190611994565b60405160208183030381529060405292915050565b5f828152600a602052604090206001015461097c81610aef565b6105688383610b8d565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b5f6001600160e01b03198216637965db0b60e01b1480610415575061041582610e65565b5f818152600260205260408120546001600160a01b03168061041557604051637e27328960e01b815260048101849052602401610505565b6106288383836001610e89565b5f80610a29858585610f8d565b90506001600160a01b038116610a8557610a8084600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b610aa8565b846001600160a01b0316816001600160a01b031614610aa857610aa8818561107f565b6001600160a01b038516610ac457610abf8461110c565b610ae7565b846001600160a01b0316816001600160a01b031614610ae757610ae785856111b3565b949350505050565b610af98133611201565b50565b5f610b0783836107e1565b610b86575f838152600a602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610b3e3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610415565b505f610415565b5f610b9883836107e1565b15610b86575f838152600a602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610415565b6001600160a01b038216610c2a57604051630b61174360e31b81526001600160a01b0383166004820152602401610505565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6104dc828260405180602001604052805f81525061123a565b6001600160a01b0383163b1561056857604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610cf1903390889087908790600401611a14565b6020604051808303815f875af1925050508015610d2b575060408051601f3d908101601f19168201909252610d2891810190611a50565b60015b610d92573d808015610d58576040519150601f19603f3d011682016040523d82523d5f602084013e610d5d565b606091505b5080515f03610d8a57604051633250574960e11b81526001600160a01b0385166004820152602401610505565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610dce57604051633250574960e11b81526001600160a01b0385166004820152602401610505565b5050505050565b60605f610de183611250565b60010190505f8167ffffffffffffffff811115610e0057610e006115d1565b6040519080825280601f01601f191660200182016040528015610e2a576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084610e3457509392505050565b5f6001600160e01b0319821663780e9d6360e01b1480610415575061041582611327565b8080610e9d57506001600160a01b03821615155b15610f5e575f610eac846109d7565b90506001600160a01b03831615801590610ed85750826001600160a01b0316816001600160a01b031614155b8015610eeb5750610ee98184610986565b155b15610f145760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610505565b8115610f5c5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f828152600260205260408120546001600160a01b0390811690831615610fb957610fb9818486611376565b6001600160a01b03811615610ff357610fd45f855f80610e89565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615611021576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f611089836106ea565b5f838152600760205260409020549091508082146110da576001600160a01b0384165f9081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b505f9182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008545f9061111d90600190611a6b565b5f83815260096020526040812054600880549394509092849081106111445761114461185a565b905f5260205f200154905080600883815481106111635761116361185a565b5f91825260208083209091019290925582815260099091526040808220849055858252812055600880548061119a5761119a611a7e565b600190038181905f5260205f20015f9055905550505050565b5f60016111bf846106ea565b6111c99190611a6b565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b61120b82826107e1565b6104dc5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610505565b61124483836113da565b6106285f848484610caf565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061128e5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106112ba576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106112d857662386f26fc10000830492506010015b6305f5e10083106112f0576305f5e100830492506008015b612710831061130457612710830492506004015b60648310611316576064830492506002015b600a83106104155760010192915050565b5f6001600160e01b031982166380ac58cd60e01b148061135757506001600160e01b03198216635b5e139f60e01b145b8061041557506301ffc9a760e01b6001600160e01b0319831614610415565b61138183838361143b565b610628576001600160a01b0383166113af57604051637e27328960e01b815260048101829052602401610505565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610505565b6001600160a01b03821661140357604051633250574960e11b81525f6004820152602401610505565b5f61140f83835f610a1c565b90506001600160a01b03811615610628576040516339e3563760e11b81525f6004820152602401610505565b5f6001600160a01b03831615801590610ae75750826001600160a01b0316846001600160a01b0316148061147457506114748484610986565b80610ae75750505f908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b031981168114610af9575f80fd5b5f602082840312156114c1575f80fd5b81356114cc8161149c565b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6114cc60208301846114d3565b5f60208284031215611523575f80fd5b5035919050565b80356001600160a01b0381168114611540575f80fd5b919050565b5f8060408385031215611556575f80fd5b61155f8361152a565b946020939093013593505050565b5f805f6060848603121561157f575f80fd5b6115888461152a565b92506115966020850161152a565b929592945050506040919091013590565b5f80604083850312156115b8575f80fd5b823591506115c86020840161152a565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f8067ffffffffffffffff8411156115ff576115ff6115d1565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561162e5761162e6115d1565b604052838152905080828401851015611645575f80fd5b838360208301375f60208583010152509392505050565b5f6020828403121561166c575f80fd5b813567ffffffffffffffff811115611682575f80fd5b8201601f81018413611692575f80fd5b610ae7848235602084016115e5565b5f602082840312156116b1575f80fd5b6114cc8261152a565b80358015158114611540575f80fd5b5f80604083850312156116da575f80fd5b823591506115c8602084016116ba565b5f80604083850312156116fb575f80fd5b6117048361152a565b91506115c8602084016116ba565b5f8060208385031215611723575f80fd5b823567ffffffffffffffff811115611739575f80fd5b8301601f81018513611749575f80fd5b803567ffffffffffffffff81111561175f575f80fd5b8560208260051b8401011115611773575f80fd5b6020919091019590945092505050565b5f805f8060808587031215611796575f80fd5b61179f8561152a565b93506117ad6020860161152a565b925060408501359150606085013567ffffffffffffffff8111156117cf575f80fd5b8501601f810187136117df575f80fd5b6117ee878235602084016115e5565b91505092959194509250565b5f806040838503121561180b575f80fd5b6118148361152a565b91506115c86020840161152a565b600181811c9082168061183657607f821691505b60208210810361185457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b601f82111561062857805f5260205f20601f840160051c810160208510156118935750805b601f840160051c820191505b81811015610dce575f815560010161189f565b815167ffffffffffffffff8111156118cc576118cc6115d1565b6118e0816118da8454611822565b8461186e565b6020601f821160018114611912575f83156118fb5750848201515b5f19600385901b1c1916600184901b178455610dce565b5f84815260208120601f198516915b828110156119415787850151825560209485019460019092019101611921565b508482101561195e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156104155761041561196d565b5f8084546119a181611822565b6001821680156119b857600181146119cd576119fa565b60ff19831686528115158202860193506119fa565b875f5260205f205f5b838110156119f2578154888201526001909101906020016119d6565b505081860193505b50505083518060208601835e5f9101908152949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90611a46908301846114d3565b9695505050505050565b5f60208284031215611a60575f80fd5b81516114cc8161149c565b818103818111156104155761041561196d565b634e487b7160e01b5f52603160045260245ffdfea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220cb3cc050ad8f9c667c138661f4ebf0a34f30be54daecf5e93cc77906986287c964736f6c634300081a0033a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775